blob: a240017e488c6febc43ac864883ff0fcee06fd66 [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 Tarreau991b4782015-10-13 21:48:10 +02005 version 1.7
Willy Tarreau6a06a402007-07-15 20:15:28 +02006 willy tarreau
Willy Tarreau608efa12016-10-25 22:22:00 +02007 2016/10/25
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
109
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200110
1111. Quick reminder about HTTP
112----------------------------
113
114When haproxy is running in HTTP mode, both the request and the response are
115fully analyzed and indexed, thus it becomes possible to build matching criteria
116on almost anything found in the contents.
117
118However, it is important to understand how HTTP requests and responses are
119formed, and how HAProxy decomposes them. It will then become easier to write
120correct rules and to debug existing configurations.
121
122
1231.1. The HTTP transaction model
124-------------------------------
125
126The HTTP protocol is transaction-driven. This means that each request will lead
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +0100127to one and only one response. Traditionally, a TCP connection is established
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200128from the client to the server, a request is sent by the client on the
129connection, the server responds and the connection is closed. A new request
130will involve a new connection :
131
132 [CON1] [REQ1] ... [RESP1] [CLO1] [CON2] [REQ2] ... [RESP2] [CLO2] ...
133
134In this mode, called the "HTTP close" mode, there are as many connection
135establishments as there are HTTP transactions. Since the connection is closed
136by the server after the response, the client does not need to know the content
137length.
138
139Due to the transactional nature of the protocol, it was possible to improve it
140to avoid closing a connection between two subsequent transactions. In this mode
141however, it is mandatory that the server indicates the content length for each
142response so that the client does not wait indefinitely. For this, a special
143header is used: "Content-length". This mode is called the "keep-alive" mode :
144
145 [CON] [REQ1] ... [RESP1] [REQ2] ... [RESP2] [CLO] ...
146
147Its advantages are a reduced latency between transactions, and less processing
148power required on the server side. It is generally better than the close mode,
149but not always because the clients often limit their concurrent connections to
Patrick Mezard9ec2ec42010-06-12 17:02:45 +0200150a smaller value.
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200151
152A last improvement in the communications is the pipelining mode. It still uses
153keep-alive, but the client does not wait for the first response to send the
154second request. This is useful for fetching large number of images composing a
155page :
156
157 [CON] [REQ1] [REQ2] ... [RESP1] [RESP2] [CLO] ...
158
159This can obviously have a tremendous benefit on performance because the network
160latency is eliminated between subsequent requests. Many HTTP agents do not
161correctly support pipelining since there is no way to associate a response with
162the corresponding request in HTTP. For this reason, it is mandatory for the
Cyril Bonté78caf842010-03-10 22:41:43 +0100163server to reply in the exact same order as the requests were received.
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200164
Willy Tarreau70dffda2014-01-30 03:07:23 +0100165By default HAProxy operates in keep-alive mode with regards to persistent
166connections: for each connection it processes each request and response, and
167leaves the connection idle on both sides between the end of a response and the
168start of a new request.
Patrick Mezard9ec2ec42010-06-12 17:02:45 +0200169
Willy Tarreau70dffda2014-01-30 03:07:23 +0100170HAProxy supports 5 connection modes :
171 - keep alive : all requests and responses are processed (default)
172 - tunnel : only the first request and response are processed,
173 everything else is forwarded with no analysis.
174 - passive close : tunnel with "Connection: close" added in both directions.
175 - server close : the server-facing connection is closed after the response.
176 - forced close : the connection is actively closed after end of response.
177
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200178
1791.2. HTTP request
180-----------------
181
182First, let's consider this HTTP request :
183
184 Line Contents
Willy Tarreaud72758d2010-01-12 10:42:19 +0100185 number
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200186 1 GET /serv/login.php?lang=en&profile=2 HTTP/1.1
187 2 Host: www.mydomain.com
188 3 User-agent: my small browser
189 4 Accept: image/jpeg, image/gif
190 5 Accept: image/png
191
192
1931.2.1. The Request line
194-----------------------
195
196Line 1 is the "request line". It is always composed of 3 fields :
197
198 - a METHOD : GET
199 - a URI : /serv/login.php?lang=en&profile=2
200 - a version tag : HTTP/1.1
201
202All of them are delimited by what the standard calls LWS (linear white spaces),
203which are commonly spaces, but can also be tabs or line feeds/carriage returns
204followed by spaces/tabs. The method itself cannot contain any colon (':') and
205is limited to alphabetic letters. All those various combinations make it
206desirable that HAProxy performs the splitting itself rather than leaving it to
207the user to write a complex or inaccurate regular expression.
208
209The URI itself can have several forms :
210
211 - A "relative URI" :
212
213 /serv/login.php?lang=en&profile=2
214
215 It is a complete URL without the host part. This is generally what is
216 received by servers, reverse proxies and transparent proxies.
217
218 - An "absolute URI", also called a "URL" :
219
220 http://192.168.0.12:8080/serv/login.php?lang=en&profile=2
221
222 It is composed of a "scheme" (the protocol name followed by '://'), a host
223 name or address, optionally a colon (':') followed by a port number, then
224 a relative URI beginning at the first slash ('/') after the address part.
225 This is generally what proxies receive, but a server supporting HTTP/1.1
226 must accept this form too.
227
228 - a star ('*') : this form is only accepted in association with the OPTIONS
229 method and is not relayable. It is used to inquiry a next hop's
230 capabilities.
Willy Tarreaud72758d2010-01-12 10:42:19 +0100231
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200232 - an address:port combination : 192.168.0.12:80
233 This is used with the CONNECT method, which is used to establish TCP
234 tunnels through HTTP proxies, generally for HTTPS, but sometimes for
235 other protocols too.
236
237In a relative URI, two sub-parts are identified. The part before the question
238mark is called the "path". It is typically the relative path to static objects
239on the server. The part after the question mark is called the "query string".
240It is mostly used with GET requests sent to dynamic scripts and is very
241specific to the language, framework or application in use.
242
243
2441.2.2. The request headers
245--------------------------
246
247The headers start at the second line. They are composed of a name at the
248beginning of the line, immediately followed by a colon (':'). Traditionally,
249an LWS is added after the colon but that's not required. Then come the values.
250Multiple identical headers may be folded into one single line, delimiting the
251values with commas, provided that their order is respected. This is commonly
252encountered in the "Cookie:" field. A header may span over multiple lines if
253the subsequent lines begin with an LWS. In the example in 1.2, lines 4 and 5
254define a total of 3 values for the "Accept:" header.
255
256Contrary to a common mis-conception, header names are not case-sensitive, and
257their values are not either if they refer to other header names (such as the
258"Connection:" header).
259
260The end of the headers is indicated by the first empty line. People often say
261that it's a double line feed, which is not exact, even if a double line feed
262is one valid form of empty line.
263
264Fortunately, HAProxy takes care of all these complex combinations when indexing
265headers, checking values and counting them, so there is no reason to worry
266about the way they could be written, but it is important not to accuse an
267application of being buggy if it does unusual, valid things.
268
269Important note:
270 As suggested by RFC2616, HAProxy normalizes headers by replacing line breaks
271 in the middle of headers by LWS in order to join multi-line headers. This
272 is necessary for proper analysis and helps less capable HTTP parsers to work
273 correctly and not to be fooled by such complex constructs.
274
275
2761.3. HTTP response
277------------------
278
279An HTTP response looks very much like an HTTP request. Both are called HTTP
280messages. Let's consider this HTTP response :
281
282 Line Contents
Willy Tarreaud72758d2010-01-12 10:42:19 +0100283 number
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200284 1 HTTP/1.1 200 OK
285 2 Content-length: 350
286 3 Content-Type: text/html
287
Willy Tarreau816b9792009-09-15 21:25:21 +0200288As a special case, HTTP supports so called "Informational responses" as status
289codes 1xx. These messages are special in that they don't convey any part of the
290response, they're just used as sort of a signaling message to ask a client to
Willy Tarreau5843d1a2010-02-01 15:13:32 +0100291continue to post its request for instance. In the case of a status 100 response
292the requested information will be carried by the next non-100 response message
293following the informational one. This implies that multiple responses may be
294sent to a single request, and that this only works when keep-alive is enabled
295(1xx messages are HTTP/1.1 only). HAProxy handles these messages and is able to
296correctly forward and skip them, and only process the next non-100 response. As
297such, these messages are neither logged nor transformed, unless explicitly
298state otherwise. Status 101 messages indicate that the protocol is changing
299over the same connection and that haproxy must switch to tunnel mode, just as
300if a CONNECT had occurred. Then the Upgrade header would contain additional
301information about the type of protocol the connection is switching to.
Willy Tarreau816b9792009-09-15 21:25:21 +0200302
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200303
3041.3.1. The Response line
305------------------------
306
307Line 1 is the "response line". It is always composed of 3 fields :
308
309 - a version tag : HTTP/1.1
310 - a status code : 200
311 - a reason : OK
312
313The status code is always 3-digit. The first digit indicates a general status :
Willy Tarreau816b9792009-09-15 21:25:21 +0200314 - 1xx = informational message to be skipped (eg: 100, 101)
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200315 - 2xx = OK, content is following (eg: 200, 206)
316 - 3xx = OK, no content following (eg: 302, 304)
317 - 4xx = error caused by the client (eg: 401, 403, 404)
318 - 5xx = error caused by the server (eg: 500, 502, 503)
319
320Please refer to RFC2616 for the detailed meaning of all such codes. The
Willy Tarreaud72758d2010-01-12 10:42:19 +0100321"reason" field is just a hint, but is not parsed by clients. Anything can be
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200322found there, but it's a common practice to respect the well-established
323messages. It can be composed of one or multiple words, such as "OK", "Found",
324or "Authentication Required".
325
326Haproxy may emit the following status codes by itself :
327
328 Code When / reason
329 200 access to stats page, and when replying to monitoring requests
330 301 when performing a redirection, depending on the configured code
331 302 when performing a redirection, depending on the configured code
332 303 when performing a redirection, depending on the configured code
Willy Tarreaub67fdc42013-03-29 19:28:11 +0100333 307 when performing a redirection, depending on the configured code
334 308 when performing a redirection, depending on the configured code
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200335 400 for an invalid or too large request
336 401 when an authentication is required to perform the action (when
337 accessing the stats page)
338 403 when a request is forbidden by a "block" ACL or "reqdeny" filter
339 408 when the request timeout strikes before the request is complete
340 500 when haproxy encounters an unrecoverable internal error, such as a
341 memory allocation failure, which should never happen
342 502 when the server returns an empty, invalid or incomplete response, or
343 when an "rspdeny" filter blocks the response.
344 503 when no server was available to handle the request, or in response to
345 monitoring requests which match the "monitor fail" condition
346 504 when the response timeout strikes before the server responds
347
348The error 4xx and 5xx codes above may be customized (see "errorloc" in section
3494.2).
350
351
3521.3.2. The response headers
353---------------------------
354
355Response headers work exactly like request headers, and as such, HAProxy uses
356the same parsing function for both. Please refer to paragraph 1.2.2 for more
357details.
358
359
3602. Configuring HAProxy
361----------------------
362
3632.1. Configuration file format
364------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +0200365
366HAProxy's configuration process involves 3 major sources of parameters :
367
368 - the arguments from the command-line, which always take precedence
369 - the "global" section, which sets process-wide parameters
370 - the proxies sections which can take form of "defaults", "listen",
371 "frontend" and "backend".
372
Willy Tarreau0ba27502007-12-24 16:55:16 +0100373The configuration file syntax consists in lines beginning with a keyword
374referenced in this manual, optionally followed by one or several parameters
William Lallemandf9873ba2015-05-05 17:37:14 +0200375delimited by spaces.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100376
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200377
William Lallemandf9873ba2015-05-05 17:37:14 +02003782.2. Quoting and escaping
379-------------------------
380
381HAProxy's configuration introduces a quoting and escaping system similar to
382many programming languages. The configuration file supports 3 types: escaping
383with a backslash, weak quoting with double quotes, and strong quoting with
384single quotes.
385
386If spaces have to be entered in strings, then they must be escaped by preceding
387them by a backslash ('\') or by quoting them. Backslashes also have to be
388escaped by doubling or strong quoting them.
389
390Escaping is achieved by preceding a special character by a backslash ('\'):
391
392 \ to mark a space and differentiate it from a delimiter
393 \# to mark a hash and differentiate it from a comment
394 \\ to use a backslash
395 \' to use a single quote and differentiate it from strong quoting
396 \" to use a double quote and differentiate it from weak quoting
397
398Weak quoting is achieved by using double quotes (""). Weak quoting prevents
399the interpretation of:
400
401 space as a parameter separator
402 ' single quote as a strong quoting delimiter
403 # hash as a comment start
404
William Lallemandb2f07452015-05-12 14:27:13 +0200405Weak quoting permits the interpretation of variables, if you want to use a non
406-interpreted dollar within a double quoted string, you should escape it with a
407backslash ("\$"), it does not work outside weak quoting.
408
409Interpretation of escaping and special characters are not prevented by weak
William Lallemandf9873ba2015-05-05 17:37:14 +0200410quoting.
411
412Strong quoting is achieved by using single quotes (''). Inside single quotes,
413nothing is interpreted, it's the efficient way to quote regexes.
414
415Quoted and escaped strings are replaced in memory by their interpreted
416equivalent, it allows you to perform concatenation.
417
418 Example:
419 # those are equivalents:
420 log-format %{+Q}o\ %t\ %s\ %{-Q}r
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
426 # those are equivalents:
427 reqrep "^([^\ :]*)\ /static/(.*)" \1\ /\2
428 reqrep "^([^ :]*)\ /static/(.*)" '\1 /\2'
429 reqrep "^([^ :]*)\ /static/(.*)" "\1 /\2"
430 reqrep "^([^ :]*)\ /static/(.*)" "\1\ /\2"
431
432
William Lallemandb2f07452015-05-12 14:27:13 +02004332.3. Environment variables
434--------------------------
435
436HAProxy's configuration supports environment variables. Those variables are
437interpreted only within double quotes. Variables are expanded during the
438configuration parsing. Variable names must be preceded by a dollar ("$") and
439optionally enclosed with braces ("{}") similarly to what is done in Bourne
440shell. Variable names can contain alphanumerical characters or the character
441underscore ("_") but should not start with a digit.
442
443 Example:
444
445 bind "fd@${FD_APP1}"
446
447 log "${LOCAL_SYSLOG}:514" local0 notice # send to local server
448
449 user "$HAPROXY_USER"
450
451
4522.4. Time format
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200453----------------
454
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +0100455Some parameters involve values representing time, such as timeouts. These
Willy Tarreau0ba27502007-12-24 16:55:16 +0100456values are generally expressed in milliseconds (unless explicitly stated
457otherwise) but may be expressed in any other unit by suffixing the unit to the
458numeric value. It is important to consider this because it will not be repeated
459for every keyword. Supported units are :
460
461 - us : microseconds. 1 microsecond = 1/1000000 second
462 - ms : milliseconds. 1 millisecond = 1/1000 second. This is the default.
463 - s : seconds. 1s = 1000ms
464 - m : minutes. 1m = 60s = 60000ms
465 - h : hours. 1h = 60m = 3600s = 3600000ms
466 - d : days. 1d = 24h = 1440m = 86400s = 86400000ms
467
468
William Lallemandf9873ba2015-05-05 17:37:14 +02004692.4. Examples
Patrick Mezard35da19c2010-06-12 17:02:47 +0200470-------------
471
472 # Simple configuration for an HTTP proxy listening on port 80 on all
473 # interfaces and forwarding requests to a single backend "servers" with a
474 # single server "server1" listening on 127.0.0.1:8000
475 global
476 daemon
477 maxconn 256
478
479 defaults
480 mode http
481 timeout connect 5000ms
482 timeout client 50000ms
483 timeout server 50000ms
484
485 frontend http-in
486 bind *:80
487 default_backend servers
488
489 backend servers
490 server server1 127.0.0.1:8000 maxconn 32
491
492
493 # The same configuration defined with a single listen block. Shorter but
494 # less expressive, especially in HTTP mode.
495 global
496 daemon
497 maxconn 256
498
499 defaults
500 mode http
501 timeout connect 5000ms
502 timeout client 50000ms
503 timeout server 50000ms
504
505 listen http-in
506 bind *:80
507 server server1 127.0.0.1:8000 maxconn 32
508
509
510Assuming haproxy is in $PATH, test these configurations in a shell with:
511
Willy Tarreauccb289d2010-12-11 20:19:38 +0100512 $ sudo haproxy -f configuration.conf -c
Patrick Mezard35da19c2010-06-12 17:02:47 +0200513
514
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005153. Global parameters
Willy Tarreau6a06a402007-07-15 20:15:28 +0200516--------------------
517
518Parameters in the "global" section are process-wide and often OS-specific. They
519are generally set once for all and do not need being changed once correct. Some
520of them have command-line equivalents.
521
522The following keywords are supported in the "global" section :
523
524 * Process management and security
Emeric Brunc8e8d122012-10-02 18:42:10 +0200525 - ca-base
Willy Tarreau6a06a402007-07-15 20:15:28 +0200526 - chroot
Emeric Brunc8e8d122012-10-02 18:42:10 +0200527 - crt-base
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200528 - cpu-map
Willy Tarreau6a06a402007-07-15 20:15:28 +0200529 - daemon
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200530 - description
531 - deviceatlas-json-file
532 - deviceatlas-log-level
533 - deviceatlas-separator
534 - deviceatlas-properties-cookie
Simon Horman98637e52014-06-20 12:30:16 +0900535 - external-check
Willy Tarreau6a06a402007-07-15 20:15:28 +0200536 - gid
537 - group
538 - log
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200539 - log-tag
Joe Williamsdf5b38f2010-12-29 17:05:48 +0100540 - log-send-hostname
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200541 - lua-load
Willy Tarreau6a06a402007-07-15 20:15:28 +0200542 - nbproc
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200543 - node
Willy Tarreau6a06a402007-07-15 20:15:28 +0200544 - pidfile
Willy Tarreau1d549722016-02-16 12:41:57 +0100545 - presetenv
546 - resetenv
Willy Tarreau6a06a402007-07-15 20:15:28 +0200547 - uid
548 - ulimit-n
549 - user
Willy Tarreau1d549722016-02-16 12:41:57 +0100550 - setenv
Willy Tarreaufbee7132007-10-18 13:53:22 +0200551 - stats
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200552 - ssl-default-bind-ciphers
553 - ssl-default-bind-options
554 - ssl-default-server-ciphers
555 - ssl-default-server-options
556 - ssl-dh-param-file
Emeric Brun850efd52014-01-29 12:24:34 +0100557 - ssl-server-verify
Willy Tarreauceb24bc2010-11-09 12:46:41 +0100558 - unix-bind
Willy Tarreau1d549722016-02-16 12:41:57 +0100559 - unsetenv
Thomas Holmesdb04f192015-05-18 13:21:39 +0100560 - 51degrees-data-file
561 - 51degrees-property-name-list
Dragan Dosen93b38d92015-06-29 16:43:25 +0200562 - 51degrees-property-separator
Dragan Dosenae6d39a2015-06-29 16:43:27 +0200563 - 51degrees-cache-size
scientiamobiled0027ed2016-11-04 10:55:08 +0100564 - wurfl-data-file
565 - wurfl-information-list
566 - wurfl-information-list-separator
567 - wurfl-engine-mode
568 - wurfl-cache-size
569 - wurfl-useragent-priority
Willy Tarreaud72758d2010-01-12 10:42:19 +0100570
Willy Tarreau6a06a402007-07-15 20:15:28 +0200571 * Performance tuning
Willy Tarreau1746eec2014-04-25 10:46:47 +0200572 - max-spread-checks
Willy Tarreau6a06a402007-07-15 20:15:28 +0200573 - maxconn
Willy Tarreau81c25d02011-09-07 15:17:21 +0200574 - maxconnrate
William Lallemandd85f9172012-11-09 17:05:39 +0100575 - maxcomprate
William Lallemand072a2bf2012-11-20 17:01:01 +0100576 - maxcompcpuusage
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100577 - maxpipes
Willy Tarreau93e7c002013-10-07 18:51:07 +0200578 - maxsessrate
Willy Tarreau403edff2012-09-06 11:58:37 +0200579 - maxsslconn
Willy Tarreaue43d5322013-10-07 20:01:52 +0200580 - maxsslrate
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200581 - maxzlibmem
Willy Tarreau6a06a402007-07-15 20:15:28 +0200582 - noepoll
583 - nokqueue
584 - nopoll
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100585 - nosplice
Jarno Huuskonen0e82b922014-04-12 18:22:19 +0300586 - nogetaddrinfo
Lukas Tribusa0bcbdc2016-09-12 21:42:20 +0000587 - noreuseport
Willy Tarreaufe255b72007-10-14 23:09:26 +0200588 - spread-checks
Baptiste Assmann5626f482015-08-23 10:00:10 +0200589 - server-state-base
Baptiste Assmannef1f0fc2015-08-23 10:06:39 +0200590 - server-state-file
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200591 - tune.buffers.limit
592 - tune.buffers.reserve
Willy Tarreau27a674e2009-08-17 07:23:33 +0200593 - tune.bufsize
Willy Tarreau43961d52010-10-04 20:39:20 +0200594 - tune.chksize
William Lallemandf3747832012-11-09 12:33:10 +0100595 - tune.comp.maxlevel
Willy Tarreau193b8c62012-11-22 00:17:38 +0100596 - tune.http.cookielen
Willy Tarreauac1932d2011-10-24 19:14:41 +0200597 - tune.http.maxhdr
Willy Tarreau7e312732014-02-12 16:35:14 +0100598 - tune.idletimer
Thierry FOURNIER90da1912015-03-05 11:17:06 +0100599 - tune.lua.forced-yield
Willy Tarreau32f61e22015-03-18 17:54:59 +0100600 - tune.lua.maxmem
Thierry FOURNIER90da1912015-03-05 11:17:06 +0100601 - tune.lua.session-timeout
602 - tune.lua.task-timeout
Thierry FOURNIER7dd784b2015-10-01 14:49:33 +0200603 - tune.lua.service-timeout
Willy Tarreaua0250ba2008-01-06 11:22:57 +0100604 - tune.maxaccept
605 - tune.maxpollevents
Willy Tarreau27a674e2009-08-17 07:23:33 +0200606 - tune.maxrewrite
Willy Tarreauf3045d22015-04-29 16:24:50 +0200607 - tune.pattern.cache-size
Willy Tarreaubd9a0a72011-10-23 21:14:29 +0200608 - tune.pipesize
Willy Tarreaue803de22010-01-21 17:43:04 +0100609 - tune.rcvbuf.client
610 - tune.rcvbuf.server
Willy Tarreaub22fc302015-12-14 12:04:35 +0100611 - tune.recv_enough
Willy Tarreaue803de22010-01-21 17:43:04 +0100612 - tune.sndbuf.client
613 - tune.sndbuf.server
Willy Tarreau6ec58db2012-11-16 16:32:15 +0100614 - tune.ssl.cachesize
Willy Tarreaubfd59462013-02-21 07:46:09 +0100615 - tune.ssl.lifetime
Emeric Brun8dc60392014-05-09 13:52:00 +0200616 - tune.ssl.force-private-cache
Willy Tarreaubfd59462013-02-21 07:46:09 +0100617 - tune.ssl.maxrecord
Remi Gacognef46cd6e2014-06-12 14:58:40 +0200618 - tune.ssl.default-dh-param
Christopher Faulet31af49d2015-06-09 17:29:50 +0200619 - tune.ssl.ssl-ctx-cache-size
Thierry FOURNIER4834bc72015-06-06 19:29:07 +0200620 - tune.vars.global-max-size
Christopher Fauletff2613e2016-11-09 11:36:17 +0100621 - tune.vars.proc-max-size
Thierry FOURNIER4834bc72015-06-06 19:29:07 +0200622 - tune.vars.reqres-max-size
623 - tune.vars.sess-max-size
624 - tune.vars.txn-max-size
William Lallemanda509e4c2012-11-07 16:54:34 +0100625 - tune.zlib.memlevel
626 - tune.zlib.windowsize
Willy Tarreaud72758d2010-01-12 10:42:19 +0100627
Willy Tarreau6a06a402007-07-15 20:15:28 +0200628 * Debugging
629 - debug
630 - quiet
Willy Tarreau6a06a402007-07-15 20:15:28 +0200631
632
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006333.1. Process management and security
Willy Tarreau6a06a402007-07-15 20:15:28 +0200634------------------------------------
635
Emeric Brunc8e8d122012-10-02 18:42:10 +0200636ca-base <dir>
637 Assigns a default directory to fetch SSL CA certificates and CRLs from when a
Emeric Brunfd33a262012-10-11 16:28:27 +0200638 relative path is used with "ca-file" or "crl-file" directives. Absolute
639 locations specified in "ca-file" and "crl-file" prevail and ignore "ca-base".
Emeric Brunc8e8d122012-10-02 18:42:10 +0200640
Willy Tarreau6a06a402007-07-15 20:15:28 +0200641chroot <jail dir>
642 Changes current directory to <jail dir> and performs a chroot() there before
643 dropping privileges. This increases the security level in case an unknown
644 vulnerability would be exploited, since it would make it very hard for the
645 attacker to exploit the system. This only works when the process is started
646 with superuser privileges. It is important to ensure that <jail_dir> is both
647 empty and unwritable to anyone.
Willy Tarreaud72758d2010-01-12 10:42:19 +0100648
Willy Tarreaufc6c0322012-11-16 16:12:27 +0100649cpu-map <"all"|"odd"|"even"|process_num> <cpu-set>...
650 On Linux 2.6 and above, it is possible to bind a process to a specific CPU
651 set. This means that the process will never run on other CPUs. The "cpu-map"
652 directive specifies CPU sets for process sets. The first argument is the
Willy Tarreaua9db57e2013-01-18 11:29:29 +0100653 process number to bind. This process must have a number between 1 and 32 or
654 64, depending on the machine's word size, and any process IDs above nbproc
655 are ignored. It is possible to specify all processes at once using "all",
656 only odd numbers using "odd" or even numbers using "even", just like with the
657 "bind-process" directive. The second and forthcoming arguments are CPU sets.
658 Each CPU set is either a unique number between 0 and 31 or 63 or a range with
659 two such numbers delimited by a dash ('-'). Multiple CPU numbers or ranges
660 may be specified, and the processes will be allowed to bind to all of them.
661 Obviously, multiple "cpu-map" directives may be specified. Each "cpu-map"
662 directive will replace the previous ones when they overlap.
Willy Tarreaufc6c0322012-11-16 16:12:27 +0100663
Emeric Brunc8e8d122012-10-02 18:42:10 +0200664crt-base <dir>
665 Assigns a default directory to fetch SSL certificates from when a relative
666 path is used with "crtfile" directives. Absolute locations specified after
667 "crtfile" prevail and ignore "crt-base".
668
Willy Tarreau6a06a402007-07-15 20:15:28 +0200669daemon
670 Makes the process fork into background. This is the recommended mode of
671 operation. It is equivalent to the command line "-D" argument. It can be
672 disabled by the command line "-db" argument.
673
David Carlier8167f302015-06-01 13:50:06 +0200674deviceatlas-json-file <path>
675 Sets the path of the DeviceAtlas JSON data file to be loaded by the API.
676 The path must be a valid JSON data file and accessible by Haproxy process.
677
678deviceatlas-log-level <value>
679 Sets the level of informations returned by the API. This directive is
680 optional and set to 0 by default if not set.
681
682deviceatlas-separator <char>
683 Sets the character separator for the API properties results. This directive
684 is optional and set to | by default if not set.
685
Cyril Bonté0306c4a2015-10-26 22:37:38 +0100686deviceatlas-properties-cookie <name>
Cyril Bonté307ee1e2015-09-28 23:16:06 +0200687 Sets the client cookie's name used for the detection if the DeviceAtlas
688 Client-side component was used during the request. This directive is optional
689 and set to DAPROPS by default if not set.
David Carlier29b3ca32015-09-25 14:09:21 +0100690
Simon Horman98637e52014-06-20 12:30:16 +0900691external-check
692 Allows the use of an external agent to perform health checks.
693 This is disabled by default as a security precaution.
694 See "option external-check".
695
Willy Tarreau6a06a402007-07-15 20:15:28 +0200696gid <number>
697 Changes the process' group ID to <number>. It is recommended that the group
698 ID is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
699 be started with a user belonging to this group, or with superuser privileges.
Michael Schererab012dd2013-01-12 18:35:19 +0100700 Note that if haproxy is started from a user having supplementary groups, it
701 will only be able to drop these groups if started with superuser privileges.
Willy Tarreau6a06a402007-07-15 20:15:28 +0200702 See also "group" and "uid".
Willy Tarreaud72758d2010-01-12 10:42:19 +0100703
Willy Tarreau6a06a402007-07-15 20:15:28 +0200704group <group name>
705 Similar to "gid" but uses the GID of group name <group name> from /etc/group.
706 See also "gid" and "user".
Willy Tarreaud72758d2010-01-12 10:42:19 +0100707
Dragan Dosen7ad31542015-09-28 17:16:47 +0200708log <address> [len <length>] [format <format>] <facility> [max level [min level]]
Willy Tarreau6a06a402007-07-15 20:15:28 +0200709 Adds a global syslog server. Up to two global servers can be defined. They
710 will receive logs for startups and exits, as well as all logs from proxies
Robert Tsai81ae1952007-12-05 10:47:29 +0100711 configured with "log global".
712
713 <address> can be one of:
714
Willy Tarreau2769aa02007-12-27 18:26:09 +0100715 - An IPv4 address optionally followed by a colon and a UDP port. If
Robert Tsai81ae1952007-12-05 10:47:29 +0100716 no port is specified, 514 is used by default (the standard syslog
717 port).
718
David du Colombier24bb5f52011-03-17 10:40:23 +0100719 - An IPv6 address followed by a colon and optionally a UDP port. If
720 no port is specified, 514 is used by default (the standard syslog
721 port).
722
Robert Tsai81ae1952007-12-05 10:47:29 +0100723 - A filesystem path to a UNIX domain socket, keeping in mind
724 considerations for chroot (be sure the path is accessible inside
725 the chroot) and uid/gid (be sure the path is appropriately
726 writeable).
727
William Lallemandb2f07452015-05-12 14:27:13 +0200728 You may want to reference some environment variables in the address
729 parameter, see section 2.3 about environment variables.
Willy Tarreaudad36a32013-03-11 01:20:04 +0100730
Willy Tarreau18324f52014-06-27 18:10:07 +0200731 <length> is an optional maximum line length. Log lines larger than this value
732 will be truncated before being sent. The reason is that syslog
733 servers act differently on log line length. All servers support the
734 default value of 1024, but some servers simply drop larger lines
735 while others do log them. If a server supports long lines, it may
736 make sense to set this value here in order to avoid truncating long
737 lines. Similarly, if a server drops long lines, it is preferable to
738 truncate them before sending them. Accepted values are 80 to 65535
739 inclusive. The default value of 1024 is generally fine for all
740 standard usages. Some specific cases of long captures or
741 JSON-formated logs may require larger values.
742
Dragan Dosen7ad31542015-09-28 17:16:47 +0200743 <format> is the log format used when generating syslog messages. It may be
744 one of the following :
745
746 rfc3164 The RFC3164 syslog message format. This is the default.
747 (https://tools.ietf.org/html/rfc3164)
748
749 rfc5424 The RFC5424 syslog message format.
750 (https://tools.ietf.org/html/rfc5424)
751
Robert Tsai81ae1952007-12-05 10:47:29 +0100752 <facility> must be one of the 24 standard syslog facilities :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200753
754 kern user mail daemon auth syslog lpr news
755 uucp cron auth2 ftp ntp audit alert cron2
756 local0 local1 local2 local3 local4 local5 local6 local7
757
758 An optional level can be specified to filter outgoing messages. By default,
Willy Tarreauf7edefa2009-05-10 17:20:05 +0200759 all messages are sent. If a maximum level is specified, only messages with a
760 severity at least as important as this level will be sent. An optional minimum
761 level can be specified. If it is set, logs emitted with a more severe level
762 than this one will be capped to this level. This is used to avoid sending
763 "emerg" messages on all terminals on some default syslog configurations.
764 Eight levels are known :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200765
Cyril Bontédc4d9032012-04-08 21:57:39 +0200766 emerg alert crit err warning notice info debug
Willy Tarreau6a06a402007-07-15 20:15:28 +0200767
Joe Williamsdf5b38f2010-12-29 17:05:48 +0100768log-send-hostname [<string>]
769 Sets the hostname field in the syslog header. If optional "string" parameter
770 is set the header is set to the string contents, otherwise uses the hostname
771 of the system. Generally used if one is not relaying logs through an
772 intermediate syslog server or for simply customizing the hostname printed in
773 the logs.
774
Kevinm48936af2010-12-22 16:08:21 +0000775log-tag <string>
776 Sets the tag field in the syslog header to this string. It defaults to the
777 program name as launched from the command line, which usually is "haproxy".
778 Sometimes it can be useful to differentiate between multiple processes
Willy Tarreau094af4e2015-01-07 15:03:42 +0100779 running on the same host. See also the per-proxy "log-tag" directive.
Kevinm48936af2010-12-22 16:08:21 +0000780
Thierry FOURNIER90da1912015-03-05 11:17:06 +0100781lua-load <file>
782 This global directive loads and executes a Lua file. This directive can be
783 used multiple times.
784
Willy Tarreau6a06a402007-07-15 20:15:28 +0200785nbproc <number>
786 Creates <number> processes when going daemon. This requires the "daemon"
787 mode. By default, only one process is created, which is the recommended mode
788 of operation. For systems limited to small sets of file descriptors per
789 process, it may be needed to fork multiple daemons. USING MULTIPLE PROCESSES
790 IS HARDER TO DEBUG AND IS REALLY DISCOURAGED. See also "daemon".
791
792pidfile <pidfile>
793 Writes pids of all daemons into file <pidfile>. This option is equivalent to
794 the "-p" command line argument. The file must be accessible to the user
795 starting the process. See also "daemon".
796
Willy Tarreau1d549722016-02-16 12:41:57 +0100797presetenv <name> <value>
798 Sets environment variable <name> to value <value>. If the variable exists, it
799 is NOT overwritten. The changes immediately take effect so that the next line
800 in the configuration file sees the new value. See also "setenv", "resetenv",
801 and "unsetenv".
802
803resetenv [<name> ...]
804 Removes all environment variables except the ones specified in argument. It
805 allows to use a clean controlled environment before setting new values with
806 setenv or unsetenv. Please note that some internal functions may make use of
807 some environment variables, such as time manipulation functions, but also
808 OpenSSL or even external checks. This must be used with extreme care and only
809 after complete validation. The changes immediately take effect so that the
810 next line in the configuration file sees the new environment. See also
811 "setenv", "presetenv", and "unsetenv".
812
Willy Tarreaua9db57e2013-01-18 11:29:29 +0100813stats bind-process [ all | odd | even | <number 1-64>[-<number 1-64>] ] ...
Willy Tarreau35b7b162012-10-22 23:17:18 +0200814 Limits the stats socket to a certain set of processes numbers. By default the
815 stats socket is bound to all processes, causing a warning to be emitted when
816 nbproc is greater than 1 because there is no way to select the target process
817 when connecting. However, by using this setting, it becomes possible to pin
818 the stats socket to a specific set of processes, typically the first one. The
819 warning will automatically be disabled when this setting is used, whatever
Willy Tarreaua9db57e2013-01-18 11:29:29 +0100820 the number of processes used. The maximum process ID depends on the machine's
Willy Tarreauae302532014-05-07 19:22:24 +0200821 word size (32 or 64). A better option consists in using the "process" setting
822 of the "stats socket" line to force the process on each line.
Willy Tarreau35b7b162012-10-22 23:17:18 +0200823
Baptiste Assmann5626f482015-08-23 10:00:10 +0200824server-state-base <directory>
825 Specifies the directory prefix to be prepended in front of all servers state
Baptiste Assmann01c6cc32015-08-23 11:45:29 +0200826 file names which do not start with a '/'. See also "server-state-file",
827 "load-server-state-from-file" and "server-state-file-name".
Baptiste Assmannef1f0fc2015-08-23 10:06:39 +0200828
829server-state-file <file>
830 Specifies the path to the file containing state of servers. If the path starts
831 with a slash ('/'), it is considered absolute, otherwise it is considered
832 relative to the directory specified using "server-state-base" (if set) or to
833 the current directory. Before reloading HAProxy, it is possible to save the
834 servers' current state using the stats command "show servers state". The
835 output of this command must be written in the file pointed by <file>. When
836 starting up, before handling traffic, HAProxy will read, load and apply state
837 for each server found in the file and available in its current running
Baptiste Assmann01c6cc32015-08-23 11:45:29 +0200838 configuration. See also "server-state-base" and "show servers state",
839 "load-server-state-from-file" and "server-state-file-name"
Baptiste Assmann5626f482015-08-23 10:00:10 +0200840
Willy Tarreau1d549722016-02-16 12:41:57 +0100841setenv <name> <value>
842 Sets environment variable <name> to value <value>. If the variable exists, it
843 is overwritten. The changes immediately take effect so that the next line in
844 the configuration file sees the new value. See also "presetenv", "resetenv",
845 and "unsetenv".
846
Willy Tarreau610f04b2014-02-13 11:36:41 +0100847ssl-default-bind-ciphers <ciphers>
848 This setting is only available when support for OpenSSL was built in. It sets
849 the default string describing the list of cipher algorithms ("cipher suite")
Jarno Huuskonen0e82b922014-04-12 18:22:19 +0300850 that are negotiated during the SSL/TLS handshake for all "bind" lines which
Willy Tarreau610f04b2014-02-13 11:36:41 +0100851 do not explicitly define theirs. The format of the string is defined in
852 "man 1 ciphers" from OpenSSL man pages, and can be for instance a string such
853 as "AES:ALL:!aNULL:!eNULL:+RC4:@STRENGTH" (without quotes). Please check the
854 "bind" keyword for more information.
855
Emeric Brun2c86cbf2014-10-30 15:56:50 +0100856ssl-default-bind-options [<option>]...
857 This setting is only available when support for OpenSSL was built in. It sets
858 default ssl-options to force on all "bind" lines. Please check the "bind"
859 keyword to see available options.
860
861 Example:
862 global
863 ssl-default-bind-options no-sslv3 no-tls-tickets
864
Willy Tarreau610f04b2014-02-13 11:36:41 +0100865ssl-default-server-ciphers <ciphers>
866 This setting is only available when support for OpenSSL was built in. It
867 sets the default string describing the list of cipher algorithms that are
Jarno Huuskonen0e82b922014-04-12 18:22:19 +0300868 negotiated during the SSL/TLS handshake with the server, for all "server"
Willy Tarreau610f04b2014-02-13 11:36:41 +0100869 lines which do not explicitly define theirs. The format of the string is
870 defined in "man 1 ciphers". Please check the "server" keyword for more
871 information.
872
Emeric Brun2c86cbf2014-10-30 15:56:50 +0100873ssl-default-server-options [<option>]...
874 This setting is only available when support for OpenSSL was built in. It sets
875 default ssl-options to force on all "server" lines. Please check the "server"
876 keyword to see available options.
877
Remi Gacogne47783ef2015-05-29 15:53:22 +0200878ssl-dh-param-file <file>
879 This setting is only available when support for OpenSSL was built in. It sets
880 the default DH parameters that are used during the SSL/TLS handshake when
881 ephemeral Diffie-Hellman (DHE) key exchange is used, for all "bind" lines
882 which do not explicitely define theirs. It will be overridden by custom DH
883 parameters found in a bind certificate file if any. If custom DH parameters
Cyril Bonté307ee1e2015-09-28 23:16:06 +0200884 are not specified either by using ssl-dh-param-file or by setting them
885 directly in the certificate file, pre-generated DH parameters of the size
886 specified by tune.ssl.default-dh-param will be used. Custom parameters are
887 known to be more secure and therefore their use is recommended.
Remi Gacogne47783ef2015-05-29 15:53:22 +0200888 Custom DH parameters may be generated by using the OpenSSL command
889 "openssl dhparam <size>", where size should be at least 2048, as 1024-bit DH
890 parameters should not be considered secure anymore.
891
Emeric Brun850efd52014-01-29 12:24:34 +0100892ssl-server-verify [none|required]
893 The default behavior for SSL verify on servers side. If specified to 'none',
894 servers certificates are not verified. The default is 'required' except if
895 forced using cmdline option '-dV'.
896
Willy Tarreauabb175f2012-09-24 12:43:26 +0200897stats socket [<address:port>|<path>] [param*]
898 Binds a UNIX socket to <path> or a TCPv4/v6 address to <address:port>.
899 Connections to this socket will return various statistics outputs and even
900 allow some commands to be issued to change some runtime settings. Please
Kevin Decherf949c7202015-10-13 23:26:44 +0200901 consult section 9.2 "Unix Socket commands" of Management Guide for more
902 details.
Willy Tarreau6162db22009-10-10 17:13:00 +0200903
Willy Tarreauabb175f2012-09-24 12:43:26 +0200904 All parameters supported by "bind" lines are supported, for instance to
905 restrict access to some users or their access rights. Please consult
906 section 5.1 for more information.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200907
908stats timeout <timeout, in milliseconds>
909 The default timeout on the stats socket is set to 10 seconds. It is possible
910 to change this value with "stats timeout". The value must be passed in
Willy Tarreaubefdff12007-12-02 22:27:38 +0100911 milliseconds, or be suffixed by a time unit among { us, ms, s, m, h, d }.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200912
913stats maxconn <connections>
914 By default, the stats socket is limited to 10 concurrent connections. It is
915 possible to change this value with "stats maxconn".
916
Willy Tarreau6a06a402007-07-15 20:15:28 +0200917uid <number>
918 Changes the process' user ID to <number>. It is recommended that the user ID
919 is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
920 be started with superuser privileges in order to be able to switch to another
921 one. See also "gid" and "user".
922
923ulimit-n <number>
924 Sets the maximum number of per-process file-descriptors to <number>. By
925 default, it is automatically computed, so it is recommended not to use this
926 option.
927
Willy Tarreauceb24bc2010-11-09 12:46:41 +0100928unix-bind [ prefix <prefix> ] [ mode <mode> ] [ user <user> ] [ uid <uid> ]
929 [ group <group> ] [ gid <gid> ]
930
931 Fixes common settings to UNIX listening sockets declared in "bind" statements.
932 This is mainly used to simplify declaration of those UNIX sockets and reduce
933 the risk of errors, since those settings are most commonly required but are
934 also process-specific. The <prefix> setting can be used to force all socket
935 path to be relative to that directory. This might be needed to access another
936 component's chroot. Note that those paths are resolved before haproxy chroots
937 itself, so they are absolute. The <mode>, <user>, <uid>, <group> and <gid>
938 all have the same meaning as their homonyms used by the "bind" statement. If
939 both are specified, the "bind" statement has priority, meaning that the
940 "unix-bind" settings may be seen as process-wide default settings.
941
Willy Tarreau1d549722016-02-16 12:41:57 +0100942unsetenv [<name> ...]
943 Removes environment variables specified in arguments. This can be useful to
944 hide some sensitive information that are occasionally inherited from the
945 user's environment during some operations. Variables which did not exist are
946 silently ignored so that after the operation, it is certain that none of
947 these variables remain. The changes immediately take effect so that the next
948 line in the configuration file will not see these variables. See also
949 "setenv", "presetenv", and "resetenv".
950
Willy Tarreau6a06a402007-07-15 20:15:28 +0200951user <user name>
952 Similar to "uid" but uses the UID of user name <user name> from /etc/passwd.
953 See also "uid" and "group".
954
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +0200955node <name>
956 Only letters, digits, hyphen and underscore are allowed, like in DNS names.
957
958 This statement is useful in HA configurations where two or more processes or
959 servers share the same IP address. By setting a different node-name on all
960 nodes, it becomes easy to immediately spot what server is handling the
961 traffic.
962
963description <text>
964 Add a text that describes the instance.
965
966 Please note that it is required to escape certain characters (# for example)
967 and this text is inserted into a html page so you should avoid using
968 "<" and ">" characters.
969
Thomas Holmesdb04f192015-05-18 13:21:39 +010097051degrees-data-file <file path>
971 The path of the 51Degrees data file to provide device detection services. The
972 file should be unzipped and accessible by HAProxy with relevavnt permissions.
973
Dragan Dosenae6d39a2015-06-29 16:43:27 +0200974 Please note that this option is only available when haproxy has been
Thomas Holmesdb04f192015-05-18 13:21:39 +0100975 compiled with USE_51DEGREES.
976
97751degrees-property-name-list [<string>]
978 A list of 51Degrees property names to be load from the dataset. A full list
979 of names is available on the 51Degrees website:
980 https://51degrees.com/resources/property-dictionary
981
Dragan Dosenae6d39a2015-06-29 16:43:27 +0200982 Please note that this option is only available when haproxy has been
Thomas Holmesdb04f192015-05-18 13:21:39 +0100983 compiled with USE_51DEGREES.
984
Dragan Dosen93b38d92015-06-29 16:43:25 +020098551degrees-property-separator <char>
Thomas Holmesdb04f192015-05-18 13:21:39 +0100986 A char that will be appended to every property value in a response header
987 containing 51Degrees results. If not set that will be set as ','.
988
Dragan Dosenae6d39a2015-06-29 16:43:27 +0200989 Please note that this option is only available when haproxy has been
990 compiled with USE_51DEGREES.
991
99251degrees-cache-size <number>
993 Sets the size of the 51Degrees converter cache to <number> entries. This
994 is an LRU cache which reminds previous device detections and their results.
995 By default, this cache is disabled.
996
997 Please note that this option is only available when haproxy has been
Thomas Holmesdb04f192015-05-18 13:21:39 +0100998 compiled with USE_51DEGREES.
999
scientiamobiled0027ed2016-11-04 10:55:08 +01001000wurfl-data-file <file path>
1001 The path of the WURFL data file to provide device detection services. The
1002 file should be accessible by HAProxy with relevant permissions.
1003
1004 Please note that this option is only available when haproxy has been compiled
1005 with USE_WURFL=1.
1006
1007wurfl-information-list [<capability>]*
1008 A space-delimited list of WURFL capabilities, virtual capabilities, property
1009 names we plan to use in injected headers. A full list of capability and
1010 virtual capability names is available on the Scientiamobile website :
1011
1012 https://www.scientiamobile.com/wurflCapability
1013
1014 Valid WURFL properties are:
1015 - wurfl_id Contains the device ID of the matched device.
1016
1017 - wurfl_root_id Contains the device root ID of the matched
1018 device.
1019
1020 - wurfl_isdevroot Tells if the matched device is a root device.
1021 Possible values are "TRUE" or "FALSE".
1022
1023 - wurfl_useragent The original useragent coming with this
1024 particular web request.
1025
1026 - wurfl_api_version Contains a string representing the currently
1027 used Libwurfl API version.
1028
1029 - wurfl_engine_target Contains a string representing the currently
1030 set WURFL Engine Target. Possible values are
1031 "HIGH_ACCURACY", "HIGH_PERFORMANCE", "INVALID".
1032
1033 - wurfl_info A string containing information on the parsed
1034 wurfl.xml and its full path.
1035
1036 - wurfl_last_load_time Contains the UNIX timestamp of the last time
1037 WURFL has been loaded successfully.
1038
1039 - wurfl_normalized_useragent The normalized useragent.
1040
1041 - wurfl_useragent_priority The user agent priority used by WURFL.
1042
1043 Please note that this option is only available when haproxy has been compiled
1044 with USE_WURFL=1.
1045
1046wurfl-information-list-separator <char>
1047 A char that will be used to separate values in a response header containing
1048 WURFL results. If not set that a comma (',') will be used by default.
1049
1050 Please note that this option is only available when haproxy has been compiled
1051 with USE_WURFL=1.
1052
1053wurfl-patch-file [<file path>]
1054 A list of WURFL patch file paths. Note that patches are loaded during startup
1055 thus before the chroot.
1056
1057 Please note that this option is only available when haproxy has been compiled
1058 with USE_WURFL=1.
1059
1060wurfl-engine-mode { accuracy | performance }
1061 Sets the WURFL engine target. You can choose between 'accuracy' or
1062 'performance' targets. In performance mode, desktop web browser detection is
1063 done programmatically without referencing the WURFL data. As a result, most
1064 desktop web browsers are returned as generic_web_browser WURFL ID for
1065 performance. If either performance or accuracy are not defined, performance
1066 mode is enabled by default.
1067
1068 Please note that this option is only available when haproxy has been compiled
1069 with USE_WURFL=1.
1070
1071wurfl-cache-size <U>[,<D>]
1072 Sets the WURFL caching strategy. Here <U> is the Useragent cache size, and
1073 <D> is the internal device cache size. There are three possibilities here :
1074 - "0" : no cache is used.
1075 - <U> : the Single LRU cache is used, the size is expressed in elements.
1076 - <U>,<D> : the Double LRU cache is used, both sizes are in elements. This is
1077 the highest performing option.
1078
1079 Please note that this option is only available when haproxy has been compiled
1080 with USE_WURFL=1.
1081
1082wurfl-useragent-priority { plain | sideloaded_browser }
1083 Tells WURFL if it should prioritize use of the plain user agent ('plain')
1084 over the default sideloaded browser user agent ('sideloaded_browser').
1085
1086 Please note that this option is only available when haproxy has been compiled
1087 with USE_WURFL=1.
1088
Willy Tarreau6a06a402007-07-15 20:15:28 +02001089
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010903.2. Performance tuning
Willy Tarreau6a06a402007-07-15 20:15:28 +02001091-----------------------
1092
Willy Tarreau1746eec2014-04-25 10:46:47 +02001093max-spread-checks <delay in milliseconds>
1094 By default, haproxy tries to spread the start of health checks across the
1095 smallest health check interval of all the servers in a farm. The principle is
1096 to avoid hammering services running on the same server. But when using large
1097 check intervals (10 seconds or more), the last servers in the farm take some
1098 time before starting to be tested, which can be a problem. This parameter is
1099 used to enforce an upper bound on delay between the first and the last check,
1100 even if the servers' check intervals are larger. When servers run with
1101 shorter intervals, their intervals will be respected though.
1102
Willy Tarreau6a06a402007-07-15 20:15:28 +02001103maxconn <number>
1104 Sets the maximum per-process number of concurrent connections to <number>. It
1105 is equivalent to the command-line argument "-n". Proxies will stop accepting
1106 connections when this limit is reached. The "ulimit-n" parameter is
Willy Tarreau8274e102014-06-19 15:31:25 +02001107 automatically adjusted according to this value. See also "ulimit-n". Note:
1108 the "select" poller cannot reliably use more than 1024 file descriptors on
1109 some platforms. If your platform only supports select and reports "select
1110 FAILED" on startup, you need to reduce maxconn until it works (slightly
Willy Tarreaud0256482015-01-15 21:45:22 +01001111 below 500 in general). If this value is not set, it will default to the value
1112 set in DEFAULT_MAXCONN at build time (reported in haproxy -vv) if no memory
1113 limit is enforced, or will be computed based on the memory limit, the buffer
1114 size, memory allocated to compression, SSL cache size, and use or not of SSL
1115 and the associated maxsslconn (which can also be automatic).
Willy Tarreau6a06a402007-07-15 20:15:28 +02001116
Willy Tarreau81c25d02011-09-07 15:17:21 +02001117maxconnrate <number>
1118 Sets the maximum per-process number of connections per second to <number>.
1119 Proxies will stop accepting connections when this limit is reached. It can be
1120 used to limit the global capacity regardless of each frontend capacity. It is
1121 important to note that this can only be used as a service protection measure,
1122 as there will not necessarily be a fair share between frontends when the
1123 limit is reached, so it's a good idea to also limit each frontend to some
1124 value close to its expected share. Also, lowering tune.maxaccept can improve
1125 fairness.
1126
William Lallemandd85f9172012-11-09 17:05:39 +01001127maxcomprate <number>
1128 Sets the maximum per-process input compression rate to <number> kilobytes
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001129 per second. For each session, if the maximum is reached, the compression
William Lallemandd85f9172012-11-09 17:05:39 +01001130 level will be decreased during the session. If the maximum is reached at the
1131 beginning of a session, the session will not compress at all. If the maximum
1132 is not reached, the compression level will be increased up to
1133 tune.comp.maxlevel. A value of zero means there is no limit, this is the
1134 default value.
1135
William Lallemand072a2bf2012-11-20 17:01:01 +01001136maxcompcpuusage <number>
1137 Sets the maximum CPU usage HAProxy can reach before stopping the compression
1138 for new requests or decreasing the compression level of current requests.
1139 It works like 'maxcomprate' but measures CPU usage instead of incoming data
1140 bandwidth. The value is expressed in percent of the CPU used by haproxy. In
1141 case of multiple processes (nbproc > 1), each process manages its individual
1142 usage. A value of 100 disable the limit. The default value is 100. Setting
1143 a lower value will prevent the compression work from slowing the whole
1144 process down and from introducing high latencies.
1145
Willy Tarreauff4f82d2009-02-06 11:28:13 +01001146maxpipes <number>
1147 Sets the maximum per-process number of pipes to <number>. Currently, pipes
1148 are only used by kernel-based tcp splicing. Since a pipe contains two file
1149 descriptors, the "ulimit-n" value will be increased accordingly. The default
1150 value is maxconn/4, which seems to be more than enough for most heavy usages.
1151 The splice code dynamically allocates and releases pipes, and can fall back
1152 to standard copy, so setting this value too low may only impact performance.
1153
Willy Tarreau93e7c002013-10-07 18:51:07 +02001154maxsessrate <number>
1155 Sets the maximum per-process number of sessions per second to <number>.
1156 Proxies will stop accepting connections when this limit is reached. It can be
1157 used to limit the global capacity regardless of each frontend capacity. It is
1158 important to note that this can only be used as a service protection measure,
1159 as there will not necessarily be a fair share between frontends when the
1160 limit is reached, so it's a good idea to also limit each frontend to some
1161 value close to its expected share. Also, lowering tune.maxaccept can improve
1162 fairness.
1163
Willy Tarreau403edff2012-09-06 11:58:37 +02001164maxsslconn <number>
1165 Sets the maximum per-process number of concurrent SSL connections to
1166 <number>. By default there is no SSL-specific limit, which means that the
1167 global maxconn setting will apply to all connections. Setting this limit
1168 avoids having openssl use too much memory and crash when malloc returns NULL
1169 (since it unfortunately does not reliably check for such conditions). Note
1170 that the limit applies both to incoming and outgoing connections, so one
1171 connection which is deciphered then ciphered accounts for 2 SSL connections.
Willy Tarreaud0256482015-01-15 21:45:22 +01001172 If this value is not set, but a memory limit is enforced, this value will be
1173 automatically computed based on the memory limit, maxconn, the buffer size,
1174 memory allocated to compression, SSL cache size, and use of SSL in either
1175 frontends, backends or both. If neither maxconn nor maxsslconn are specified
1176 when there is a memory limit, haproxy will automatically adjust these values
1177 so that 100% of the connections can be made over SSL with no risk, and will
1178 consider the sides where it is enabled (frontend, backend, both).
Willy Tarreau403edff2012-09-06 11:58:37 +02001179
Willy Tarreaue43d5322013-10-07 20:01:52 +02001180maxsslrate <number>
1181 Sets the maximum per-process number of SSL sessions per second to <number>.
1182 SSL listeners will stop accepting connections when this limit is reached. It
1183 can be used to limit the global SSL CPU usage regardless of each frontend
1184 capacity. It is important to note that this can only be used as a service
1185 protection measure, as there will not necessarily be a fair share between
1186 frontends when the limit is reached, so it's a good idea to also limit each
1187 frontend to some value close to its expected share. It is also important to
1188 note that the sessions are accounted before they enter the SSL stack and not
1189 after, which also protects the stack against bad handshakes. Also, lowering
1190 tune.maxaccept can improve fairness.
1191
William Lallemand9d5f5482012-11-07 16:12:57 +01001192maxzlibmem <number>
1193 Sets the maximum amount of RAM in megabytes per process usable by the zlib.
1194 When the maximum amount is reached, future sessions will not compress as long
1195 as RAM is unavailable. When sets to 0, there is no limit.
William Lallemande3a7d992012-11-20 11:25:20 +01001196 The default value is 0. The value is available in bytes on the UNIX socket
1197 with "show info" on the line "MaxZlibMemUsage", the memory used by zlib is
1198 "ZlibMemUsage" in bytes.
1199
Willy Tarreau6a06a402007-07-15 20:15:28 +02001200noepoll
1201 Disables the use of the "epoll" event polling system on Linux. It is
1202 equivalent to the command-line argument "-de". The next polling system
Willy Tarreaue9f49e72012-11-11 17:42:00 +01001203 used will generally be "poll". See also "nopoll".
Willy Tarreau6a06a402007-07-15 20:15:28 +02001204
1205nokqueue
1206 Disables the use of the "kqueue" event polling system on BSD. It is
1207 equivalent to the command-line argument "-dk". The next polling system
1208 used will generally be "poll". See also "nopoll".
1209
1210nopoll
1211 Disables the use of the "poll" event polling system. It is equivalent to the
1212 command-line argument "-dp". The next polling system used will be "select".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001213 It should never be needed to disable "poll" since it's available on all
Willy Tarreaue9f49e72012-11-11 17:42:00 +01001214 platforms supported by HAProxy. See also "nokqueue" and "noepoll".
Willy Tarreau6a06a402007-07-15 20:15:28 +02001215
Willy Tarreauff4f82d2009-02-06 11:28:13 +01001216nosplice
1217 Disables the use of kernel tcp splicing between sockets on Linux. It is
1218 equivalent to the command line argument "-dS". Data will then be copied
1219 using conventional and more portable recv/send calls. Kernel tcp splicing is
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001220 limited to some very recent instances of kernel 2.6. Most versions between
Willy Tarreauff4f82d2009-02-06 11:28:13 +01001221 2.6.25 and 2.6.28 are buggy and will forward corrupted data, so they must not
1222 be used. This option makes it easier to globally disable kernel splicing in
1223 case of doubt. See also "option splice-auto", "option splice-request" and
1224 "option splice-response".
1225
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001226nogetaddrinfo
1227 Disables the use of getaddrinfo(3) for name resolving. It is equivalent to
1228 the command line argument "-dG". Deprecated gethostbyname(3) will be used.
1229
Lukas Tribusa0bcbdc2016-09-12 21:42:20 +00001230noreuseport
1231 Disables the use of SO_REUSEPORT - see socket(7). It is equivalent to the
1232 command line argument "-dR".
1233
Willy Tarreaufe255b72007-10-14 23:09:26 +02001234spread-checks <0..50, in percent>
Simon Hormand60d6912013-11-25 10:46:36 +09001235 Sometimes it is desirable to avoid sending agent and health checks to
1236 servers at exact intervals, for instance when many logical servers are
1237 located on the same physical server. With the help of this parameter, it
1238 becomes possible to add some randomness in the check interval between 0
1239 and +/- 50%. A value between 2 and 5 seems to show good results. The
1240 default value remains at 0.
Willy Tarreaufe255b72007-10-14 23:09:26 +02001241
Willy Tarreau33cb0652014-12-23 22:52:37 +01001242tune.buffers.limit <number>
1243 Sets a hard limit on the number of buffers which may be allocated per process.
1244 The default value is zero which means unlimited. The minimum non-zero value
1245 will always be greater than "tune.buffers.reserve" and should ideally always
1246 be about twice as large. Forcing this value can be particularly useful to
1247 limit the amount of memory a process may take, while retaining a sane
1248 behaviour. When this limit is reached, sessions which need a buffer wait for
1249 another one to be released by another session. Since buffers are dynamically
1250 allocated and released, the waiting time is very short and not perceptible
1251 provided that limits remain reasonable. In fact sometimes reducing the limit
1252 may even increase performance by increasing the CPU cache's efficiency. Tests
1253 have shown good results on average HTTP traffic with a limit to 1/10 of the
1254 expected global maxconn setting, which also significantly reduces memory
1255 usage. The memory savings come from the fact that a number of connections
1256 will not allocate 2*tune.bufsize. It is best not to touch this value unless
1257 advised to do so by an haproxy core developer.
1258
Willy Tarreau1058ae72014-12-23 22:40:40 +01001259tune.buffers.reserve <number>
1260 Sets the number of buffers which are pre-allocated and reserved for use only
1261 during memory shortage conditions resulting in failed memory allocations. The
1262 minimum value is 2 and is also the default. There is no reason a user would
1263 want to change this value, it's mostly aimed at haproxy core developers.
1264
Willy Tarreau27a674e2009-08-17 07:23:33 +02001265tune.bufsize <number>
1266 Sets the buffer size to this size (in bytes). Lower values allow more
1267 sessions to coexist in the same amount of RAM, and higher values allow some
1268 applications with very large cookies to work. The default value is 16384 and
1269 can be changed at build time. It is strongly recommended not to change this
1270 from the default value, as very low values will break some services such as
1271 statistics, and values larger than default size will increase memory usage,
1272 possibly causing the system to run out of memory. At least the global maxconn
1273 parameter should be decreased by the same factor as this one is increased.
Dmitry Sivachenkof6f4f7b2012-10-21 18:10:25 +04001274 If HTTP request is larger than (tune.bufsize - tune.maxrewrite), haproxy will
1275 return HTTP 400 (Bad Request) error. Similarly if an HTTP response is larger
1276 than this size, haproxy will return HTTP 502 (Bad Gateway).
Willy Tarreau27a674e2009-08-17 07:23:33 +02001277
Willy Tarreau43961d52010-10-04 20:39:20 +02001278tune.chksize <number>
1279 Sets the check buffer size to this size (in bytes). Higher values may help
1280 find string or regex patterns in very large pages, though doing so may imply
1281 more memory and CPU usage. The default value is 16384 and can be changed at
1282 build time. It is not recommended to change this value, but to use better
1283 checks whenever possible.
1284
William Lallemandf3747832012-11-09 12:33:10 +01001285tune.comp.maxlevel <number>
1286 Sets the maximum compression level. The compression level affects CPU
1287 usage during compression. This value affects CPU usage during compression.
1288 Each session using compression initializes the compression algorithm with
1289 this value. The default value is 1.
1290
Willy Tarreau193b8c62012-11-22 00:17:38 +01001291tune.http.cookielen <number>
1292 Sets the maximum length of captured cookies. This is the maximum value that
1293 the "capture cookie xxx len yyy" will be allowed to take, and any upper value
1294 will automatically be truncated to this one. It is important not to set too
1295 high a value because all cookie captures still allocate this size whatever
1296 their configured value (they share a same pool). This value is per request
1297 per response, so the memory allocated is twice this value per connection.
1298 When not specified, the limit is set to 63 characters. It is recommended not
1299 to change this value.
1300
Willy Tarreauac1932d2011-10-24 19:14:41 +02001301tune.http.maxhdr <number>
1302 Sets the maximum number of headers in a request. When a request comes with a
1303 number of headers greater than this value (including the first line), it is
1304 rejected with a "400 Bad Request" status code. Similarly, too large responses
1305 are blocked with "502 Bad Gateway". The default value is 101, which is enough
1306 for all usages, considering that the widely deployed Apache server uses the
1307 same limit. It can be useful to push this limit further to temporarily allow
1308 a buggy application to work by the time it gets fixed. Keep in mind that each
1309 new header consumes 32bits of memory for each session, so don't push this
1310 limit too high.
1311
Willy Tarreau7e312732014-02-12 16:35:14 +01001312tune.idletimer <timeout>
1313 Sets the duration after which haproxy will consider that an empty buffer is
1314 probably associated with an idle stream. This is used to optimally adjust
1315 some packet sizes while forwarding large and small data alternatively. The
1316 decision to use splice() or to send large buffers in SSL is modulated by this
1317 parameter. The value is in milliseconds between 0 and 65535. A value of zero
1318 means that haproxy will not try to detect idle streams. The default is 1000,
1319 which seems to correctly detect end user pauses (eg: read a page before
1320 clicking). There should be not reason for changing this value. Please check
1321 tune.ssl.maxrecord below.
1322
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001323tune.lua.forced-yield <number>
1324 This directive forces the Lua engine to execute a yield each <number> of
1325 instructions executed. This permits interruptng a long script and allows the
1326 HAProxy scheduler to process other tasks like accepting connections or
1327 forwarding traffic. The default value is 10000 instructions. If HAProxy often
1328 executes some Lua code but more reactivity is required, this value can be
1329 lowered. If the Lua code is quite long and its result is absolutely required
1330 to process the data, the <number> can be increased.
1331
Willy Tarreau32f61e22015-03-18 17:54:59 +01001332tune.lua.maxmem
1333 Sets the maximum amount of RAM in megabytes per process usable by Lua. By
1334 default it is zero which means unlimited. It is important to set a limit to
1335 ensure that a bug in a script will not result in the system running out of
1336 memory.
1337
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001338tune.lua.session-timeout <timeout>
1339 This is the execution timeout for the Lua sessions. This is useful for
Thierry FOURNIER7dd784b2015-10-01 14:49:33 +02001340 preventing infinite loops or spending too much time in Lua. This timeout
1341 counts only the pure Lua runtime. If the Lua does a sleep, the sleep is
1342 not taked in account. The default timeout is 4s.
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001343
1344tune.lua.task-timeout <timeout>
1345 Purpose is the same as "tune.lua.session-timeout", but this timeout is
1346 dedicated to the tasks. By default, this timeout isn't set because a task may
1347 remain alive during of the lifetime of HAProxy. For example, a task used to
1348 check servers.
1349
Thierry FOURNIER7dd784b2015-10-01 14:49:33 +02001350tune.lua.service-timeout <timeout>
1351 This is the execution timeout for the Lua services. This is useful for
1352 preventing infinite loops or spending too much time in Lua. This timeout
1353 counts only the pure Lua runtime. If the Lua does a sleep, the sleep is
1354 not taked in account. The default timeout is 4s.
1355
Willy Tarreaua0250ba2008-01-06 11:22:57 +01001356tune.maxaccept <number>
Willy Tarreau16a21472012-11-19 12:39:59 +01001357 Sets the maximum number of consecutive connections a process may accept in a
1358 row before switching to other work. In single process mode, higher numbers
1359 give better performance at high connection rates. However in multi-process
1360 modes, keeping a bit of fairness between processes generally is better to
1361 increase performance. This value applies individually to each listener, so
1362 that the number of processes a listener is bound to is taken into account.
1363 This value defaults to 64. In multi-process mode, it is divided by twice
1364 the number of processes the listener is bound to. Setting this value to -1
1365 completely disables the limitation. It should normally not be needed to tweak
1366 this value.
Willy Tarreaua0250ba2008-01-06 11:22:57 +01001367
1368tune.maxpollevents <number>
1369 Sets the maximum amount of events that can be processed at once in a call to
1370 the polling system. The default value is adapted to the operating system. It
1371 has been noticed that reducing it below 200 tends to slightly decrease
1372 latency at the expense of network bandwidth, and increasing it above 200
1373 tends to trade latency for slightly increased bandwidth.
1374
Willy Tarreau27a674e2009-08-17 07:23:33 +02001375tune.maxrewrite <number>
1376 Sets the reserved buffer space to this size in bytes. The reserved space is
1377 used for header rewriting or appending. The first reads on sockets will never
1378 fill more than bufsize-maxrewrite. Historically it has defaulted to half of
1379 bufsize, though that does not make much sense since there are rarely large
1380 numbers of headers to add. Setting it too high prevents processing of large
1381 requests or responses. Setting it too low prevents addition of new headers
1382 to already large requests or to POST requests. It is generally wise to set it
1383 to about 1024. It is automatically readjusted to half of bufsize if it is
1384 larger than that. This means you don't have to worry about it when changing
1385 bufsize.
1386
Willy Tarreauf3045d22015-04-29 16:24:50 +02001387tune.pattern.cache-size <number>
1388 Sets the size of the pattern lookup cache to <number> entries. This is an LRU
1389 cache which reminds previous lookups and their results. It is used by ACLs
1390 and maps on slow pattern lookups, namely the ones using the "sub", "reg",
1391 "dir", "dom", "end", "bin" match methods as well as the case-insensitive
1392 strings. It applies to pattern expressions which means that it will be able
1393 to memorize the result of a lookup among all the patterns specified on a
1394 configuration line (including all those loaded from files). It automatically
1395 invalidates entries which are updated using HTTP actions or on the CLI. The
1396 default cache size is set to 10000 entries, which limits its footprint to
1397 about 5 MB on 32-bit systems and 8 MB on 64-bit systems. There is a very low
1398 risk of collision in this cache, which is in the order of the size of the
1399 cache divided by 2^64. Typically, at 10000 requests per second with the
1400 default cache size of 10000 entries, there's 1% chance that a brute force
1401 attack could cause a single collision after 60 years, or 0.1% after 6 years.
1402 This is considered much lower than the risk of a memory corruption caused by
1403 aging components. If this is not acceptable, the cache can be disabled by
1404 setting this parameter to 0.
1405
Willy Tarreaubd9a0a72011-10-23 21:14:29 +02001406tune.pipesize <number>
1407 Sets the kernel pipe buffer size to this size (in bytes). By default, pipes
1408 are the default size for the system. But sometimes when using TCP splicing,
1409 it can improve performance to increase pipe sizes, especially if it is
1410 suspected that pipes are not filled and that many calls to splice() are
1411 performed. This has an impact on the kernel's memory footprint, so this must
1412 not be changed if impacts are not understood.
1413
Willy Tarreaue803de22010-01-21 17:43:04 +01001414tune.rcvbuf.client <number>
1415tune.rcvbuf.server <number>
1416 Forces the kernel socket receive buffer size on the client or the server side
1417 to the specified value in bytes. This value applies to all TCP/HTTP frontends
1418 and backends. It should normally never be set, and the default size (0) lets
1419 the kernel autotune this value depending on the amount of available memory.
1420 However it can sometimes help to set it to very low values (eg: 4096) in
1421 order to save kernel memory by preventing it from buffering too large amounts
1422 of received data. Lower values will significantly increase CPU usage though.
1423
Willy Tarreaub22fc302015-12-14 12:04:35 +01001424tune.recv_enough <number>
1425 Haproxy uses some hints to detect that a short read indicates the end of the
1426 socket buffers. One of them is that a read returns more than <recv_enough>
1427 bytes, which defaults to 10136 (7 segments of 1448 each). This default value
1428 may be changed by this setting to better deal with workloads involving lots
1429 of short messages such as telnet or SSH sessions.
1430
Willy Tarreaue803de22010-01-21 17:43:04 +01001431tune.sndbuf.client <number>
1432tune.sndbuf.server <number>
1433 Forces the kernel socket send buffer size on the client or the server side to
1434 the specified value in bytes. This value applies to all TCP/HTTP frontends
1435 and backends. It should normally never be set, and the default size (0) lets
1436 the kernel autotune this value depending on the amount of available memory.
1437 However it can sometimes help to set it to very low values (eg: 4096) in
1438 order to save kernel memory by preventing it from buffering too large amounts
1439 of received data. Lower values will significantly increase CPU usage though.
1440 Another use case is to prevent write timeouts with extremely slow clients due
1441 to the kernel waiting for a large part of the buffer to be read before
1442 notifying haproxy again.
1443
Willy Tarreau6ec58db2012-11-16 16:32:15 +01001444tune.ssl.cachesize <number>
Emeric Brunaf9619d2012-11-28 18:47:52 +01001445 Sets the size of the global SSL session cache, in a number of blocks. A block
1446 is large enough to contain an encoded session without peer certificate.
1447 An encoded session with peer certificate is stored in multiple blocks
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001448 depending on the size of the peer certificate. A block uses approximately
Emeric Brunaf9619d2012-11-28 18:47:52 +01001449 200 bytes of memory. The default value may be forced at build time, otherwise
1450 defaults to 20000. When the cache is full, the most idle entries are purged
1451 and reassigned. Higher values reduce the occurrence of such a purge, hence
1452 the number of CPU-intensive SSL handshakes by ensuring that all users keep
1453 their session as long as possible. All entries are pre-allocated upon startup
Emeric Brun22890a12012-12-28 14:41:32 +01001454 and are shared between all processes if "nbproc" is greater than 1. Setting
1455 this value to 0 disables the SSL session cache.
Willy Tarreau6ec58db2012-11-16 16:32:15 +01001456
Emeric Brun8dc60392014-05-09 13:52:00 +02001457tune.ssl.force-private-cache
1458 This boolean disables SSL session cache sharing between all processes. It
1459 should normally not be used since it will force many renegotiations due to
1460 clients hitting a random process. But it may be required on some operating
1461 systems where none of the SSL cache synchronization method may be used. In
1462 this case, adding a first layer of hash-based load balancing before the SSL
1463 layer might limit the impact of the lack of session sharing.
1464
Emeric Brun4f65bff2012-11-16 15:11:00 +01001465tune.ssl.lifetime <timeout>
1466 Sets how long a cached SSL session may remain valid. This time is expressed
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001467 in seconds and defaults to 300 (5 min). It is important to understand that it
Emeric Brun4f65bff2012-11-16 15:11:00 +01001468 does not guarantee that sessions will last that long, because if the cache is
1469 full, the longest idle sessions will be purged despite their configured
1470 lifetime. The real usefulness of this setting is to prevent sessions from
1471 being used for too long.
1472
Willy Tarreaubfd59462013-02-21 07:46:09 +01001473tune.ssl.maxrecord <number>
1474 Sets the maximum amount of bytes passed to SSL_write() at a time. Default
1475 value 0 means there is no limit. Over SSL/TLS, the client can decipher the
1476 data only once it has received a full record. With large records, it means
1477 that clients might have to download up to 16kB of data before starting to
1478 process them. Limiting the value can improve page load times on browsers
1479 located over high latency or low bandwidth networks. It is suggested to find
1480 optimal values which fit into 1 or 2 TCP segments (generally 1448 bytes over
1481 Ethernet with TCP timestamps enabled, or 1460 when timestamps are disabled),
1482 keeping in mind that SSL/TLS add some overhead. Typical values of 1419 and
1483 2859 gave good results during tests. Use "strace -e trace=write" to find the
Willy Tarreau7e312732014-02-12 16:35:14 +01001484 best value. Haproxy will automatically switch to this setting after an idle
1485 stream has been detected (see tune.idletimer above).
Willy Tarreaubfd59462013-02-21 07:46:09 +01001486
Remi Gacognef46cd6e2014-06-12 14:58:40 +02001487tune.ssl.default-dh-param <number>
1488 Sets the maximum size of the Diffie-Hellman parameters used for generating
1489 the ephemeral/temporary Diffie-Hellman key in case of DHE key exchange. The
1490 final size will try to match the size of the server's RSA (or DSA) key (e.g,
1491 a 2048 bits temporary DH key for a 2048 bits RSA key), but will not exceed
1492 this maximum value. Default value if 1024. Only 1024 or higher values are
1493 allowed. Higher values will increase the CPU load, and values greater than
1494 1024 bits are not supported by Java 7 and earlier clients. This value is not
Remi Gacogne47783ef2015-05-29 15:53:22 +02001495 used if static Diffie-Hellman parameters are supplied either directly
1496 in the certificate file or by using the ssl-dh-param-file parameter.
Remi Gacognef46cd6e2014-06-12 14:58:40 +02001497
Christopher Faulet31af49d2015-06-09 17:29:50 +02001498tune.ssl.ssl-ctx-cache-size <number>
1499 Sets the size of the cache used to store generated certificates to <number>
1500 entries. This is a LRU cache. Because generating a SSL certificate
1501 dynamically is expensive, they are cached. The default cache size is set to
1502 1000 entries.
1503
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02001504tune.vars.global-max-size <size>
Christopher Fauletff2613e2016-11-09 11:36:17 +01001505tune.vars.proc-max-size <size>
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02001506tune.vars.reqres-max-size <size>
1507tune.vars.sess-max-size <size>
1508tune.vars.txn-max-size <size>
Christopher Fauletff2613e2016-11-09 11:36:17 +01001509 These five tunes help to manage the maximum amount of memory used by the
1510 variables system. "global" limits the overall amount of memory available for
1511 all scopes. "proc" limits the memory for the process scope, "sess" limits the
1512 memory for the session scope, "txn" for the transaction scope, and "reqres"
1513 limits the memory for each request or response processing.
1514 Memory accounting is hierarchical, meaning more coarse grained limits include
1515 the finer grained ones: "proc" includes "sess", "sess" includes "txn", and
1516 "txn" includes "reqres".
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02001517
Daniel Schneller0b547052016-03-21 20:46:57 +01001518 For example, when "tune.vars.sess-max-size" is limited to 100,
1519 "tune.vars.txn-max-size" and "tune.vars.reqres-max-size" cannot exceed
1520 100 either. If we create a variable "txn.var" that contains 100 bytes,
1521 all available space is consumed.
1522 Notice that exceeding the limits at runtime will not result in an error
1523 message, but values might be cut off or corrupted. So make sure to accurately
1524 plan for the amount of space needed to store all your variables.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02001525
William Lallemanda509e4c2012-11-07 16:54:34 +01001526tune.zlib.memlevel <number>
1527 Sets the memLevel parameter in zlib initialization for each session. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001528 defines how much memory should be allocated for the internal compression
William Lallemanda509e4c2012-11-07 16:54:34 +01001529 state. A value of 1 uses minimum memory but is slow and reduces compression
1530 ratio, a value of 9 uses maximum memory for optimal speed. Can be a value
1531 between 1 and 9. The default value is 8.
1532
1533tune.zlib.windowsize <number>
1534 Sets the window size (the size of the history buffer) as a parameter of the
1535 zlib initialization for each session. Larger values of this parameter result
1536 in better compression at the expense of memory usage. Can be a value between
1537 8 and 15. The default value is 15.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001538
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015393.3. Debugging
1540--------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02001541
1542debug
1543 Enables debug mode which dumps to stdout all exchanges, and disables forking
1544 into background. It is the equivalent of the command-line argument "-d". It
1545 should never be used in a production configuration since it may prevent full
1546 system startup.
1547
1548quiet
1549 Do not display any message during startup. It is equivalent to the command-
1550 line argument "-q".
1551
Emeric Brunf099e792010-09-27 12:05:28 +02001552
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010015533.4. Userlists
1554--------------
1555It is possible to control access to frontend/backend/listen sections or to
1556http stats by allowing only authenticated and authorized users. To do this,
1557it is required to create at least one userlist and to define users.
1558
1559userlist <listname>
Cyril Bonté78caf842010-03-10 22:41:43 +01001560 Creates new userlist with name <listname>. Many independent userlists can be
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001561 used to store authentication & authorization data for independent customers.
1562
1563group <groupname> [users <user>,<user>,(...)]
Cyril Bonté78caf842010-03-10 22:41:43 +01001564 Adds group <groupname> to the current userlist. It is also possible to
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001565 attach users to this group by using a comma separated list of names
1566 proceeded by "users" keyword.
1567
Cyril Bontéf0c60612010-02-06 14:44:47 +01001568user <username> [password|insecure-password <password>]
1569 [groups <group>,<group>,(...)]
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001570 Adds user <username> to the current userlist. Both secure (encrypted) and
1571 insecure (unencrypted) passwords can be used. Encrypted passwords are
Cyril Bonté78caf842010-03-10 22:41:43 +01001572 evaluated using the crypt(3) function so depending of the system's
1573 capabilities, different algorithms are supported. For example modern Glibc
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001574 based Linux system supports MD5, SHA-256, SHA-512 and of course classic,
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001575 DES-based method of encrypting passwords.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001576
1577
1578 Example:
Cyril Bontéf0c60612010-02-06 14:44:47 +01001579 userlist L1
1580 group G1 users tiger,scott
1581 group G2 users xdb,scott
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001582
Cyril Bontéf0c60612010-02-06 14:44:47 +01001583 user tiger password $6$k6y3o.eP$JlKBx9za9667qe4(...)xHSwRv6J.C0/D7cV91
1584 user scott insecure-password elgato
1585 user xdb insecure-password hello
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001586
Cyril Bontéf0c60612010-02-06 14:44:47 +01001587 userlist L2
1588 group G1
1589 group G2
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001590
Cyril Bontéf0c60612010-02-06 14:44:47 +01001591 user tiger password $6$k6y3o.eP$JlKBx(...)xHSwRv6J.C0/D7cV91 groups G1
1592 user scott insecure-password elgato groups G1,G2
1593 user xdb insecure-password hello groups G2
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001594
1595 Please note that both lists are functionally identical.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001596
Emeric Brunf099e792010-09-27 12:05:28 +02001597
15983.5. Peers
Cyril Bontédc4d9032012-04-08 21:57:39 +02001599----------
Emeric Brun94900952015-06-11 18:25:54 +02001600It is possible to propagate entries of any data-types in stick-tables between
1601several haproxy instances over TCP connections in a multi-master fashion. Each
1602instance pushes its local updates and insertions to remote peers. The pushed
1603values overwrite remote ones without aggregation. Interrupted exchanges are
1604automatically detected and recovered from the last known point.
1605In addition, during a soft restart, the old process connects to the new one
1606using such a TCP connection to push all its entries before the new process
1607tries to connect to other peers. That ensures very fast replication during a
1608reload, it typically takes a fraction of a second even for large tables.
1609Note that Server IDs are used to identify servers remotely, so it is important
1610that configurations look similar or at least that the same IDs are forced on
1611each server on all participants.
Emeric Brunf099e792010-09-27 12:05:28 +02001612
1613peers <peersect>
Jamie Gloudon801a0a32012-08-25 00:18:33 -04001614 Creates a new peer list with name <peersect>. It is an independent section,
Emeric Brunf099e792010-09-27 12:05:28 +02001615 which is referenced by one or more stick-tables.
1616
Willy Tarreau77e4bd12015-05-01 20:02:17 +02001617disabled
1618 Disables a peers section. It disables both listening and any synchronization
1619 related to this section. This is provided to disable synchronization of stick
1620 tables without having to comment out all "peers" references.
1621
1622enable
1623 This re-enables a disabled peers section which was previously disabled.
1624
Emeric Brunf099e792010-09-27 12:05:28 +02001625peer <peername> <ip>:<port>
1626 Defines a peer inside a peers section.
1627 If <peername> is set to the local peer name (by default hostname, or forced
1628 using "-L" command line option), haproxy will listen for incoming remote peer
1629 connection on <ip>:<port>. Otherwise, <ip>:<port> defines where to connect to
1630 to join the remote peer, and <peername> is used at the protocol level to
1631 identify and validate the remote peer on the server side.
1632
1633 During a soft restart, local peer <ip>:<port> is used by the old instance to
1634 connect the new one and initiate a complete replication (teaching process).
1635
1636 It is strongly recommended to have the exact same peers declaration on all
1637 peers and to only rely on the "-L" command line argument to change the local
1638 peer name. This makes it easier to maintain coherent configuration files
1639 across all peers.
1640
William Lallemandb2f07452015-05-12 14:27:13 +02001641 You may want to reference some environment variables in the address
1642 parameter, see section 2.3 about environment variables.
Willy Tarreaudad36a32013-03-11 01:20:04 +01001643
Cyril Bontédc4d9032012-04-08 21:57:39 +02001644 Example:
Emeric Brunf099e792010-09-27 12:05:28 +02001645 peers mypeers
Willy Tarreauf7b30a92010-12-06 22:59:17 +01001646 peer haproxy1 192.168.0.1:1024
1647 peer haproxy2 192.168.0.2:1024
1648 peer haproxy3 10.2.0.1:1024
Emeric Brunf099e792010-09-27 12:05:28 +02001649
1650 backend mybackend
1651 mode tcp
1652 balance roundrobin
1653 stick-table type ip size 20k peers mypeers
1654 stick on src
1655
Willy Tarreauf7b30a92010-12-06 22:59:17 +01001656 server srv1 192.168.0.30:80
1657 server srv2 192.168.0.31:80
Emeric Brunf099e792010-09-27 12:05:28 +02001658
1659
Simon Horman51a1cf62015-02-03 13:00:44 +090016603.6. Mailers
1661------------
1662It is possible to send email alerts when the state of servers changes.
1663If configured email alerts are sent to each mailer that is configured
1664in a mailers section. Email is sent to mailers using SMTP.
1665
Pieter Baauw386a1272015-08-16 15:26:24 +02001666mailers <mailersect>
Simon Horman51a1cf62015-02-03 13:00:44 +09001667 Creates a new mailer list with the name <mailersect>. It is an
1668 independent section which is referenced by one or more proxies.
1669
1670mailer <mailername> <ip>:<port>
1671 Defines a mailer inside a mailers section.
1672
1673 Example:
1674 mailers mymailers
1675 mailer smtp1 192.168.0.1:587
1676 mailer smtp2 192.168.0.2:587
1677
1678 backend mybackend
1679 mode tcp
1680 balance roundrobin
1681
1682 email-alert mailers mymailers
1683 email-alert from test1@horms.org
1684 email-alert to test2@horms.org
1685
1686 server srv1 192.168.0.30:80
1687 server srv2 192.168.0.31:80
1688
Pieter Baauw235fcfc2016-02-13 15:33:40 +01001689timeout mail <time>
1690 Defines the time available for a mail/connection to be made and send to
1691 the mail-server. If not defined the default value is 10 seconds. To allow
1692 for at least two SYN-ACK packets to be send during initial TCP handshake it
1693 is advised to keep this value above 4 seconds.
1694
1695 Example:
1696 mailers mymailers
1697 timeout mail 20s
1698 mailer smtp1 192.168.0.1:587
Simon Horman51a1cf62015-02-03 13:00:44 +09001699
Willy Tarreauc57f0e22009-05-10 13:12:33 +020017004. Proxies
Willy Tarreau6a06a402007-07-15 20:15:28 +02001701----------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001702
Willy Tarreau6a06a402007-07-15 20:15:28 +02001703Proxy configuration can be located in a set of sections :
William Lallemand6e62fb62015-04-28 16:55:23 +02001704 - defaults [<name>]
Willy Tarreau6a06a402007-07-15 20:15:28 +02001705 - frontend <name>
1706 - backend <name>
1707 - listen <name>
1708
1709A "defaults" section sets default parameters for all other sections following
1710its declaration. Those default parameters are reset by the next "defaults"
1711section. See below for the list of parameters which can be set in a "defaults"
Willy Tarreau0ba27502007-12-24 16:55:16 +01001712section. The name is optional but its use is encouraged for better readability.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001713
1714A "frontend" section describes a set of listening sockets accepting client
1715connections.
1716
1717A "backend" section describes a set of servers to which the proxy will connect
1718to forward incoming connections.
1719
1720A "listen" section defines a complete proxy with its frontend and backend
1721parts combined in one section. It is generally useful for TCP-only traffic.
1722
Willy Tarreau0ba27502007-12-24 16:55:16 +01001723All proxy names must be formed from upper and lower case letters, digits,
1724'-' (dash), '_' (underscore) , '.' (dot) and ':' (colon). ACL names are
1725case-sensitive, which means that "www" and "WWW" are two different proxies.
1726
1727Historically, all proxy names could overlap, it just caused troubles in the
1728logs. Since the introduction of content switching, it is mandatory that two
1729proxies with overlapping capabilities (frontend/backend) have different names.
1730However, it is still permitted that a frontend and a backend share the same
1731name, as this configuration seems to be commonly encountered.
1732
1733Right now, two major proxy modes are supported : "tcp", also known as layer 4,
1734and "http", also known as layer 7. In layer 4 mode, HAProxy simply forwards
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001735bidirectional traffic between two sides. In layer 7 mode, HAProxy analyzes the
Willy Tarreau0ba27502007-12-24 16:55:16 +01001736protocol, and can interact with it by allowing, blocking, switching, adding,
1737modifying, or removing arbitrary contents in requests or responses, based on
1738arbitrary criteria.
1739
Willy Tarreau70dffda2014-01-30 03:07:23 +01001740In HTTP mode, the processing applied to requests and responses flowing over
1741a connection depends in the combination of the frontend's HTTP options and
1742the backend's. HAProxy supports 5 connection modes :
1743
1744 - KAL : keep alive ("option http-keep-alive") which is the default mode : all
1745 requests and responses are processed, and connections remain open but idle
1746 between responses and new requests.
1747
1748 - TUN: tunnel ("option http-tunnel") : this was the default mode for versions
1749 1.0 to 1.5-dev21 : only the first request and response are processed, and
1750 everything else is forwarded with no analysis at all. This mode should not
1751 be used as it creates lots of trouble with logging and HTTP processing.
1752
1753 - PCL: passive close ("option httpclose") : exactly the same as tunnel mode,
1754 but with "Connection: close" appended in both directions to try to make
1755 both ends close after the first request/response exchange.
1756
1757 - SCL: server close ("option http-server-close") : the server-facing
1758 connection is closed after the end of the response is received, but the
1759 client-facing connection remains open.
1760
1761 - FCL: forced close ("option forceclose") : the connection is actively closed
1762 after the end of the response.
1763
1764The effective mode that will be applied to a connection passing through a
1765frontend and a backend can be determined by both proxy modes according to the
1766following matrix, but in short, the modes are symmetric, keep-alive is the
1767weakest option and force close is the strongest.
1768
1769 Backend mode
1770
1771 | KAL | TUN | PCL | SCL | FCL
1772 ----+-----+-----+-----+-----+----
1773 KAL | KAL | TUN | PCL | SCL | FCL
1774 ----+-----+-----+-----+-----+----
1775 TUN | TUN | TUN | PCL | SCL | FCL
1776 Frontend ----+-----+-----+-----+-----+----
1777 mode PCL | PCL | PCL | PCL | FCL | FCL
1778 ----+-----+-----+-----+-----+----
1779 SCL | SCL | SCL | FCL | SCL | FCL
1780 ----+-----+-----+-----+-----+----
1781 FCL | FCL | FCL | FCL | FCL | FCL
1782
Willy Tarreau0ba27502007-12-24 16:55:16 +01001783
Willy Tarreau70dffda2014-01-30 03:07:23 +01001784
Willy Tarreauc57f0e22009-05-10 13:12:33 +020017854.1. Proxy keywords matrix
1786--------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001787
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001788The following list of keywords is supported. Most of them may only be used in a
1789limited set of section types. Some of them are marked as "deprecated" because
1790they are inherited from an old syntax which may be confusing or functionally
1791limited, and there are new recommended keywords to replace them. Keywords
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001792marked with "(*)" can be optionally inverted using the "no" prefix, eg. "no
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001793option contstats". This makes sense when the option has been enabled by default
Willy Tarreau3842f002009-06-14 11:39:52 +02001794and must be disabled for a specific instance. Such options may also be prefixed
1795with "default" in order to restore default settings regardless of what has been
1796specified in a previous "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001797
Willy Tarreau6a06a402007-07-15 20:15:28 +02001798
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001799 keyword defaults frontend listen backend
1800------------------------------------+----------+----------+---------+---------
1801acl - X X X
Willy Tarreau294d0f02015-08-10 19:40:12 +02001802appsession - - - -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001803backlog X X X -
1804balance X - X X
1805bind - X X -
1806bind-process X X X X
1807block - X X X
1808capture cookie - X X -
1809capture request header - X X -
1810capture response header - X X -
1811clitimeout (deprecated) X X X -
William Lallemand82fe75c2012-10-23 10:25:10 +02001812compression X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001813contimeout (deprecated) X - X X
1814cookie X - X X
Thierry FOURNIERa0a1b752015-05-26 17:44:32 +02001815declare capture - X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001816default-server X - X X
1817default_backend X X X -
1818description - X X X
1819disabled X X X X
1820dispatch - - X X
Simon Horman51a1cf62015-02-03 13:00:44 +09001821email-alert from X X X X
Simon Horman64e34162015-02-06 11:11:57 +09001822email-alert level X X X X
Simon Horman51a1cf62015-02-03 13:00:44 +09001823email-alert mailers X X X X
1824email-alert myhostname X X X X
1825email-alert to X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001826enabled X X X X
1827errorfile X X X X
1828errorloc X X X X
1829errorloc302 X X X X
1830-- keyword -------------------------- defaults - frontend - listen -- backend -
1831errorloc303 X X X X
Cyril Bonté0d4bf012010-04-25 23:21:46 +02001832force-persist - X X X
Christopher Fauletc3fe5332016-04-07 15:30:10 +02001833filter - X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001834fullconn X - X X
1835grace X X X X
1836hash-type X - X X
1837http-check disable-on-404 X - X X
Willy Tarreaubd741542010-03-16 18:46:54 +01001838http-check expect - - X X
Willy Tarreau7ab6aff2010-10-12 06:30:16 +02001839http-check send-state X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001840http-request - X X X
Willy Tarreaue365c0b2013-06-11 16:06:12 +02001841http-response - X X X
Willy Tarreau30631952015-08-06 15:05:24 +02001842http-reuse X - X X
Baptiste Assmann2c42ef52013-10-09 21:57:02 +02001843http-send-name-header - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001844id - X X X
Cyril Bonté0d4bf012010-04-25 23:21:46 +02001845ignore-persist - X X X
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02001846load-server-state-from-file X - X X
William Lallemand0f99e342011-10-12 17:50:54 +02001847log (*) X X X X
Willy Tarreaufb4e7ea2015-01-07 14:55:17 +01001848log-format X X X -
Dragan Dosen7ad31542015-09-28 17:16:47 +02001849log-format-sd X X X -
Willy Tarreau094af4e2015-01-07 15:03:42 +01001850log-tag X X X X
Willy Tarreauc35362a2014-04-25 13:58:37 +02001851max-keep-alive-queue X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001852maxconn X X X -
1853mode X X X X
1854monitor fail - X X -
1855monitor-net X X X -
1856monitor-uri X X X -
1857option abortonclose (*) X - X X
1858option accept-invalid-http-request (*) X X X -
1859option accept-invalid-http-response (*) X - X X
1860option allbackups (*) X - X X
1861option checkcache (*) X - X X
1862option clitcpka (*) X X X -
1863option contstats (*) X X X -
1864option dontlog-normal (*) X X X -
1865option dontlognull (*) X X X -
1866option forceclose (*) X X X X
1867-- keyword -------------------------- defaults - frontend - listen -- backend -
1868option forwardfor X X X X
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02001869option http-buffer-request (*) X X X X
Willy Tarreau82649f92015-05-01 22:40:51 +02001870option http-ignore-probes (*) X X X -
Willy Tarreau16bfb022010-01-16 19:48:41 +01001871option http-keep-alive (*) X X X X
Willy Tarreau96e31212011-05-30 18:10:30 +02001872option http-no-delay (*) X X X X
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02001873option http-pretend-keepalive (*) X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001874option http-server-close (*) X X X X
Willy Tarreau02bce8b2014-01-30 00:15:28 +01001875option http-tunnel (*) X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001876option http-use-proxy-header (*) X X X -
1877option httpchk X - X X
1878option httpclose (*) X X X X
1879option httplog X X X X
1880option http_proxy (*) X X X X
Jamie Gloudon801a0a32012-08-25 00:18:33 -04001881option independent-streams (*) X X X X
Gabor Lekenyb4c81e42010-09-29 18:17:05 +02001882option ldap-check X - X X
Simon Horman98637e52014-06-20 12:30:16 +09001883option external-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001884option log-health-checks (*) X - X X
1885option log-separate-errors (*) X X X -
1886option logasap (*) X X X -
1887option mysql-check X - X X
1888option nolinger (*) X X X X
1889option originalto X X X X
1890option persist (*) X - X X
Baptiste Assmann809e22a2015-10-12 20:22:55 +02001891option pgsql-check X - X X
1892option prefer-last-server (*) X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001893option redispatch (*) X - X X
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02001894option redis-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001895option smtpchk X - X X
1896option socket-stats (*) X X X -
1897option splice-auto (*) X X X X
1898option splice-request (*) X X X X
1899option splice-response (*) X X X X
1900option srvtcpka (*) X - X X
1901option ssl-hello-chk X - X X
1902-- keyword -------------------------- defaults - frontend - listen -- backend -
Willy Tarreaued179852013-12-16 01:07:00 +01001903option tcp-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001904option tcp-smart-accept (*) X X X -
1905option tcp-smart-connect (*) X - X X
1906option tcpka X X X X
1907option tcplog X X X X
1908option transparent (*) X - X X
Simon Horman98637e52014-06-20 12:30:16 +09001909external-check command X - X X
1910external-check path X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001911persist rdp-cookie X - X X
1912rate-limit sessions X X X -
1913redirect - X X X
1914redisp (deprecated) X - X X
1915redispatch (deprecated) X - X X
1916reqadd - X X X
1917reqallow - X X X
1918reqdel - X X X
1919reqdeny - X X X
1920reqiallow - X X X
1921reqidel - X X X
1922reqideny - X X X
1923reqipass - X X X
1924reqirep - X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001925reqitarpit - X X X
1926reqpass - X X X
1927reqrep - X X X
1928-- keyword -------------------------- defaults - frontend - listen -- backend -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001929reqtarpit - X X X
1930retries X - X X
1931rspadd - X X X
1932rspdel - X X X
1933rspdeny - X X X
1934rspidel - X X X
1935rspideny - X X X
1936rspirep - X X X
1937rsprep - X X X
1938server - - X X
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02001939server-state-file-name X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001940source X - X X
1941srvtimeout (deprecated) X - X X
Baptiste Assmann5a549212015-10-12 20:30:24 +02001942stats admin - X X X
1943stats auth X X X X
1944stats enable X X X X
1945stats hide-version X X X X
1946stats http-request - X X X
1947stats realm X X X X
1948stats refresh X X X X
1949stats scope X X X X
1950stats show-desc X X X X
1951stats show-legends X X X X
1952stats show-node X X X X
1953stats uri X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001954-- keyword -------------------------- defaults - frontend - listen -- backend -
1955stick match - - X X
1956stick on - - X X
1957stick store-request - - X X
Willy Tarreaud8dc99f2011-07-01 11:33:25 +02001958stick store-response - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001959stick-table - - X X
Willy Tarreau938c7fe2014-04-25 14:21:39 +02001960tcp-check connect - - X X
1961tcp-check expect - - X X
1962tcp-check send - - X X
1963tcp-check send-binary - - X X
Willy Tarreaue9656522010-08-17 15:40:09 +02001964tcp-request connection - X X -
1965tcp-request content - X X X
Willy Tarreaua56235c2010-09-14 11:31:36 +02001966tcp-request inspect-delay - X X X
Willy Tarreau4f614292016-10-21 17:49:36 +02001967tcp-request session - X X -
Emeric Brun0a3b67f2010-09-24 15:34:53 +02001968tcp-response content - - X X
1969tcp-response inspect-delay - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001970timeout check X - X X
1971timeout client X X X -
Willy Tarreau05cdd962014-05-10 14:30:07 +02001972timeout client-fin X X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001973timeout clitimeout (deprecated) X X X -
1974timeout connect X - X X
1975timeout contimeout (deprecated) X - X X
1976timeout http-keep-alive X X X X
1977timeout http-request X X X X
1978timeout queue X - X X
1979timeout server X - X X
Willy Tarreau05cdd962014-05-10 14:30:07 +02001980timeout server-fin X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001981timeout srvtimeout (deprecated) X - X X
1982timeout tarpit X X X X
Willy Tarreauce887fd2012-05-12 12:50:00 +02001983timeout tunnel X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001984transparent (deprecated) X - X X
William Lallemanda73203e2012-03-12 12:48:57 +01001985unique-id-format X X X -
1986unique-id-header X X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001987use_backend - X X -
Willy Tarreau4a5cade2012-04-05 21:09:48 +02001988use-server - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001989------------------------------------+----------+----------+---------+---------
1990 keyword defaults frontend listen backend
Willy Tarreau6a06a402007-07-15 20:15:28 +02001991
Willy Tarreau0ba27502007-12-24 16:55:16 +01001992
Willy Tarreauc57f0e22009-05-10 13:12:33 +020019934.2. Alphabetically sorted keywords reference
1994---------------------------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001995
1996This section provides a description of each keyword and its usage.
1997
1998
1999acl <aclname> <criterion> [flags] [operator] <value> ...
2000 Declare or complete an access list.
2001 May be used in sections : defaults | frontend | listen | backend
2002 no | yes | yes | yes
2003 Example:
2004 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
2005 acl invalid_src src_port 0:1023
2006 acl local_dst hdr(host) -i localhost
2007
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002008 See section 7 about ACL usage.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002009
2010
Cyril Bontéb21570a2009-11-29 20:04:48 +01002011appsession <cookie> len <length> timeout <holdtime>
2012 [request-learn] [prefix] [mode <path-parameters|query-string>]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002013 Define session stickiness on an existing application cookie.
2014 May be used in sections : defaults | frontend | listen | backend
2015 no | no | yes | yes
2016 Arguments :
2017 <cookie> this is the name of the cookie used by the application and which
2018 HAProxy will have to learn for each new session.
2019
Cyril Bontéb21570a2009-11-29 20:04:48 +01002020 <length> this is the max number of characters that will be memorized and
Willy Tarreau0ba27502007-12-24 16:55:16 +01002021 checked in each cookie value.
2022
2023 <holdtime> this is the time after which the cookie will be removed from
2024 memory if unused. If no unit is specified, this time is in
2025 milliseconds.
2026
Cyril Bontébf47aeb2009-10-15 00:15:40 +02002027 request-learn
2028 If this option is specified, then haproxy will be able to learn
2029 the cookie found in the request in case the server does not
2030 specify any in response. This is typically what happens with
2031 PHPSESSID cookies, or when haproxy's session expires before
2032 the application's session and the correct server is selected.
2033 It is recommended to specify this option to improve reliability.
2034
Cyril Bontéb21570a2009-11-29 20:04:48 +01002035 prefix When this option is specified, haproxy will match on the cookie
2036 prefix (or URL parameter prefix). The appsession value is the
2037 data following this prefix.
2038
2039 Example :
2040 appsession ASPSESSIONID len 64 timeout 3h prefix
2041
2042 This will match the cookie ASPSESSIONIDXXXX=XXXXX,
2043 the appsession value will be XXXX=XXXXX.
2044
2045 mode This option allows to change the URL parser mode.
2046 2 modes are currently supported :
2047 - path-parameters :
2048 The parser looks for the appsession in the path parameters
2049 part (each parameter is separated by a semi-colon), which is
2050 convenient for JSESSIONID for example.
2051 This is the default mode if the option is not set.
2052 - query-string :
2053 In this mode, the parser will look for the appsession in the
2054 query string.
2055
Willy Tarreau294d0f02015-08-10 19:40:12 +02002056 As of version 1.6, appsessions was removed. It is more flexible and more
2057 convenient to use stick-tables instead, and stick-tables support multi-master
2058 replication and data conservation across reloads, which appsessions did not.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002059
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01002060 See also : "cookie", "capture cookie", "balance", "stick", "stick-table",
2061 "ignore-persist", "nbproc" and "bind-process".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002062
2063
Willy Tarreauc73ce2b2008-01-06 10:55:10 +01002064backlog <conns>
2065 Give hints to the system about the approximate listen backlog desired size
2066 May be used in sections : defaults | frontend | listen | backend
2067 yes | yes | yes | no
2068 Arguments :
2069 <conns> is the number of pending connections. Depending on the operating
2070 system, it may represent the number of already acknowledged
Cyril Bontédc4d9032012-04-08 21:57:39 +02002071 connections, of non-acknowledged ones, or both.
Willy Tarreauc73ce2b2008-01-06 10:55:10 +01002072
2073 In order to protect against SYN flood attacks, one solution is to increase
2074 the system's SYN backlog size. Depending on the system, sometimes it is just
2075 tunable via a system parameter, sometimes it is not adjustable at all, and
2076 sometimes the system relies on hints given by the application at the time of
2077 the listen() syscall. By default, HAProxy passes the frontend's maxconn value
2078 to the listen() syscall. On systems which can make use of this value, it can
2079 sometimes be useful to be able to specify a different value, hence this
2080 backlog parameter.
2081
2082 On Linux 2.4, the parameter is ignored by the system. On Linux 2.6, it is
2083 used as a hint and the system accepts up to the smallest greater power of
2084 two, and never more than some limits (usually 32768).
2085
2086 See also : "maxconn" and the target operating system's tuning guide.
2087
2088
Willy Tarreau0ba27502007-12-24 16:55:16 +01002089balance <algorithm> [ <arguments> ]
Willy Tarreau226071e2014-04-10 11:55:45 +02002090balance url_param <param> [check_post]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002091 Define the load balancing algorithm to be used in a backend.
2092 May be used in sections : defaults | frontend | listen | backend
2093 yes | no | yes | yes
2094 Arguments :
2095 <algorithm> is the algorithm used to select a server when doing load
2096 balancing. This only applies when no persistence information
2097 is available, or when a connection is redispatched to another
2098 server. <algorithm> may be one of the following :
2099
2100 roundrobin Each server is used in turns, according to their weights.
2101 This is the smoothest and fairest algorithm when the server's
2102 processing time remains equally distributed. This algorithm
2103 is dynamic, which means that server weights may be adjusted
Willy Tarreau9757a382009-10-03 12:56:50 +02002104 on the fly for slow starts for instance. It is limited by
Godbacha34bdc02013-07-22 07:44:53 +08002105 design to 4095 active servers per backend. Note that in some
Willy Tarreau9757a382009-10-03 12:56:50 +02002106 large farms, when a server becomes up after having been down
2107 for a very short time, it may sometimes take a few hundreds
2108 requests for it to be re-integrated into the farm and start
2109 receiving traffic. This is normal, though very rare. It is
2110 indicated here in case you would have the chance to observe
2111 it, so that you don't worry.
2112
2113 static-rr Each server is used in turns, according to their weights.
2114 This algorithm is as similar to roundrobin except that it is
2115 static, which means that changing a server's weight on the
2116 fly will have no effect. On the other hand, it has no design
2117 limitation on the number of servers, and when a server goes
2118 up, it is always immediately reintroduced into the farm, once
2119 the full map is recomputed. It also uses slightly less CPU to
2120 run (around -1%).
Willy Tarreau0ba27502007-12-24 16:55:16 +01002121
Willy Tarreau2d2a7f82008-03-17 12:07:56 +01002122 leastconn The server with the lowest number of connections receives the
2123 connection. Round-robin is performed within groups of servers
2124 of the same load to ensure that all servers will be used. Use
2125 of this algorithm is recommended where very long sessions are
2126 expected, such as LDAP, SQL, TSE, etc... but is not very well
2127 suited for protocols using short sessions such as HTTP. This
2128 algorithm is dynamic, which means that server weights may be
2129 adjusted on the fly for slow starts for instance.
2130
Willy Tarreauf09c6602012-02-13 17:12:08 +01002131 first The first server with available connection slots receives the
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03002132 connection. The servers are chosen from the lowest numeric
Willy Tarreauf09c6602012-02-13 17:12:08 +01002133 identifier to the highest (see server parameter "id"), which
2134 defaults to the server's position in the farm. Once a server
Willy Tarreau64559c52012-04-07 09:08:45 +02002135 reaches its maxconn value, the next server is used. It does
Willy Tarreauf09c6602012-02-13 17:12:08 +01002136 not make sense to use this algorithm without setting maxconn.
2137 The purpose of this algorithm is to always use the smallest
2138 number of servers so that extra servers can be powered off
2139 during non-intensive hours. This algorithm ignores the server
2140 weight, and brings more benefit to long session such as RDP
Willy Tarreau64559c52012-04-07 09:08:45 +02002141 or IMAP than HTTP, though it can be useful there too. In
2142 order to use this algorithm efficiently, it is recommended
2143 that a cloud controller regularly checks server usage to turn
2144 them off when unused, and regularly checks backend queue to
2145 turn new servers on when the queue inflates. Alternatively,
2146 using "http-check send-state" may inform servers on the load.
Willy Tarreauf09c6602012-02-13 17:12:08 +01002147
Willy Tarreau0ba27502007-12-24 16:55:16 +01002148 source The source IP address is hashed and divided by the total
2149 weight of the running servers to designate which server will
2150 receive the request. This ensures that the same client IP
2151 address will always reach the same server as long as no
2152 server goes down or up. If the hash result changes due to the
2153 number of running servers changing, many clients will be
2154 directed to a different server. This algorithm is generally
2155 used in TCP mode where no cookie may be inserted. It may also
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002156 be used on the Internet to provide a best-effort stickiness
Willy Tarreau0ba27502007-12-24 16:55:16 +01002157 to clients which refuse session cookies. This algorithm is
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002158 static by default, which means that changing a server's
2159 weight on the fly will have no effect, but this can be
2160 changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002161
Oskar Stolc8dc41842012-05-19 10:19:54 +01002162 uri This algorithm hashes either the left part of the URI (before
2163 the question mark) or the whole URI (if the "whole" parameter
2164 is present) and divides the hash value by the total weight of
2165 the running servers. The result designates which server will
2166 receive the request. This ensures that the same URI will
2167 always be directed to the same server as long as no server
2168 goes up or down. This is used with proxy caches and
2169 anti-virus proxies in order to maximize the cache hit rate.
2170 Note that this algorithm may only be used in an HTTP backend.
2171 This algorithm is static by default, which means that
2172 changing a server's weight on the fly will have no effect,
2173 but this can be changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002174
Oskar Stolc8dc41842012-05-19 10:19:54 +01002175 This algorithm supports two optional parameters "len" and
Marek Majkowski9c30fc12008-04-27 23:25:55 +02002176 "depth", both followed by a positive integer number. These
2177 options may be helpful when it is needed to balance servers
2178 based on the beginning of the URI only. The "len" parameter
2179 indicates that the algorithm should only consider that many
2180 characters at the beginning of the URI to compute the hash.
2181 Note that having "len" set to 1 rarely makes sense since most
2182 URIs start with a leading "/".
2183
2184 The "depth" parameter indicates the maximum directory depth
2185 to be used to compute the hash. One level is counted for each
2186 slash in the request. If both parameters are specified, the
2187 evaluation stops when either is reached.
2188
Willy Tarreau0ba27502007-12-24 16:55:16 +01002189 url_param The URL parameter specified in argument will be looked up in
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002190 the query string of each HTTP GET request.
2191
2192 If the modifier "check_post" is used, then an HTTP POST
Cyril Bontédc4d9032012-04-08 21:57:39 +02002193 request entity will be searched for the parameter argument,
2194 when it is not found in a query string after a question mark
Willy Tarreau226071e2014-04-10 11:55:45 +02002195 ('?') in the URL. The message body will only start to be
2196 analyzed once either the advertised amount of data has been
2197 received or the request buffer is full. In the unlikely event
2198 that chunked encoding is used, only the first chunk is
Cyril Bontédc4d9032012-04-08 21:57:39 +02002199 scanned. Parameter values separated by a chunk boundary, may
Willy Tarreau226071e2014-04-10 11:55:45 +02002200 be randomly balanced if at all. This keyword used to support
2201 an optional <max_wait> parameter which is now ignored.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002202
2203 If the parameter is found followed by an equal sign ('=') and
2204 a value, then the value is hashed and divided by the total
2205 weight of the running servers. The result designates which
2206 server will receive the request.
2207
2208 This is used to track user identifiers in requests and ensure
2209 that a same user ID will always be sent to the same server as
2210 long as no server goes up or down. If no value is found or if
2211 the parameter is not found, then a round robin algorithm is
2212 applied. Note that this algorithm may only be used in an HTTP
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002213 backend. This algorithm is static by default, which means
2214 that changing a server's weight on the fly will have no
2215 effect, but this can be changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002216
Cyril Bontédc4d9032012-04-08 21:57:39 +02002217 hdr(<name>) The HTTP header <name> will be looked up in each HTTP
2218 request. Just as with the equivalent ACL 'hdr()' function,
2219 the header name in parenthesis is not case sensitive. If the
2220 header is absent or if it does not contain any value, the
2221 roundrobin algorithm is applied instead.
Benoitaffb4812009-03-25 13:02:10 +01002222
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002223 An optional 'use_domain_only' parameter is available, for
Benoitaffb4812009-03-25 13:02:10 +01002224 reducing the hash algorithm to the main domain part with some
2225 specific headers such as 'Host'. For instance, in the Host
2226 value "haproxy.1wt.eu", only "1wt" will be considered.
2227
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002228 This algorithm is static by default, which means that
2229 changing a server's weight on the fly will have no effect,
2230 but this can be changed using "hash-type".
2231
Emeric Brun736aa232009-06-30 17:56:00 +02002232 rdp-cookie
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02002233 rdp-cookie(<name>)
Emeric Brun736aa232009-06-30 17:56:00 +02002234 The RDP cookie <name> (or "mstshash" if omitted) will be
2235 looked up and hashed for each incoming TCP request. Just as
2236 with the equivalent ACL 'req_rdp_cookie()' function, the name
2237 is not case-sensitive. This mechanism is useful as a degraded
2238 persistence mode, as it makes it possible to always send the
2239 same user (or the same session ID) to the same server. If the
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002240 cookie is not found, the normal roundrobin algorithm is
Emeric Brun736aa232009-06-30 17:56:00 +02002241 used instead.
2242
2243 Note that for this to work, the frontend must ensure that an
2244 RDP cookie is already present in the request buffer. For this
2245 you must use 'tcp-request content accept' rule combined with
2246 a 'req_rdp_cookie_cnt' ACL.
2247
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002248 This algorithm is static by default, which means that
2249 changing a server's weight on the fly will have no effect,
2250 but this can be changed using "hash-type".
2251
Cyril Bontédc4d9032012-04-08 21:57:39 +02002252 See also the rdp_cookie pattern fetch function.
Simon Hormanab814e02011-06-24 14:50:20 +09002253
Willy Tarreau0ba27502007-12-24 16:55:16 +01002254 <arguments> is an optional list of arguments which may be needed by some
Marek Majkowski9c30fc12008-04-27 23:25:55 +02002255 algorithms. Right now, only "url_param" and "uri" support an
2256 optional argument.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002257
Willy Tarreau3cd9af22009-03-15 14:06:41 +01002258 The load balancing algorithm of a backend is set to roundrobin when no other
2259 algorithm, mode nor option have been set. The algorithm may only be set once
2260 for each backend.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002261
2262 Examples :
2263 balance roundrobin
2264 balance url_param userid
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002265 balance url_param session_id check_post 64
Benoitaffb4812009-03-25 13:02:10 +01002266 balance hdr(User-Agent)
2267 balance hdr(host)
2268 balance hdr(Host) use_domain_only
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002269
2270 Note: the following caveats and limitations on using the "check_post"
2271 extension with "url_param" must be considered :
2272
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002273 - all POST requests are eligible for consideration, because there is no way
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002274 to determine if the parameters will be found in the body or entity which
2275 may contain binary data. Therefore another method may be required to
2276 restrict consideration of POST requests that have no URL parameters in
2277 the body. (see acl reqideny http_end)
2278
2279 - using a <max_wait> value larger than the request buffer size does not
2280 make sense and is useless. The buffer size is set at build time, and
2281 defaults to 16 kB.
2282
2283 - Content-Encoding is not supported, the parameter search will probably
2284 fail; and load balancing will fall back to Round Robin.
2285
2286 - Expect: 100-continue is not supported, load balancing will fall back to
2287 Round Robin.
2288
2289 - Transfer-Encoding (RFC2616 3.6.1) is only supported in the first chunk.
2290 If the entire parameter value is not present in the first chunk, the
2291 selection of server is undefined (actually, defined by how little
2292 actually appeared in the first chunk).
2293
2294 - This feature does not support generation of a 100, 411 or 501 response.
2295
2296 - In some cases, requesting "check_post" MAY attempt to scan the entire
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002297 contents of a message body. Scanning normally terminates when linear
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002298 white space or control characters are found, indicating the end of what
2299 might be a URL parameter list. This is probably not a concern with SGML
2300 type message bodies.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002301
Willy Tarreau294d0f02015-08-10 19:40:12 +02002302 See also : "dispatch", "cookie", "transparent", "hash-type" and "http_proxy".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002303
2304
Willy Tarreaub6205fd2012-09-24 12:27:33 +02002305bind [<address>]:<port_range> [, ...] [param*]
2306bind /<path> [, ...] [param*]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002307 Define one or several listening addresses and/or ports in a frontend.
2308 May be used in sections : defaults | frontend | listen | backend
2309 no | yes | yes | no
2310 Arguments :
Willy Tarreaub1e52e82008-01-13 14:49:51 +01002311 <address> is optional and can be a host name, an IPv4 address, an IPv6
2312 address, or '*'. It designates the address the frontend will
2313 listen on. If unset, all IPv4 addresses of the system will be
2314 listened on. The same will apply for '*' or the system's
David du Colombier9c938da2011-03-17 10:40:27 +01002315 special address "0.0.0.0". The IPv6 equivalent is '::'.
Willy Tarreau24709282013-03-10 21:32:12 +01002316 Optionally, an address family prefix may be used before the
2317 address to force the family regardless of the address format,
2318 which can be useful to specify a path to a unix socket with
2319 no slash ('/'). Currently supported prefixes are :
2320 - 'ipv4@' -> address is always IPv4
2321 - 'ipv6@' -> address is always IPv6
2322 - 'unix@' -> address is a path to a local unix socket
Willy Tarreau70f72e02014-07-08 00:37:50 +02002323 - 'abns@' -> address is in abstract namespace (Linux only).
2324 Note: since abstract sockets are not "rebindable", they
2325 do not cope well with multi-process mode during
2326 soft-restart, so it is better to avoid them if
2327 nbproc is greater than 1. The effect is that if the
2328 new process fails to start, only one of the old ones
2329 will be able to rebind to the socket.
Willy Tarreau40aa0702013-03-10 23:51:38 +01002330 - 'fd@<n>' -> use file descriptor <n> inherited from the
2331 parent. The fd must be bound and may or may not already
2332 be listening.
William Lallemandb2f07452015-05-12 14:27:13 +02002333 You may want to reference some environment variables in the
2334 address parameter, see section 2.3 about environment
2335 variables.
Willy Tarreaub1e52e82008-01-13 14:49:51 +01002336
Willy Tarreauc5011ca2010-03-22 11:53:56 +01002337 <port_range> is either a unique TCP port, or a port range for which the
2338 proxy will accept connections for the IP address specified
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002339 above. The port is mandatory for TCP listeners. Note that in
2340 the case of an IPv6 address, the port is always the number
2341 after the last colon (':'). A range can either be :
Willy Tarreauc5011ca2010-03-22 11:53:56 +01002342 - a numerical port (ex: '80')
2343 - a dash-delimited ports range explicitly stating the lower
2344 and upper bounds (ex: '2000-2100') which are included in
2345 the range.
2346
2347 Particular care must be taken against port ranges, because
2348 every <address:port> couple consumes one socket (= a file
2349 descriptor), so it's easy to consume lots of descriptors
2350 with a simple range, and to run out of sockets. Also, each
2351 <address:port> couple must be used only once among all
2352 instances running on a same system. Please note that binding
2353 to ports lower than 1024 generally require particular
Jamie Gloudon801a0a32012-08-25 00:18:33 -04002354 privileges to start the program, which are independent of
Willy Tarreauc5011ca2010-03-22 11:53:56 +01002355 the 'uid' parameter.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002356
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002357 <path> is a UNIX socket path beginning with a slash ('/'). This is
2358 alternative to the TCP listening port. Haproxy will then
2359 receive UNIX connections on the socket located at this place.
2360 The path must begin with a slash and by default is absolute.
2361 It can be relative to the prefix defined by "unix-bind" in
2362 the global section. Note that the total length of the prefix
2363 followed by the socket path cannot exceed some system limits
2364 for UNIX sockets, which commonly are set to 107 characters.
2365
Willy Tarreaub6205fd2012-09-24 12:27:33 +02002366 <param*> is a list of parameters common to all sockets declared on the
2367 same line. These numerous parameters depend on OS and build
2368 options and have a complete section dedicated to them. Please
2369 refer to section 5 to for more details.
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02002370
Willy Tarreau0ba27502007-12-24 16:55:16 +01002371 It is possible to specify a list of address:port combinations delimited by
2372 commas. The frontend will then listen on all of these addresses. There is no
2373 fixed limit to the number of addresses and ports which can be listened on in
2374 a frontend, as well as there is no limit to the number of "bind" statements
2375 in a frontend.
2376
2377 Example :
2378 listen http_proxy
2379 bind :80,:443
2380 bind 10.0.0.1:10080,10.0.0.1:10443
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002381 bind /var/run/ssl-frontend.sock user root mode 600 accept-proxy
Willy Tarreau0ba27502007-12-24 16:55:16 +01002382
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02002383 listen http_https_proxy
2384 bind :80
Cyril Bonté0d44fc62012-10-09 22:45:33 +02002385 bind :443 ssl crt /etc/haproxy/site.pem
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02002386
Willy Tarreau24709282013-03-10 21:32:12 +01002387 listen http_https_proxy_explicit
2388 bind ipv6@:80
2389 bind ipv4@public_ssl:443 ssl crt /etc/haproxy/site.pem
2390 bind unix@ssl-frontend.sock user root mode 600 accept-proxy
2391
Willy Tarreaudad36a32013-03-11 01:20:04 +01002392 listen external_bind_app1
William Lallemandb2f07452015-05-12 14:27:13 +02002393 bind "fd@${FD_APP1}"
Willy Tarreaudad36a32013-03-11 01:20:04 +01002394
Willy Tarreau55dcaf62015-09-27 15:03:15 +02002395 Note: regarding Linux's abstract namespace sockets, HAProxy uses the whole
2396 sun_path length is used for the address length. Some other programs
2397 such as socat use the string length only by default. Pass the option
2398 ",unix-tightsocklen=0" to any abstract socket definition in socat to
2399 make it compatible with HAProxy's.
2400
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002401 See also : "source", "option forwardfor", "unix-bind" and the PROXY protocol
Willy Tarreaub6205fd2012-09-24 12:27:33 +02002402 documentation, and section 5 about bind options.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002403
2404
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002405bind-process [ all | odd | even | <number 1-64>[-<number 1-64>] ] ...
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002406 Limit visibility of an instance to a certain set of processes numbers.
2407 May be used in sections : defaults | frontend | listen | backend
2408 yes | yes | yes | yes
2409 Arguments :
2410 all All process will see this instance. This is the default. It
2411 may be used to override a default value.
2412
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002413 odd This instance will be enabled on processes 1,3,5,...63. This
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002414 option may be combined with other numbers.
2415
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002416 even This instance will be enabled on processes 2,4,6,...64. This
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002417 option may be combined with other numbers. Do not use it
2418 with less than 2 processes otherwise some instances might be
2419 missing from all processes.
2420
Willy Tarreau110ecc12012-11-15 17:50:01 +01002421 number The instance will be enabled on this process number or range,
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002422 whose values must all be between 1 and 32 or 64 depending on
Willy Tarreau102df612014-05-07 23:56:38 +02002423 the machine's word size. If a proxy is bound to process
2424 numbers greater than the configured global.nbproc, it will
2425 either be forced to process #1 if a single process was
2426 specified, or to all processes otherwise.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002427
2428 This keyword limits binding of certain instances to certain processes. This
2429 is useful in order not to have too many processes listening to the same
2430 ports. For instance, on a dual-core machine, it might make sense to set
2431 'nbproc 2' in the global section, then distributes the listeners among 'odd'
2432 and 'even' instances.
2433
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002434 At the moment, it is not possible to reference more than 32 or 64 processes
2435 using this keyword, but this should be more than enough for most setups.
2436 Please note that 'all' really means all processes regardless of the machine's
2437 word size, and is not limited to the first 32 or 64.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002438
Willy Tarreau6ae1ba62014-05-07 19:01:58 +02002439 Each "bind" line may further be limited to a subset of the proxy's processes,
2440 please consult the "process" bind keyword in section 5.1.
2441
Willy Tarreaub369a042014-09-16 13:21:03 +02002442 When a frontend has no explicit "bind-process" line, it tries to bind to all
2443 the processes referenced by its "bind" lines. That means that frontends can
2444 easily adapt to their listeners' processes.
2445
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002446 If some backends are referenced by frontends bound to other processes, the
2447 backend automatically inherits the frontend's processes.
2448
2449 Example :
2450 listen app_ip1
2451 bind 10.0.0.1:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02002452 bind-process odd
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002453
2454 listen app_ip2
2455 bind 10.0.0.2:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02002456 bind-process even
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002457
2458 listen management
2459 bind 10.0.0.3:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02002460 bind-process 1 2 3 4
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002461
Willy Tarreau110ecc12012-11-15 17:50:01 +01002462 listen management
2463 bind 10.0.0.4:80
2464 bind-process 1-4
2465
Willy Tarreau6ae1ba62014-05-07 19:01:58 +02002466 See also : "nbproc" in global section, and "process" in section 5.1.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002467
2468
Willy Tarreau0ba27502007-12-24 16:55:16 +01002469block { if | unless } <condition>
2470 Block a layer 7 request if/unless a condition is matched
2471 May be used in sections : defaults | frontend | listen | backend
2472 no | yes | yes | yes
2473
2474 The HTTP request will be blocked very early in the layer 7 processing
2475 if/unless <condition> is matched. A 403 error will be returned if the request
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002476 is blocked. The condition has to reference ACLs (see section 7). This is
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02002477 typically used to deny access to certain sensitive resources if some
Willy Tarreau0ba27502007-12-24 16:55:16 +01002478 conditions are met or not met. There is no fixed limit to the number of
2479 "block" statements per instance.
2480
2481 Example:
2482 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
2483 acl invalid_src src_port 0:1023
2484 acl local_dst hdr(host) -i localhost
2485 block if invalid_src || local_dst
2486
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002487 See section 7 about ACL usage.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002488
2489
2490capture cookie <name> len <length>
2491 Capture and log a cookie in the request and in the response.
2492 May be used in sections : defaults | frontend | listen | backend
2493 no | yes | yes | no
2494 Arguments :
2495 <name> is the beginning of the name of the cookie to capture. In order
2496 to match the exact name, simply suffix the name with an equal
2497 sign ('='). The full name will appear in the logs, which is
2498 useful with application servers which adjust both the cookie name
2499 and value (eg: ASPSESSIONXXXXX).
2500
2501 <length> is the maximum number of characters to report in the logs, which
2502 include the cookie name, the equal sign and the value, all in the
2503 standard "name=value" form. The string will be truncated on the
2504 right if it exceeds <length>.
2505
2506 Only the first cookie is captured. Both the "cookie" request headers and the
2507 "set-cookie" response headers are monitored. This is particularly useful to
2508 check for application bugs causing session crossing or stealing between
2509 users, because generally the user's cookies can only change on a login page.
2510
2511 When the cookie was not presented by the client, the associated log column
2512 will report "-". When a request does not cause a cookie to be assigned by the
2513 server, a "-" is reported in the response column.
2514
2515 The capture is performed in the frontend only because it is necessary that
2516 the log format does not change for a given frontend depending on the
2517 backends. This may change in the future. Note that there can be only one
Willy Tarreau193b8c62012-11-22 00:17:38 +01002518 "capture cookie" statement in a frontend. The maximum capture length is set
2519 by the global "tune.http.cookielen" setting and defaults to 63 characters. It
2520 is not possible to specify a capture in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002521
2522 Example:
2523 capture cookie ASPSESSION len 32
2524
2525 See also : "capture request header", "capture response header" as well as
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002526 section 8 about logging.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002527
2528
2529capture request header <name> len <length>
Willy Tarreau4460d032012-11-21 23:37:37 +01002530 Capture and log the last occurrence of the specified request header.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002531 May be used in sections : defaults | frontend | listen | backend
2532 no | yes | yes | no
2533 Arguments :
2534 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002535 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +01002536 appear in the requests, with the first letter of each word in
2537 upper case. The header name will not appear in the logs, only the
2538 value is reported, but the position in the logs is respected.
2539
2540 <length> is the maximum number of characters to extract from the value and
2541 report in the logs. The string will be truncated on the right if
2542 it exceeds <length>.
2543
Willy Tarreau4460d032012-11-21 23:37:37 +01002544 The complete value of the last occurrence of the header is captured. The
Willy Tarreau0ba27502007-12-24 16:55:16 +01002545 value will be added to the logs between braces ('{}'). If multiple headers
2546 are captured, they will be delimited by a vertical bar ('|') and will appear
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002547 in the same order they were declared in the configuration. Non-existent
2548 headers will be logged just as an empty string. Common uses for request
2549 header captures include the "Host" field in virtual hosting environments, the
2550 "Content-length" when uploads are supported, "User-agent" to quickly
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002551 differentiate between real users and robots, and "X-Forwarded-For" in proxied
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002552 environments to find where the request came from.
2553
2554 Note that when capturing headers such as "User-agent", some spaces may be
2555 logged, making the log analysis more difficult. Thus be careful about what
2556 you log if you know your log parser is not smart enough to rely on the
2557 braces.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002558
Willy Tarreau0900abb2012-11-22 00:21:46 +01002559 There is no limit to the number of captured request headers nor to their
2560 length, though it is wise to keep them low to limit memory usage per session.
2561 In order to keep log format consistent for a same frontend, header captures
2562 can only be declared in a frontend. It is not possible to specify a capture
2563 in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002564
2565 Example:
2566 capture request header Host len 15
2567 capture request header X-Forwarded-For len 15
Cyril Bontéd1b0f7c2015-10-26 22:37:39 +01002568 capture request header Referer len 15
Willy Tarreau0ba27502007-12-24 16:55:16 +01002569
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002570 See also : "capture cookie", "capture response header" as well as section 8
Willy Tarreau0ba27502007-12-24 16:55:16 +01002571 about logging.
2572
2573
2574capture response header <name> len <length>
Willy Tarreau4460d032012-11-21 23:37:37 +01002575 Capture and log the last occurrence of the specified response header.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002576 May be used in sections : defaults | frontend | listen | backend
2577 no | yes | yes | no
2578 Arguments :
2579 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002580 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +01002581 appear in the response, with the first letter of each word in
2582 upper case. The header name will not appear in the logs, only the
2583 value is reported, but the position in the logs is respected.
2584
2585 <length> is the maximum number of characters to extract from the value and
2586 report in the logs. The string will be truncated on the right if
2587 it exceeds <length>.
2588
Willy Tarreau4460d032012-11-21 23:37:37 +01002589 The complete value of the last occurrence of the header is captured. The
Willy Tarreau0ba27502007-12-24 16:55:16 +01002590 result will be added to the logs between braces ('{}') after the captured
2591 request headers. If multiple headers are captured, they will be delimited by
2592 a vertical bar ('|') and will appear in the same order they were declared in
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002593 the configuration. Non-existent headers will be logged just as an empty
2594 string. Common uses for response header captures include the "Content-length"
2595 header which indicates how many bytes are expected to be returned, the
2596 "Location" header to track redirections.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002597
Willy Tarreau0900abb2012-11-22 00:21:46 +01002598 There is no limit to the number of captured response headers nor to their
2599 length, though it is wise to keep them low to limit memory usage per session.
2600 In order to keep log format consistent for a same frontend, header captures
2601 can only be declared in a frontend. It is not possible to specify a capture
2602 in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002603
2604 Example:
2605 capture response header Content-length len 9
2606 capture response header Location len 15
2607
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002608 See also : "capture cookie", "capture request header" as well as section 8
Willy Tarreau0ba27502007-12-24 16:55:16 +01002609 about logging.
2610
2611
Cyril Bontéf0c60612010-02-06 14:44:47 +01002612clitimeout <timeout> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01002613 Set the maximum inactivity time on the client side.
2614 May be used in sections : defaults | frontend | listen | backend
2615 yes | yes | yes | no
2616 Arguments :
2617 <timeout> is the timeout value is specified in milliseconds by default, but
2618 can be in any other unit if the number is suffixed by the unit,
2619 as explained at the top of this document.
2620
2621 The inactivity timeout applies when the client is expected to acknowledge or
2622 send data. In HTTP mode, this timeout is particularly important to consider
2623 during the first phase, when the client sends the request, and during the
2624 response while it is reading data sent by the server. The value is specified
2625 in milliseconds by default, but can be in any other unit if the number is
2626 suffixed by the unit, as specified at the top of this document. In TCP mode
2627 (and to a lesser extent, in HTTP mode), it is highly recommended that the
2628 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002629 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01002630 losses by specifying timeouts that are slightly above multiples of 3 seconds
2631 (eg: 4 or 5 seconds).
2632
2633 This parameter is specific to frontends, but can be specified once for all in
2634 "defaults" sections. This is in fact one of the easiest solutions not to
2635 forget about it. An unspecified timeout results in an infinite timeout, which
2636 is not recommended. Such a usage is accepted and works but reports a warning
2637 during startup because it may results in accumulation of expired sessions in
2638 the system if the system's timeouts are not configured either.
2639
2640 This parameter is provided for compatibility but is currently deprecated.
2641 Please use "timeout client" instead.
2642
Willy Tarreau036fae02008-01-06 13:24:40 +01002643 See also : "timeout client", "timeout http-request", "timeout server", and
2644 "srvtimeout".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002645
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002646compression algo <algorithm> ...
2647compression type <mime type> ...
Willy Tarreau70737d12012-10-27 00:34:28 +02002648compression offload
William Lallemand82fe75c2012-10-23 10:25:10 +02002649 Enable HTTP compression.
2650 May be used in sections : defaults | frontend | listen | backend
2651 yes | yes | yes | yes
2652 Arguments :
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002653 algo is followed by the list of supported compression algorithms.
2654 type is followed by the list of MIME types that will be compressed.
2655 offload makes haproxy work as a compression offloader only (see notes).
2656
2657 The currently supported algorithms are :
Willy Tarreauc91840a2015-03-28 17:00:39 +01002658 identity this is mostly for debugging, and it was useful for developing
2659 the compression feature. Identity does not apply any change on
2660 data.
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002661
Willy Tarreauc91840a2015-03-28 17:00:39 +01002662 gzip applies gzip compression. This setting is only available when
Baptiste Assmannf085d632015-12-21 17:57:32 +01002663 support for zlib or libslz was built in.
Willy Tarreauc91840a2015-03-28 17:00:39 +01002664
2665 deflate same as "gzip", but with deflate algorithm and zlib format.
2666 Note that this algorithm has ambiguous support on many
2667 browsers and no support at all from recent ones. It is
2668 strongly recommended not to use it for anything else than
2669 experimentation. This setting is only available when support
Baptiste Assmannf085d632015-12-21 17:57:32 +01002670 for zlib or libslz was built in.
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002671
Willy Tarreauc91840a2015-03-28 17:00:39 +01002672 raw-deflate same as "deflate" without the zlib wrapper, and used as an
2673 alternative when the browser wants "deflate". All major
2674 browsers understand it and despite violating the standards,
2675 it is known to work better than "deflate", at least on MSIE
2676 and some versions of Safari. Do not use it in conjunction
2677 with "deflate", use either one or the other since both react
2678 to the same Accept-Encoding token. This setting is only
Baptiste Assmannf085d632015-12-21 17:57:32 +01002679 available when support for zlib or libslz was built in.
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002680
Dmitry Sivachenko87c208b2012-11-22 20:03:26 +04002681 Compression will be activated depending on the Accept-Encoding request
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002682 header. With identity, it does not take care of that header.
Dmitry Sivachenkoc9f3b452012-11-28 17:47:11 +04002683 If backend servers support HTTP compression, these directives
2684 will be no-op: haproxy will see the compressed response and will not
2685 compress again. If backend servers do not support HTTP compression and
2686 there is Accept-Encoding header in request, haproxy will compress the
2687 matching response.
Willy Tarreau70737d12012-10-27 00:34:28 +02002688
2689 The "offload" setting makes haproxy remove the Accept-Encoding header to
2690 prevent backend servers from compressing responses. It is strongly
2691 recommended not to do this because this means that all the compression work
2692 will be done on the single point where haproxy is located. However in some
2693 deployment scenarios, haproxy may be installed in front of a buggy gateway
Dmitry Sivachenkoc9f3b452012-11-28 17:47:11 +04002694 with broken HTTP compression implementation which can't be turned off.
2695 In that case haproxy can be used to prevent that gateway from emitting
2696 invalid payloads. In this case, simply removing the header in the
2697 configuration does not work because it applies before the header is parsed,
2698 so that prevents haproxy from compressing. The "offload" setting should
Willy Tarreauffea9fd2014-07-12 16:37:02 +02002699 then be used for such scenarios. Note: for now, the "offload" setting is
2700 ignored when set in a defaults section.
William Lallemand82fe75c2012-10-23 10:25:10 +02002701
William Lallemand05097442012-11-20 12:14:28 +01002702 Compression is disabled when:
Baptiste Assmann650d53d2013-01-05 15:44:44 +01002703 * the request does not advertise a supported compression algorithm in the
2704 "Accept-Encoding" header
2705 * the response message is not HTTP/1.1
William Lallemandd3002612012-11-26 14:34:47 +01002706 * HTTP status code is not 200
William Lallemand8bb4e342013-12-10 17:28:48 +01002707 * response header "Transfer-Encoding" contains "chunked" (Temporary
2708 Workaround)
Baptiste Assmann650d53d2013-01-05 15:44:44 +01002709 * response contain neither a "Content-Length" header nor a
2710 "Transfer-Encoding" whose last value is "chunked"
2711 * response contains a "Content-Type" header whose first value starts with
2712 "multipart"
2713 * the response contains the "no-transform" value in the "Cache-control"
2714 header
2715 * User-Agent matches "Mozilla/4" unless it is MSIE 6 with XP SP2, or MSIE 7
2716 and later
2717 * The response contains a "Content-Encoding" header, indicating that the
2718 response is already compressed (see compression offload)
William Lallemand05097442012-11-20 12:14:28 +01002719
Baptiste Assmann650d53d2013-01-05 15:44:44 +01002720 Note: The compression does not rewrite Etag headers, and does not emit the
2721 Warning header.
William Lallemand05097442012-11-20 12:14:28 +01002722
William Lallemand82fe75c2012-10-23 10:25:10 +02002723 Examples :
2724 compression algo gzip
2725 compression type text/html text/plain
Willy Tarreau0ba27502007-12-24 16:55:16 +01002726
Christopher Fauletc3fe5332016-04-07 15:30:10 +02002727
Cyril Bontéf0c60612010-02-06 14:44:47 +01002728contimeout <timeout> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01002729 Set the maximum time to wait for a connection attempt to a server to succeed.
2730 May be used in sections : defaults | frontend | listen | backend
2731 yes | no | yes | yes
2732 Arguments :
2733 <timeout> is the timeout value is specified in milliseconds by default, but
2734 can be in any other unit if the number is suffixed by the unit,
2735 as explained at the top of this document.
2736
2737 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002738 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreaud72758d2010-01-12 10:42:19 +01002739 cover one or several TCP packet losses by specifying timeouts that are
Willy Tarreau0ba27502007-12-24 16:55:16 +01002740 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
2741 connect timeout also presets the queue timeout to the same value if this one
2742 has not been specified. Historically, the contimeout was also used to set the
2743 tarpit timeout in a listen section, which is not possible in a pure frontend.
2744
2745 This parameter is specific to backends, but can be specified once for all in
2746 "defaults" sections. This is in fact one of the easiest solutions not to
2747 forget about it. An unspecified timeout results in an infinite timeout, which
2748 is not recommended. Such a usage is accepted and works but reports a warning
2749 during startup because it may results in accumulation of failed sessions in
2750 the system if the system's timeouts are not configured either.
2751
2752 This parameter is provided for backwards compatibility but is currently
2753 deprecated. Please use "timeout connect", "timeout queue" or "timeout tarpit"
2754 instead.
2755
2756 See also : "timeout connect", "timeout queue", "timeout tarpit",
2757 "timeout server", "contimeout".
2758
2759
Willy Tarreau55165fe2009-05-10 12:02:55 +02002760cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
Willy Tarreau4992dd22012-05-31 21:02:17 +02002761 [ postonly ] [ preserve ] [ httponly ] [ secure ]
2762 [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002763 Enable cookie-based persistence in a backend.
2764 May be used in sections : defaults | frontend | listen | backend
2765 yes | no | yes | yes
2766 Arguments :
2767 <name> is the name of the cookie which will be monitored, modified or
2768 inserted in order to bring persistence. This cookie is sent to
2769 the client via a "Set-Cookie" header in the response, and is
2770 brought back by the client in a "Cookie" header in all requests.
2771 Special care should be taken to choose a name which does not
2772 conflict with any likely application cookie. Also, if the same
2773 backends are subject to be used by the same clients (eg:
2774 HTTP/HTTPS), care should be taken to use different cookie names
2775 between all backends if persistence between them is not desired.
2776
2777 rewrite This keyword indicates that the cookie will be provided by the
2778 server and that haproxy will have to modify its value to set the
2779 server's identifier in it. This mode is handy when the management
2780 of complex combinations of "Set-cookie" and "Cache-control"
2781 headers is left to the application. The application can then
2782 decide whether or not it is appropriate to emit a persistence
Lukas Tribusf01a9cd2016-02-03 18:09:37 +01002783 cookie. Since all responses should be monitored, this mode
2784 doesn't work in HTTP tunnel mode. Unless the application
2785 behaviour is very complex and/or broken, it is advised not to
2786 start with this mode for new deployments. This keyword is
2787 incompatible with "insert" and "prefix".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002788
2789 insert This keyword indicates that the persistence cookie will have to
Willy Tarreaua79094d2010-08-31 22:54:15 +02002790 be inserted by haproxy in server responses if the client did not
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002791
Willy Tarreaua79094d2010-08-31 22:54:15 +02002792 already have a cookie that would have permitted it to access this
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002793 server. When used without the "preserve" option, if the server
2794 emits a cookie with the same name, it will be remove before
2795 processing. For this reason, this mode can be used to upgrade
2796 existing configurations running in the "rewrite" mode. The cookie
2797 will only be a session cookie and will not be stored on the
2798 client's disk. By default, unless the "indirect" option is added,
2799 the server will see the cookies emitted by the client. Due to
2800 caching effects, it is generally wise to add the "nocache" or
2801 "postonly" keywords (see below). The "insert" keyword is not
2802 compatible with "rewrite" and "prefix".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002803
2804 prefix This keyword indicates that instead of relying on a dedicated
2805 cookie for the persistence, an existing one will be completed.
2806 This may be needed in some specific environments where the client
2807 does not support more than one single cookie and the application
2808 already needs it. In this case, whenever the server sets a cookie
2809 named <name>, it will be prefixed with the server's identifier
2810 and a delimiter. The prefix will be removed from all client
2811 requests so that the server still finds the cookie it emitted.
2812 Since all requests and responses are subject to being modified,
Lukas Tribusf01a9cd2016-02-03 18:09:37 +01002813 this mode doesn't work with tunnel mode. The "prefix" keyword is
Willy Tarreau37229df2011-10-17 12:24:55 +02002814 not compatible with "rewrite" and "insert". Note: it is highly
2815 recommended not to use "indirect" with "prefix", otherwise server
2816 cookie updates would not be sent to clients.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002817
Willy Tarreaua79094d2010-08-31 22:54:15 +02002818 indirect When this option is specified, no cookie will be emitted to a
2819 client which already has a valid one for the server which has
2820 processed the request. If the server sets such a cookie itself,
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002821 it will be removed, unless the "preserve" option is also set. In
2822 "insert" mode, this will additionally remove cookies from the
2823 requests transmitted to the server, making the persistence
2824 mechanism totally transparent from an application point of view.
Willy Tarreau37229df2011-10-17 12:24:55 +02002825 Note: it is highly recommended not to use "indirect" with
2826 "prefix", otherwise server cookie updates would not be sent to
2827 clients.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002828
2829 nocache This option is recommended in conjunction with the insert mode
2830 when there is a cache between the client and HAProxy, as it
2831 ensures that a cacheable response will be tagged non-cacheable if
2832 a cookie needs to be inserted. This is important because if all
2833 persistence cookies are added on a cacheable home page for
2834 instance, then all customers will then fetch the page from an
2835 outer cache and will all share the same persistence cookie,
2836 leading to one server receiving much more traffic than others.
2837 See also the "insert" and "postonly" options.
2838
2839 postonly This option ensures that cookie insertion will only be performed
2840 on responses to POST requests. It is an alternative to the
2841 "nocache" option, because POST responses are not cacheable, so
2842 this ensures that the persistence cookie will never get cached.
2843 Since most sites do not need any sort of persistence before the
2844 first POST which generally is a login request, this is a very
2845 efficient method to optimize caching without risking to find a
2846 persistence cookie in the cache.
2847 See also the "insert" and "nocache" options.
2848
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002849 preserve This option may only be used with "insert" and/or "indirect". It
2850 allows the server to emit the persistence cookie itself. In this
2851 case, if a cookie is found in the response, haproxy will leave it
2852 untouched. This is useful in order to end persistence after a
2853 logout request for instance. For this, the server just has to
2854 emit a cookie with an invalid value (eg: empty) or with a date in
2855 the past. By combining this mechanism with the "disable-on-404"
2856 check option, it is possible to perform a completely graceful
2857 shutdown because users will definitely leave the server after
2858 they logout.
2859
Willy Tarreau4992dd22012-05-31 21:02:17 +02002860 httponly This option tells haproxy to add an "HttpOnly" cookie attribute
2861 when a cookie is inserted. This attribute is used so that a
2862 user agent doesn't share the cookie with non-HTTP components.
2863 Please check RFC6265 for more information on this attribute.
2864
2865 secure This option tells haproxy to add a "Secure" cookie attribute when
2866 a cookie is inserted. This attribute is used so that a user agent
2867 never emits this cookie over non-secure channels, which means
2868 that a cookie learned with this flag will be presented only over
2869 SSL/TLS connections. Please check RFC6265 for more information on
2870 this attribute.
2871
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02002872 domain This option allows to specify the domain at which a cookie is
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002873 inserted. It requires exactly one parameter: a valid domain
Willy Tarreau68a897b2009-12-03 23:28:34 +01002874 name. If the domain begins with a dot, the browser is allowed to
2875 use it for any host ending with that name. It is also possible to
2876 specify several domain names by invoking this option multiple
2877 times. Some browsers might have small limits on the number of
2878 domains, so be careful when doing that. For the record, sending
2879 10 domains to MSIE 6 or Firefox 2 works as expected.
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02002880
Willy Tarreau996a92c2010-10-13 19:30:47 +02002881 maxidle This option allows inserted cookies to be ignored after some idle
2882 time. It only works with insert-mode cookies. When a cookie is
2883 sent to the client, the date this cookie was emitted is sent too.
2884 Upon further presentations of this cookie, if the date is older
2885 than the delay indicated by the parameter (in seconds), it will
2886 be ignored. Otherwise, it will be refreshed if needed when the
2887 response is sent to the client. This is particularly useful to
2888 prevent users who never close their browsers from remaining for
2889 too long on the same server (eg: after a farm size change). When
2890 this option is set and a cookie has no date, it is always
2891 accepted, but gets refreshed in the response. This maintains the
2892 ability for admins to access their sites. Cookies that have a
2893 date in the future further than 24 hours are ignored. Doing so
2894 lets admins fix timezone issues without risking kicking users off
2895 the site.
2896
2897 maxlife This option allows inserted cookies to be ignored after some life
2898 time, whether they're in use or not. It only works with insert
2899 mode cookies. When a cookie is first sent to the client, the date
2900 this cookie was emitted is sent too. Upon further presentations
2901 of this cookie, if the date is older than the delay indicated by
2902 the parameter (in seconds), it will be ignored. If the cookie in
2903 the request has no date, it is accepted and a date will be set.
2904 Cookies that have a date in the future further than 24 hours are
2905 ignored. Doing so lets admins fix timezone issues without risking
2906 kicking users off the site. Contrary to maxidle, this value is
2907 not refreshed, only the first visit date counts. Both maxidle and
2908 maxlife may be used at the time. This is particularly useful to
2909 prevent users who never close their browsers from remaining for
2910 too long on the same server (eg: after a farm size change). This
2911 is stronger than the maxidle method in that it forces a
2912 redispatch after some absolute delay.
2913
Willy Tarreau0ba27502007-12-24 16:55:16 +01002914 There can be only one persistence cookie per HTTP backend, and it can be
2915 declared in a defaults section. The value of the cookie will be the value
2916 indicated after the "cookie" keyword in a "server" statement. If no cookie
2917 is declared for a given server, the cookie is not set.
Willy Tarreau6a06a402007-07-15 20:15:28 +02002918
Willy Tarreau0ba27502007-12-24 16:55:16 +01002919 Examples :
2920 cookie JSESSIONID prefix
2921 cookie SRV insert indirect nocache
2922 cookie SRV insert postonly indirect
Willy Tarreau996a92c2010-10-13 19:30:47 +02002923 cookie SRV insert indirect nocache maxidle 30m maxlife 8h
Willy Tarreau0ba27502007-12-24 16:55:16 +01002924
Willy Tarreau294d0f02015-08-10 19:40:12 +02002925 See also : "balance source", "capture cookie", "server" and "ignore-persist".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002926
Willy Tarreau983e01e2010-01-11 18:42:06 +01002927
Thierry FOURNIERa0a1b752015-05-26 17:44:32 +02002928declare capture [ request | response ] len <length>
2929 Declares a capture slot.
2930 May be used in sections : defaults | frontend | listen | backend
2931 no | yes | yes | no
2932 Arguments:
2933 <length> is the length allowed for the capture.
2934
2935 This declaration is only available in the frontend or listen section, but the
2936 reserved slot can be used in the backends. The "request" keyword allocates a
2937 capture slot for use in the request, and "response" allocates a capture slot
2938 for use in the response.
2939
2940 See also: "capture-req", "capture-res" (sample converters),
Baptiste Assmann5ac425c2015-10-21 23:13:46 +02002941 "capture.req.hdr", "capture.res.hdr" (sample fetches),
Thierry FOURNIERa0a1b752015-05-26 17:44:32 +02002942 "http-request capture" and "http-response capture".
2943
2944
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01002945default-server [param*]
2946 Change default options for a server in a backend
2947 May be used in sections : defaults | frontend | listen | backend
2948 yes | no | yes | yes
2949 Arguments:
Willy Tarreau983e01e2010-01-11 18:42:06 +01002950 <param*> is a list of parameters for this server. The "default-server"
2951 keyword accepts an important number of options and has a complete
2952 section dedicated to it. Please refer to section 5 for more
2953 details.
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01002954
Willy Tarreau983e01e2010-01-11 18:42:06 +01002955 Example :
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01002956 default-server inter 1000 weight 13
2957
2958 See also: "server" and section 5 about server options
Willy Tarreau0ba27502007-12-24 16:55:16 +01002959
Willy Tarreau983e01e2010-01-11 18:42:06 +01002960
Willy Tarreau0ba27502007-12-24 16:55:16 +01002961default_backend <backend>
2962 Specify the backend to use when no "use_backend" rule has been matched.
2963 May be used in sections : defaults | frontend | listen | backend
2964 yes | yes | yes | no
2965 Arguments :
2966 <backend> is the name of the backend to use.
2967
2968 When doing content-switching between frontend and backends using the
2969 "use_backend" keyword, it is often useful to indicate which backend will be
2970 used when no rule has matched. It generally is the dynamic backend which
2971 will catch all undetermined requests.
2972
Willy Tarreau0ba27502007-12-24 16:55:16 +01002973 Example :
2974
2975 use_backend dynamic if url_dyn
2976 use_backend static if url_css url_img extension_img
2977 default_backend dynamic
2978
Willy Tarreau98d04852015-05-26 12:18:29 +02002979 See also : "use_backend"
Willy Tarreau2769aa02007-12-27 18:26:09 +01002980
Willy Tarreau0ba27502007-12-24 16:55:16 +01002981
Baptiste Assmann27f51342013-10-09 06:51:49 +02002982description <string>
2983 Describe a listen, frontend or backend.
2984 May be used in sections : defaults | frontend | listen | backend
2985 no | yes | yes | yes
2986 Arguments : string
2987
2988 Allows to add a sentence to describe the related object in the HAProxy HTML
2989 stats page. The description will be printed on the right of the object name
2990 it describes.
2991 No need to backslash spaces in the <string> arguments.
2992
2993
Willy Tarreau0ba27502007-12-24 16:55:16 +01002994disabled
2995 Disable a proxy, frontend or backend.
2996 May be used in sections : defaults | frontend | listen | backend
2997 yes | yes | yes | yes
2998 Arguments : none
2999
3000 The "disabled" keyword is used to disable an instance, mainly in order to
3001 liberate a listening port or to temporarily disable a service. The instance
3002 will still be created and its configuration will be checked, but it will be
3003 created in the "stopped" state and will appear as such in the statistics. It
3004 will not receive any traffic nor will it send any health-checks or logs. It
3005 is possible to disable many instances at once by adding the "disabled"
3006 keyword in a "defaults" section.
3007
3008 See also : "enabled"
3009
3010
Willy Tarreau5ce94572010-06-07 14:35:41 +02003011dispatch <address>:<port>
3012 Set a default server address
3013 May be used in sections : defaults | frontend | listen | backend
3014 no | no | yes | yes
Cyril Bonté108cf6e2012-04-21 23:30:29 +02003015 Arguments :
Willy Tarreau5ce94572010-06-07 14:35:41 +02003016
3017 <address> is the IPv4 address of the default server. Alternatively, a
3018 resolvable hostname is supported, but this name will be resolved
3019 during start-up.
3020
3021 <ports> is a mandatory port specification. All connections will be sent
3022 to this port, and it is not permitted to use port offsets as is
3023 possible with normal servers.
3024
Willy Tarreau787aed52011-04-15 06:45:37 +02003025 The "dispatch" keyword designates a default server for use when no other
Willy Tarreau5ce94572010-06-07 14:35:41 +02003026 server can take the connection. In the past it was used to forward non
3027 persistent connections to an auxiliary load balancer. Due to its simple
3028 syntax, it has also been used for simple TCP relays. It is recommended not to
3029 use it for more clarity, and to use the "server" directive instead.
3030
3031 See also : "server"
3032
3033
Willy Tarreau0ba27502007-12-24 16:55:16 +01003034enabled
3035 Enable a proxy, frontend or backend.
3036 May be used in sections : defaults | frontend | listen | backend
3037 yes | yes | yes | yes
3038 Arguments : none
3039
3040 The "enabled" keyword is used to explicitly enable an instance, when the
3041 defaults has been set to "disabled". This is very rarely used.
3042
3043 See also : "disabled"
3044
3045
3046errorfile <code> <file>
3047 Return a file contents instead of errors generated by HAProxy
3048 May be used in sections : defaults | frontend | listen | backend
3049 yes | yes | yes | yes
3050 Arguments :
3051 <code> is the HTTP status code. Currently, HAProxy is capable of
CJ Ess108b1dd2015-04-07 12:03:37 -04003052 generating codes 200, 400, 403, 405, 408, 429, 500, 502, 503, and
3053 504.
Willy Tarreau0ba27502007-12-24 16:55:16 +01003054
3055 <file> designates a file containing the full HTTP response. It is
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003056 recommended to follow the common practice of appending ".http" to
Willy Tarreau0ba27502007-12-24 16:55:16 +01003057 the filename so that people do not confuse the response with HTML
Willy Tarreau59140a22009-02-22 12:02:30 +01003058 error pages, and to use absolute paths, since files are read
3059 before any chroot is performed.
Willy Tarreau0ba27502007-12-24 16:55:16 +01003060
3061 It is important to understand that this keyword is not meant to rewrite
3062 errors returned by the server, but errors detected and returned by HAProxy.
3063 This is why the list of supported errors is limited to a small set.
3064
Willy Tarreauae94d4d2011-05-11 16:28:49 +02003065 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
3066
Willy Tarreau0ba27502007-12-24 16:55:16 +01003067 The files are returned verbatim on the TCP socket. This allows any trick such
3068 as redirections to another URL or site, as well as tricks to clean cookies,
3069 force enable or disable caching, etc... The package provides default error
3070 files returning the same contents as default errors.
3071
Willy Tarreau59140a22009-02-22 12:02:30 +01003072 The files should not exceed the configured buffer size (BUFSIZE), which
3073 generally is 8 or 16 kB, otherwise they will be truncated. It is also wise
3074 not to put any reference to local contents (eg: images) in order to avoid
3075 loops between the client and HAProxy when all servers are down, causing an
3076 error to be returned instead of an image. For better HTTP compliance, it is
3077 recommended that all header lines end with CR-LF and not LF alone.
3078
Willy Tarreau0ba27502007-12-24 16:55:16 +01003079 The files are read at the same time as the configuration and kept in memory.
3080 For this reason, the errors continue to be returned even when the process is
3081 chrooted, and no file change is considered while the process is running. A
Willy Tarreauc27debf2008-01-06 08:57:02 +01003082 simple method for developing those files consists in associating them to the
Willy Tarreau0ba27502007-12-24 16:55:16 +01003083 403 status code and interrogating a blocked URL.
3084
3085 See also : "errorloc", "errorloc302", "errorloc303"
3086
Willy Tarreau59140a22009-02-22 12:02:30 +01003087 Example :
3088 errorfile 400 /etc/haproxy/errorfiles/400badreq.http
Willy Tarreau989222a2016-01-15 10:26:26 +01003089 errorfile 408 /dev/null # work around Chrome pre-connect bug
Willy Tarreau59140a22009-02-22 12:02:30 +01003090 errorfile 403 /etc/haproxy/errorfiles/403forbid.http
3091 errorfile 503 /etc/haproxy/errorfiles/503sorry.http
3092
Willy Tarreau2769aa02007-12-27 18:26:09 +01003093
3094errorloc <code> <url>
3095errorloc302 <code> <url>
3096 Return an HTTP redirection to a URL instead of errors generated by HAProxy
3097 May be used in sections : defaults | frontend | listen | backend
3098 yes | yes | yes | yes
3099 Arguments :
3100 <code> is the HTTP status code. Currently, HAProxy is capable of
Willy Tarreauae94d4d2011-05-11 16:28:49 +02003101 generating codes 200, 400, 403, 408, 500, 502, 503, and 504.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003102
3103 <url> it is the exact contents of the "Location" header. It may contain
3104 either a relative URI to an error page hosted on the same site,
3105 or an absolute URI designating an error page on another site.
3106 Special care should be given to relative URIs to avoid redirect
3107 loops if the URI itself may generate the same error (eg: 500).
3108
3109 It is important to understand that this keyword is not meant to rewrite
3110 errors returned by the server, but errors detected and returned by HAProxy.
3111 This is why the list of supported errors is limited to a small set.
3112
Willy Tarreauae94d4d2011-05-11 16:28:49 +02003113 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
3114
Willy Tarreau2769aa02007-12-27 18:26:09 +01003115 Note that both keyword return the HTTP 302 status code, which tells the
3116 client to fetch the designated URL using the same HTTP method. This can be
3117 quite problematic in case of non-GET methods such as POST, because the URL
3118 sent to the client might not be allowed for something other than GET. To
Willy Tarreau989222a2016-01-15 10:26:26 +01003119 work around this problem, please use "errorloc303" which send the HTTP 303
Willy Tarreau2769aa02007-12-27 18:26:09 +01003120 status code, indicating to the client that the URL must be fetched with a GET
3121 request.
3122
3123 See also : "errorfile", "errorloc303"
3124
3125
3126errorloc303 <code> <url>
3127 Return an HTTP redirection to a URL instead of errors generated by HAProxy
3128 May be used in sections : defaults | frontend | listen | backend
3129 yes | yes | yes | yes
3130 Arguments :
3131 <code> is the HTTP status code. Currently, HAProxy is capable of
3132 generating codes 400, 403, 408, 500, 502, 503, and 504.
3133
3134 <url> it is the exact contents of the "Location" header. It may contain
3135 either a relative URI to an error page hosted on the same site,
3136 or an absolute URI designating an error page on another site.
3137 Special care should be given to relative URIs to avoid redirect
3138 loops if the URI itself may generate the same error (eg: 500).
3139
3140 It is important to understand that this keyword is not meant to rewrite
3141 errors returned by the server, but errors detected and returned by HAProxy.
3142 This is why the list of supported errors is limited to a small set.
3143
Willy Tarreauae94d4d2011-05-11 16:28:49 +02003144 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
3145
Willy Tarreau2769aa02007-12-27 18:26:09 +01003146 Note that both keyword return the HTTP 303 status code, which tells the
3147 client to fetch the designated URL using the same HTTP GET method. This
3148 solves the usual problems associated with "errorloc" and the 302 code. It is
3149 possible that some very old browsers designed before HTTP/1.1 do not support
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003150 it, but no such problem has been reported till now.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003151
3152 See also : "errorfile", "errorloc", "errorloc302"
3153
3154
Simon Horman51a1cf62015-02-03 13:00:44 +09003155email-alert from <emailaddr>
3156 Declare the from email address to be used in both the envelope and header
3157 of email alerts. This is the address that email alerts are sent from.
3158 May be used in sections: defaults | frontend | listen | backend
3159 yes | yes | yes | yes
3160
3161 Arguments :
3162
3163 <emailaddr> is the from email address to use when sending email alerts
3164
3165 Also requires "email-alert mailers" and "email-alert to" to be set
3166 and if so sending email alerts is enabled for the proxy.
3167
Simon Horman64e34162015-02-06 11:11:57 +09003168 See also : "email-alert level", "email-alert mailers",
Cyril Bonté307ee1e2015-09-28 23:16:06 +02003169 "email-alert myhostname", "email-alert to", section 3.6 about
3170 mailers.
Simon Horman64e34162015-02-06 11:11:57 +09003171
3172
3173email-alert level <level>
3174 Declare the maximum log level of messages for which email alerts will be
3175 sent. This acts as a filter on the sending of email alerts.
3176 May be used in sections: defaults | frontend | listen | backend
3177 yes | yes | yes | yes
3178
3179 Arguments :
3180
3181 <level> One of the 8 syslog levels:
3182 emerg alert crit err warning notice info debug
3183 The above syslog levels are ordered from lowest to highest.
3184
3185 By default level is alert
3186
3187 Also requires "email-alert from", "email-alert mailers" and
3188 "email-alert to" to be set and if so sending email alerts is enabled
3189 for the proxy.
3190
Simon Horman1421e212015-04-30 13:10:35 +09003191 Alerts are sent when :
3192
3193 * An un-paused server is marked as down and <level> is alert or lower
3194 * A paused server is marked as down and <level> is notice or lower
3195 * A server is marked as up or enters the drain state and <level>
3196 is notice or lower
3197 * "option log-health-checks" is enabled, <level> is info or lower,
3198 and a health check status update occurs
3199
Simon Horman64e34162015-02-06 11:11:57 +09003200 See also : "email-alert from", "email-alert mailers",
3201 "email-alert myhostname", "email-alert to",
Simon Horman51a1cf62015-02-03 13:00:44 +09003202 section 3.6 about mailers.
3203
3204
3205email-alert mailers <mailersect>
3206 Declare the mailers to be used when sending email alerts
3207 May be used in sections: defaults | frontend | listen | backend
3208 yes | yes | yes | yes
3209
3210 Arguments :
3211
3212 <mailersect> is the name of the mailers section to send email alerts.
3213
3214 Also requires "email-alert from" and "email-alert to" to be set
3215 and if so sending email alerts is enabled for the proxy.
3216
Simon Horman64e34162015-02-06 11:11:57 +09003217 See also : "email-alert from", "email-alert level", "email-alert myhostname",
3218 "email-alert to", section 3.6 about mailers.
Simon Horman51a1cf62015-02-03 13:00:44 +09003219
3220
3221email-alert myhostname <hostname>
3222 Declare the to hostname address to be used when communicating with
3223 mailers.
3224 May be used in sections: defaults | frontend | listen | backend
3225 yes | yes | yes | yes
3226
3227 Arguments :
3228
Baptiste Assmann738bad92015-12-21 15:27:53 +01003229 <hostname> is the hostname to use when communicating with mailers
Simon Horman51a1cf62015-02-03 13:00:44 +09003230
3231 By default the systems hostname is used.
3232
3233 Also requires "email-alert from", "email-alert mailers" and
3234 "email-alert to" to be set and if so sending email alerts is enabled
3235 for the proxy.
3236
Simon Horman64e34162015-02-06 11:11:57 +09003237 See also : "email-alert from", "email-alert level", "email-alert mailers",
3238 "email-alert to", section 3.6 about mailers.
Simon Horman51a1cf62015-02-03 13:00:44 +09003239
3240
3241email-alert to <emailaddr>
3242 Declare both the recipent address in the envelope and to address in the
3243 header of email alerts. This is the address that email alerts are sent to.
3244 May be used in sections: defaults | frontend | listen | backend
3245 yes | yes | yes | yes
3246
3247 Arguments :
3248
3249 <emailaddr> is the to email address to use when sending email alerts
3250
3251 Also requires "email-alert mailers" and "email-alert to" to be set
3252 and if so sending email alerts is enabled for the proxy.
3253
Simon Horman64e34162015-02-06 11:11:57 +09003254 See also : "email-alert from", "email-alert level", "email-alert mailers",
Simon Horman51a1cf62015-02-03 13:00:44 +09003255 "email-alert myhostname", section 3.6 about mailers.
3256
3257
Willy Tarreau4de91492010-01-22 19:10:05 +01003258force-persist { if | unless } <condition>
3259 Declare a condition to force persistence on down servers
3260 May be used in sections: defaults | frontend | listen | backend
3261 no | yes | yes | yes
3262
3263 By default, requests are not dispatched to down servers. It is possible to
3264 force this using "option persist", but it is unconditional and redispatches
3265 to a valid server if "option redispatch" is set. That leaves with very little
3266 possibilities to force some requests to reach a server which is artificially
3267 marked down for maintenance operations.
3268
3269 The "force-persist" statement allows one to declare various ACL-based
3270 conditions which, when met, will cause a request to ignore the down status of
3271 a server and still try to connect to it. That makes it possible to start a
3272 server, still replying an error to the health checks, and run a specially
3273 configured browser to test the service. Among the handy methods, one could
3274 use a specific source IP address, or a specific cookie. The cookie also has
3275 the advantage that it can easily be added/removed on the browser from a test
3276 page. Once the service is validated, it is then possible to open the service
3277 to the world by returning a valid response to health checks.
3278
3279 The forced persistence is enabled when an "if" condition is met, or unless an
3280 "unless" condition is met. The final redispatch is always disabled when this
3281 is used.
3282
Cyril Bonté0d4bf012010-04-25 23:21:46 +02003283 See also : "option redispatch", "ignore-persist", "persist",
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +02003284 and section 7 about ACL usage.
Willy Tarreau4de91492010-01-22 19:10:05 +01003285
Christopher Fauletc3fe5332016-04-07 15:30:10 +02003286
3287filter <name> [param*]
3288 Add the filter <name> in the filter list attached to the proxy.
3289 May be used in sections : defaults | frontend | listen | backend
3290 no | yes | yes | yes
3291 Arguments :
3292 <name> is the name of the filter. Officially supported filters are
3293 referenced in section 9.
3294
3295 <param*> is a list of parameters accpeted by the filter <name>. The
3296 parsing of these parameters are the responsibility of the
3297 filter. Please refer to the documention of the corresponding
3298 filter (section 9) from all details on the supported parameters.
3299
3300 Multiple occurrences of the filter line can be used for the same proxy. The
3301 same filter can be referenced many times if needed.
3302
3303 Example:
3304 listen
3305 bind *:80
3306
3307 filter trace name BEFORE-HTTP-COMP
3308 filter compression
3309 filter trace name AFTER-HTTP-COMP
3310
3311 compression algo gzip
3312 compression offload
3313
3314 server srv1 192.168.0.1:80
3315
3316 See also : section 9.
3317
Willy Tarreau4de91492010-01-22 19:10:05 +01003318
Willy Tarreau2769aa02007-12-27 18:26:09 +01003319fullconn <conns>
3320 Specify at what backend load the servers will reach their maxconn
3321 May be used in sections : defaults | frontend | listen | backend
3322 yes | no | yes | yes
3323 Arguments :
3324 <conns> is the number of connections on the backend which will make the
3325 servers use the maximal number of connections.
3326
Willy Tarreau198a7442008-01-17 12:05:32 +01003327 When a server has a "maxconn" parameter specified, it means that its number
Willy Tarreau2769aa02007-12-27 18:26:09 +01003328 of concurrent connections will never go higher. Additionally, if it has a
Willy Tarreau198a7442008-01-17 12:05:32 +01003329 "minconn" parameter, it indicates a dynamic limit following the backend's
Willy Tarreau2769aa02007-12-27 18:26:09 +01003330 load. The server will then always accept at least <minconn> connections,
3331 never more than <maxconn>, and the limit will be on the ramp between both
3332 values when the backend has less than <conns> concurrent connections. This
3333 makes it possible to limit the load on the servers during normal loads, but
3334 push it further for important loads without overloading the servers during
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003335 exceptional loads.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003336
Willy Tarreaufbb78422011-06-05 15:38:35 +02003337 Since it's hard to get this value right, haproxy automatically sets it to
3338 10% of the sum of the maxconns of all frontends that may branch to this
Bertrand Jacquin702d44f2013-11-19 11:43:06 +01003339 backend (based on "use_backend" and "default_backend" rules). That way it's
3340 safe to leave it unset. However, "use_backend" involving dynamic names are
3341 not counted since there is no way to know if they could match or not.
Willy Tarreaufbb78422011-06-05 15:38:35 +02003342
Willy Tarreau2769aa02007-12-27 18:26:09 +01003343 Example :
3344 # The servers will accept between 100 and 1000 concurrent connections each
3345 # and the maximum of 1000 will be reached when the backend reaches 10000
3346 # connections.
3347 backend dynamic
3348 fullconn 10000
3349 server srv1 dyn1:80 minconn 100 maxconn 1000
3350 server srv2 dyn2:80 minconn 100 maxconn 1000
3351
3352 See also : "maxconn", "server"
3353
3354
3355grace <time>
3356 Maintain a proxy operational for some time after a soft stop
3357 May be used in sections : defaults | frontend | listen | backend
Cyril Bonté99ed3272010-01-24 23:29:44 +01003358 yes | yes | yes | yes
Willy Tarreau2769aa02007-12-27 18:26:09 +01003359 Arguments :
3360 <time> is the time (by default in milliseconds) for which the instance
3361 will remain operational with the frontend sockets still listening
3362 when a soft-stop is received via the SIGUSR1 signal.
3363
3364 This may be used to ensure that the services disappear in a certain order.
3365 This was designed so that frontends which are dedicated to monitoring by an
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003366 external equipment fail immediately while other ones remain up for the time
Willy Tarreau2769aa02007-12-27 18:26:09 +01003367 needed by the equipment to detect the failure.
3368
3369 Note that currently, there is very little benefit in using this parameter,
3370 and it may in fact complicate the soft-reconfiguration process more than
3371 simplify it.
3372
Willy Tarreau0ba27502007-12-24 16:55:16 +01003373
Andrew Rodland17be45e2016-10-25 17:04:12 -04003374hash-balance-factor <factor>
3375 Specify the balancing factor for bounded-load consistent hashing
3376 May be used in sections : defaults | frontend | listen | backend
3377 yes | no | no | yes
3378 Arguments :
3379 <factor> is the control for the maximum number of concurrent requests to
3380 send to a server, expressed as a percentage of the average number
3381 of concurrent requests across all of the active servers.
3382
3383 Specifying a "hash-balance-factor" for a server with "hash-type consistent"
3384 enables an algorithm that prevents any one server from getting too many
3385 requests at once, even if some hash buckets receive many more requests than
3386 others. Setting <factor> to 0 (the default) disables the feature. Otherwise,
3387 <factor> is a percentage greater than 100. For example, if <factor> is 150,
3388 then no server will be allowed to have a load more than 1.5 times the average.
3389 If server weights are used, they will be respected.
3390
3391 If the first-choice server is disqualified, the algorithm will choose another
3392 server based on the request hash, until a server with additional capacity is
3393 found. A higher <factor> allows more imbalance between the servers, while a
3394 lower <factor> means that more servers will be checked on average, affecting
3395 performance. Reasonable values are from 125 to 200.
3396
3397 See also : "balance" and "hash-type".
3398
3399
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003400hash-type <method> <function> <modifier>
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003401 Specify a method to use for mapping hashes to servers
3402 May be used in sections : defaults | frontend | listen | backend
3403 yes | no | yes | yes
3404 Arguments :
Bhaskar98634f02013-10-29 23:30:51 -04003405 <method> is the method used to select a server from the hash computed by
3406 the <function> :
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003407
Bhaskar98634f02013-10-29 23:30:51 -04003408 map-based the hash table is a static array containing all alive servers.
3409 The hashes will be very smooth, will consider weights, but
3410 will be static in that weight changes while a server is up
3411 will be ignored. This means that there will be no slow start.
3412 Also, since a server is selected by its position in the array,
3413 most mappings are changed when the server count changes. This
3414 means that when a server goes up or down, or when a server is
3415 added to a farm, most connections will be redistributed to
3416 different servers. This can be inconvenient with caches for
3417 instance.
Willy Tarreau798a39c2010-11-24 15:04:29 +01003418
Bhaskar98634f02013-10-29 23:30:51 -04003419 consistent the hash table is a tree filled with many occurrences of each
3420 server. The hash key is looked up in the tree and the closest
3421 server is chosen. This hash is dynamic, it supports changing
3422 weights while the servers are up, so it is compatible with the
3423 slow start feature. It has the advantage that when a server
3424 goes up or down, only its associations are moved. When a
3425 server is added to the farm, only a few part of the mappings
3426 are redistributed, making it an ideal method for caches.
3427 However, due to its principle, the distribution will never be
3428 very smooth and it may sometimes be necessary to adjust a
3429 server's weight or its ID to get a more balanced distribution.
3430 In order to get the same distribution on multiple load
3431 balancers, it is important that all servers have the exact
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003432 same IDs. Note: consistent hash uses sdbm and avalanche if no
3433 hash function is specified.
Bhaskar98634f02013-10-29 23:30:51 -04003434
3435 <function> is the hash function to be used :
3436
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03003437 sdbm this function was created initially for sdbm (a public-domain
Bhaskar98634f02013-10-29 23:30:51 -04003438 reimplementation of ndbm) database library. It was found to do
3439 well in scrambling bits, causing better distribution of the keys
3440 and fewer splits. It also happens to be a good general hashing
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003441 function with good distribution, unless the total server weight
3442 is a multiple of 64, in which case applying the avalanche
3443 modifier may help.
Bhaskar98634f02013-10-29 23:30:51 -04003444
3445 djb2 this function was first proposed by Dan Bernstein many years ago
3446 on comp.lang.c. Studies have shown that for certain workload this
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003447 function provides a better distribution than sdbm. It generally
3448 works well with text-based inputs though it can perform extremely
3449 poorly with numeric-only input or when the total server weight is
3450 a multiple of 33, unless the avalanche modifier is also used.
3451
Willy Tarreaua0f42712013-11-14 14:30:35 +01003452 wt6 this function was designed for haproxy while testing other
3453 functions in the past. It is not as smooth as the other ones, but
3454 is much less sensible to the input data set or to the number of
3455 servers. It can make sense as an alternative to sdbm+avalanche or
3456 djb2+avalanche for consistent hashing or when hashing on numeric
3457 data such as a source IP address or a visitor identifier in a URL
3458 parameter.
3459
Willy Tarreau324f07f2015-01-20 19:44:50 +01003460 crc32 this is the most common CRC32 implementation as used in Ethernet,
3461 gzip, PNG, etc. It is slower than the other ones but may provide
3462 a better distribution or less predictable results especially when
3463 used on strings.
3464
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003465 <modifier> indicates an optional method applied after hashing the key :
3466
3467 avalanche This directive indicates that the result from the hash
3468 function above should not be used in its raw form but that
3469 a 4-byte full avalanche hash must be applied first. The
3470 purpose of this step is to mix the resulting bits from the
3471 previous hash in order to avoid any undesired effect when
3472 the input contains some limited values or when the number of
3473 servers is a multiple of one of the hash's components (64
3474 for SDBM, 33 for DJB2). Enabling avalanche tends to make the
3475 result less predictable, but it's also not as smooth as when
3476 using the original function. Some testing might be needed
3477 with some workloads. This hash is one of the many proposed
3478 by Bob Jenkins.
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003479
Bhaskar98634f02013-10-29 23:30:51 -04003480 The default hash type is "map-based" and is recommended for most usages. The
3481 default function is "sdbm", the selection of a function should be based on
3482 the range of the values being hashed.
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003483
Andrew Rodland17be45e2016-10-25 17:04:12 -04003484 See also : "balance", "hash-balance-factor", "server"
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003485
3486
Willy Tarreau0ba27502007-12-24 16:55:16 +01003487http-check disable-on-404
3488 Enable a maintenance mode upon HTTP/404 response to health-checks
3489 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau2769aa02007-12-27 18:26:09 +01003490 yes | no | yes | yes
Willy Tarreau0ba27502007-12-24 16:55:16 +01003491 Arguments : none
3492
3493 When this option is set, a server which returns an HTTP code 404 will be
3494 excluded from further load-balancing, but will still receive persistent
3495 connections. This provides a very convenient method for Web administrators
3496 to perform a graceful shutdown of their servers. It is also important to note
3497 that a server which is detected as failed while it was in this mode will not
3498 generate an alert, just a notice. If the server responds 2xx or 3xx again, it
3499 will immediately be reinserted into the farm. The status on the stats page
3500 reports "NOLB" for a server in this mode. It is important to note that this
Willy Tarreaubd741542010-03-16 18:46:54 +01003501 option only works in conjunction with the "httpchk" option. If this option
3502 is used with "http-check expect", then it has precedence over it so that 404
3503 responses will still be considered as soft-stop.
3504
3505 See also : "option httpchk", "http-check expect"
3506
3507
3508http-check expect [!] <match> <pattern>
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003509 Make HTTP health checks consider response contents or specific status codes
Willy Tarreaubd741542010-03-16 18:46:54 +01003510 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau1ee51a62011-08-19 20:04:17 +02003511 yes | no | yes | yes
Willy Tarreaubd741542010-03-16 18:46:54 +01003512 Arguments :
3513 <match> is a keyword indicating how to look for a specific pattern in the
3514 response. The keyword may be one of "status", "rstatus",
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003515 "string", or "rstring". The keyword may be preceded by an
Willy Tarreaubd741542010-03-16 18:46:54 +01003516 exclamation mark ("!") to negate the match. Spaces are allowed
3517 between the exclamation mark and the keyword. See below for more
3518 details on the supported keywords.
3519
3520 <pattern> is the pattern to look for. It may be a string or a regular
3521 expression. If the pattern contains spaces, they must be escaped
3522 with the usual backslash ('\').
3523
3524 By default, "option httpchk" considers that response statuses 2xx and 3xx
3525 are valid, and that others are invalid. When "http-check expect" is used,
3526 it defines what is considered valid or invalid. Only one "http-check"
3527 statement is supported in a backend. If a server fails to respond or times
3528 out, the check obviously fails. The available matches are :
3529
3530 status <string> : test the exact string match for the HTTP status code.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003531 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003532 response's status code is exactly this string. If the
3533 "status" keyword is prefixed with "!", then the response
3534 will be considered invalid if the status code matches.
3535
3536 rstatus <regex> : test a regular expression for the HTTP status code.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003537 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003538 response's status code matches the expression. If the
3539 "rstatus" keyword is prefixed with "!", then the response
3540 will be considered invalid if the status code matches.
3541 This is mostly used to check for multiple codes.
3542
3543 string <string> : test the exact string match in the HTTP response body.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003544 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003545 response's body contains this exact string. If the
3546 "string" keyword is prefixed with "!", then the response
3547 will be considered invalid if the body contains this
3548 string. This can be used to look for a mandatory word at
3549 the end of a dynamic page, or to detect a failure when a
3550 specific error appears on the check page (eg: a stack
3551 trace).
3552
3553 rstring <regex> : test a regular expression on the HTTP response body.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003554 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003555 response's body matches this expression. If the "rstring"
3556 keyword is prefixed with "!", then the response will be
3557 considered invalid if the body matches the expression.
3558 This can be used to look for a mandatory word at the end
3559 of a dynamic page, or to detect a failure when a specific
3560 error appears on the check page (eg: a stack trace).
3561
3562 It is important to note that the responses will be limited to a certain size
3563 defined by the global "tune.chksize" option, which defaults to 16384 bytes.
3564 Thus, too large responses may not contain the mandatory pattern when using
3565 "string" or "rstring". If a large response is absolutely required, it is
3566 possible to change the default max size by setting the global variable.
3567 However, it is worth keeping in mind that parsing very large responses can
3568 waste some CPU cycles, especially when regular expressions are used, and that
3569 it is always better to focus the checks on smaller resources.
3570
Cyril Bonté32602d22015-01-30 00:07:07 +01003571 Also "http-check expect" doesn't support HTTP keep-alive. Keep in mind that it
3572 will automatically append a "Connection: close" header, meaning that this
3573 header should not be present in the request provided by "option httpchk".
3574
Willy Tarreaubd741542010-03-16 18:46:54 +01003575 Last, if "http-check expect" is combined with "http-check disable-on-404",
3576 then this last one has precedence when the server responds with 404.
3577
3578 Examples :
3579 # only accept status 200 as valid
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003580 http-check expect status 200
Willy Tarreaubd741542010-03-16 18:46:54 +01003581
3582 # consider SQL errors as errors
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003583 http-check expect ! string SQL\ Error
Willy Tarreaubd741542010-03-16 18:46:54 +01003584
3585 # consider status 5xx only as errors
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003586 http-check expect ! rstatus ^5
Willy Tarreaubd741542010-03-16 18:46:54 +01003587
3588 # check that we have a correct hexadecimal tag before /html
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003589 http-check expect rstring <!--tag:[0-9a-f]*</html>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003590
Willy Tarreaubd741542010-03-16 18:46:54 +01003591 See also : "option httpchk", "http-check disable-on-404"
Willy Tarreau2769aa02007-12-27 18:26:09 +01003592
3593
Willy Tarreauef781042010-01-27 11:53:01 +01003594http-check send-state
3595 Enable emission of a state header with HTTP health checks
3596 May be used in sections : defaults | frontend | listen | backend
3597 yes | no | yes | yes
3598 Arguments : none
3599
3600 When this option is set, haproxy will systematically send a special header
3601 "X-Haproxy-Server-State" with a list of parameters indicating to each server
3602 how they are seen by haproxy. This can be used for instance when a server is
3603 manipulated without access to haproxy and the operator needs to know whether
3604 haproxy still sees it up or not, or if the server is the last one in a farm.
3605
3606 The header is composed of fields delimited by semi-colons, the first of which
3607 is a word ("UP", "DOWN", "NOLB"), possibly followed by a number of valid
3608 checks on the total number before transition, just as appears in the stats
3609 interface. Next headers are in the form "<variable>=<value>", indicating in
3610 no specific order some values available in the stats interface :
Joseph Lynch514061c2015-01-15 17:52:59 -08003611 - a variable "address", containing the address of the backend server.
3612 This corresponds to the <address> field in the server declaration. For
3613 unix domain sockets, it will read "unix".
3614
3615 - a variable "port", containing the port of the backend server. This
3616 corresponds to the <port> field in the server declaration. For unix
3617 domain sockets, it will read "unix".
3618
Willy Tarreauef781042010-01-27 11:53:01 +01003619 - a variable "name", containing the name of the backend followed by a slash
3620 ("/") then the name of the server. This can be used when a server is
3621 checked in multiple backends.
3622
3623 - a variable "node" containing the name of the haproxy node, as set in the
3624 global "node" variable, otherwise the system's hostname if unspecified.
3625
3626 - a variable "weight" indicating the weight of the server, a slash ("/")
3627 and the total weight of the farm (just counting usable servers). This
3628 helps to know if other servers are available to handle the load when this
3629 one fails.
3630
3631 - a variable "scur" indicating the current number of concurrent connections
3632 on the server, followed by a slash ("/") then the total number of
3633 connections on all servers of the same backend.
3634
3635 - a variable "qcur" indicating the current number of requests in the
3636 server's queue.
3637
3638 Example of a header received by the application server :
3639 >>> X-Haproxy-Server-State: UP 2/3; name=bck/srv2; node=lb1; weight=1/2; \
3640 scur=13/22; qcur=0
3641
3642 See also : "option httpchk", "http-check disable-on-404"
3643
Willy Tarreaube1d34d2016-06-26 19:37:59 +02003644http-request { allow | tarpit | auth [realm <realm>] | redirect <rule> |
3645 deny [deny_status <status>] |
Willy Tarreauf4c43c12013-06-11 17:01:13 +02003646 add-header <name> <fmt> | set-header <name> <fmt> |
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02003647 capture <sample> [ len <length> | id <id> ] |
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02003648 del-header <name> | set-nice <nice> | set-log-level <level> |
Sasha Pachev218f0642014-06-16 12:05:59 -06003649 replace-header <name> <match-regex> <replace-fmt> |
3650 replace-value <name> <match-regex> <replace-fmt> |
Willy Tarreaua0dc23f2015-01-22 20:46:11 +01003651 set-method <fmt> | set-path <fmt> | set-query <fmt> |
3652 set-uri <fmt> | set-tos <tos> | set-mark <mark> |
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003653 add-acl(<file name>) <key fmt> |
3654 del-acl(<file name>) <key fmt> |
3655 del-map(<file name>) <key fmt> |
Baptiste Assmannbb7e86a2014-09-03 18:29:47 +02003656 set-map(<file name>) <key fmt> <value fmt> |
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02003657 set-var(<var name>) <expr> |
Thierry FOURNIER90da1912015-03-05 11:17:06 +01003658 { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] |
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02003659 sc-inc-gpc0(<sc-id>) |
Thierry FOURNIER236657b2015-08-19 08:25:14 +02003660 sc-set-gpt0(<sc-id>) <int> |
Willy Tarreau2d392c22015-08-24 01:43:45 +02003661 silent-drop |
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003662 }
Cyril Bontéf0c60612010-02-06 14:44:47 +01003663 [ { if | unless } <condition> ]
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01003664 Access control for Layer 7 requests
3665
3666 May be used in sections: defaults | frontend | listen | backend
3667 no | yes | yes | yes
3668
Willy Tarreau20b0de52012-12-24 15:45:22 +01003669 The http-request statement defines a set of rules which apply to layer 7
3670 processing. The rules are evaluated in their declaration order when they are
3671 met in a frontend, listen or backend section. Any rule may optionally be
3672 followed by an ACL-based condition, in which case it will only be evaluated
3673 if the condition is true.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01003674
Willy Tarreau20b0de52012-12-24 15:45:22 +01003675 The first keyword is the rule's action. Currently supported actions include :
3676 - "allow" : this stops the evaluation of the rules and lets the request
3677 pass the check. No further "http-request" rules are evaluated.
3678
3679 - "deny" : this stops the evaluation of the rules and immediately rejects
Willy Tarreaube1d34d2016-06-26 19:37:59 +02003680 the request and emits an HTTP 403 error, or optionally the status code
3681 specified as an argument to "deny_status". The list of permitted status
3682 codes is limited to those that can be overridden by the "errorfile"
3683 directive. No further "http-request" rules are evaluated.
Willy Tarreau20b0de52012-12-24 15:45:22 +01003684
Willy Tarreauccbcc372012-12-27 12:37:57 +01003685 - "tarpit" : this stops the evaluation of the rules and immediately blocks
3686 the request without responding for a delay specified by "timeout tarpit"
3687 or "timeout connect" if the former is not set. After that delay, if the
3688 client is still connected, an HTTP error 500 is returned so that the
3689 client does not suspect it has been tarpitted. Logs will report the flags
3690 "PT". The goal of the tarpit rule is to slow down robots during an attack
3691 when they're limited on the number of concurrent requests. It can be very
3692 efficient against very dumb robots, and will significantly reduce the
3693 load on firewalls compared to a "deny" rule. But when facing "correctly"
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03003694 developed robots, it can make things worse by forcing haproxy and the
Willy Tarreau2d392c22015-08-24 01:43:45 +02003695 front firewall to support insane number of concurrent connections. See
3696 also the "silent-drop" action below.
Willy Tarreauccbcc372012-12-27 12:37:57 +01003697
Willy Tarreau20b0de52012-12-24 15:45:22 +01003698 - "auth" : this stops the evaluation of the rules and immediately responds
3699 with an HTTP 401 or 407 error code to invite the user to present a valid
3700 user name and password. No further "http-request" rules are evaluated. An
3701 optional "realm" parameter is supported, it sets the authentication realm
3702 that is returned with the response (typically the application's name).
3703
Willy Tarreau81499eb2012-12-27 12:19:02 +01003704 - "redirect" : this performs an HTTP redirection based on a redirect rule.
3705 This is exactly the same as the "redirect" statement except that it
3706 inserts a redirect rule which can be processed in the middle of other
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01003707 "http-request" rules and that these rules use the "log-format" strings.
3708 See the "redirect" keyword for the rule's syntax.
Willy Tarreau81499eb2012-12-27 12:19:02 +01003709
Willy Tarreau20b0de52012-12-24 15:45:22 +01003710 - "add-header" appends an HTTP header field whose name is specified in
3711 <name> and whose value is defined by <fmt> which follows the log-format
3712 rules (see Custom Log Format in section 8.2.4). This is particularly
3713 useful to pass connection-specific information to the server (eg: the
3714 client's SSL certificate), or to combine several headers into one. This
3715 rule is not final, so it is possible to add other similar rules. Note
3716 that header addition is performed immediately, so one rule might reuse
3717 the resulting header from a previous rule.
3718
3719 - "set-header" does the same as "add-header" except that the header name
3720 is first removed if it existed. This is useful when passing security
3721 information to the server, where the header must not be manipulated by
Willy Tarreau85603282015-01-21 20:39:27 +01003722 external users. Note that the new value is computed before the removal so
3723 it is possible to concatenate a value to an existing header.
Willy Tarreau20b0de52012-12-24 15:45:22 +01003724
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02003725 - "del-header" removes all HTTP header fields whose name is specified in
3726 <name>.
3727
Sasha Pachev218f0642014-06-16 12:05:59 -06003728 - "replace-header" matches the regular expression in all occurrences of
3729 header field <name> according to <match-regex>, and replaces them with
3730 the <replace-fmt> argument. Format characters are allowed in replace-fmt
3731 and work like in <fmt> arguments in "add-header". The match is only
3732 case-sensitive. It is important to understand that this action only
3733 considers whole header lines, regardless of the number of values they
3734 may contain. This usage is suited to headers naturally containing commas
3735 in their value, such as If-Modified-Since and so on.
3736
3737 Example:
3738
3739 http-request replace-header Cookie foo=([^;]*);(.*) foo=\1;ip=%bi;\2
3740
3741 applied to:
3742
3743 Cookie: foo=foobar; expires=Tue, 14-Jun-2016 01:40:45 GMT;
3744
3745 outputs:
3746
3747 Cookie: foo=foobar;ip=192.168.1.20; expires=Tue, 14-Jun-2016 01:40:45 GMT;
3748
3749 assuming the backend IP is 192.168.1.20
3750
3751 - "replace-value" works like "replace-header" except that it matches the
3752 regex against every comma-delimited value of the header field <name>
3753 instead of the entire header. This is suited for all headers which are
3754 allowed to carry more than one value. An example could be the Accept
3755 header.
3756
3757 Example:
3758
3759 http-request replace-value X-Forwarded-For ^192\.168\.(.*)$ 172.16.\1
3760
3761 applied to:
3762
3763 X-Forwarded-For: 192.168.10.1, 192.168.13.24, 10.0.0.37
3764
3765 outputs:
3766
3767 X-Forwarded-For: 172.16.10.1, 172.16.13.24, 10.0.0.37
3768
Willy Tarreaua0dc23f2015-01-22 20:46:11 +01003769 - "set-method" rewrites the request method with the result of the
3770 evaluation of format string <fmt>. There should be very few valid reasons
3771 for having to do so as this is more likely to break something than to fix
3772 it.
3773
3774 - "set-path" rewrites the request path with the result of the evaluation of
3775 format string <fmt>. The query string, if any, is left intact. If a
3776 scheme and authority is found before the path, they are left intact as
3777 well. If the request doesn't have a path ("*"), this one is replaced with
3778 the format. This can be used to prepend a directory component in front of
3779 a path for example. See also "set-query" and "set-uri".
3780
3781 Example :
3782 # prepend the host name before the path
3783 http-request set-path /%[hdr(host)]%[path]
3784
3785 - "set-query" rewrites the request's query string which appears after the
3786 first question mark ("?") with the result of the evaluation of format
3787 string <fmt>. The part prior to the question mark is left intact. If the
3788 request doesn't contain a question mark and the new value is not empty,
3789 then one is added at the end of the URI, followed by the new value. If
3790 a question mark was present, it will never be removed even if the value
3791 is empty. This can be used to add or remove parameters from the query
3792 string. See also "set-query" and "set-uri".
3793
3794 Example :
3795 # replace "%3D" with "=" in the query string
3796 http-request set-query %[query,regsub(%3D,=,g)]
3797
3798 - "set-uri" rewrites the request URI with the result of the evaluation of
3799 format string <fmt>. The scheme, authority, path and query string are all
3800 replaced at once. This can be used to rewrite hosts in front of proxies,
3801 or to perform complex modifications to the URI such as moving parts
3802 between the path and the query string. See also "set-path" and
3803 "set-query".
3804
Willy Tarreauf4c43c12013-06-11 17:01:13 +02003805 - "set-nice" sets the "nice" factor of the current request being processed.
3806 It only has effect against the other requests being processed at the same
3807 time. The default value is 0, unless altered by the "nice" setting on the
3808 "bind" line. The accepted range is -1024..1024. The higher the value, the
3809 nicest the request will be. Lower values will make the request more
3810 important than other ones. This can be useful to improve the speed of
3811 some requests, or lower the priority of non-important requests. Using
3812 this setting without prior experimentation can cause some major slowdown.
3813
Willy Tarreau9a355ec2013-06-11 17:45:46 +02003814 - "set-log-level" is used to change the log level of the current request
3815 when a certain condition is met. Valid levels are the 8 syslog levels
3816 (see the "log" keyword) plus the special level "silent" which disables
3817 logging for this request. This rule is not final so the last matching
3818 rule wins. This rule can be useful to disable health checks coming from
3819 another equipment.
3820
Willy Tarreau42cf39e2013-06-11 18:51:32 +02003821 - "set-tos" is used to set the TOS or DSCP field value of packets sent to
3822 the client to the value passed in <tos> on platforms which support this.
3823 This value represents the whole 8 bits of the IP TOS field, and can be
3824 expressed both in decimal or hexadecimal format (prefixed by "0x"). Note
3825 that only the 6 higher bits are used in DSCP or TOS, and the two lower
3826 bits are always 0. This can be used to adjust some routing behaviour on
3827 border routers based on some information from the request. See RFC 2474,
3828 2597, 3260 and 4594 for more information.
3829
Willy Tarreau51347ed2013-06-11 19:34:13 +02003830 - "set-mark" is used to set the Netfilter MARK on all packets sent to the
3831 client to the value passed in <mark> on platforms which support it. This
3832 value is an unsigned 32 bit value which can be matched by netfilter and
3833 by the routing table. It can be expressed both in decimal or hexadecimal
3834 format (prefixed by "0x"). This can be useful to force certain packets to
3835 take a different route (for example a cheaper network path for bulk
3836 downloads). This works on Linux kernels 2.6.32 and above and requires
3837 admin privileges.
3838
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003839 - "add-acl" is used to add a new entry into an ACL. The ACL must be loaded
3840 from a file (even a dummy empty file). The file name of the ACL to be
3841 updated is passed between parentheses. It takes one argument: <key fmt>,
3842 which follows log-format rules, to collect content of the new entry. It
3843 performs a lookup in the ACL before insertion, to avoid duplicated (or
3844 more) values. This lookup is done by a linear search and can be expensive
3845 with large lists! It is the equivalent of the "add acl" command from the
3846 stats socket, but can be triggered by an HTTP request.
3847
3848 - "del-acl" is used to delete an entry from an ACL. The ACL must be loaded
3849 from a file (even a dummy empty file). The file name of the ACL to be
3850 updated is passed between parentheses. It takes one argument: <key fmt>,
3851 which follows log-format rules, to collect content of the entry to delete.
3852 It is the equivalent of the "del acl" command from the stats socket, but
3853 can be triggered by an HTTP request.
3854
3855 - "del-map" is used to delete an entry from a MAP. The MAP must be loaded
3856 from a file (even a dummy empty file). The file name of the MAP to be
3857 updated is passed between parentheses. It takes one argument: <key fmt>,
3858 which follows log-format rules, to collect content of the entry to delete.
3859 It takes one argument: "file name" It is the equivalent of the "del map"
3860 command from the stats socket, but can be triggered by an HTTP request.
3861
3862 - "set-map" is used to add a new entry into a MAP. The MAP must be loaded
3863 from a file (even a dummy empty file). The file name of the MAP to be
3864 updated is passed between parentheses. It takes 2 arguments: <key fmt>,
3865 which follows log-format rules, used to collect MAP key, and <value fmt>,
3866 which follows log-format rules, used to collect content for the new entry.
3867 It performs a lookup in the MAP before insertion, to avoid duplicated (or
3868 more) values. This lookup is done by a linear search and can be expensive
3869 with large lists! It is the equivalent of the "set map" command from the
3870 stats socket, but can be triggered by an HTTP request.
3871
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02003872 - capture <sample> [ len <length> | id <id> ] :
Willy Tarreaua9083d02015-05-08 15:27:59 +02003873 captures sample expression <sample> from the request buffer, and converts
3874 it to a string of at most <len> characters. The resulting string is
3875 stored into the next request "capture" slot, so it will possibly appear
3876 next to some captured HTTP headers. It will then automatically appear in
3877 the logs, and it will be possible to extract it using sample fetch rules
3878 to feed it into headers or anything. The length should be limited given
3879 that this size will be allocated for each capture during the whole
3880 session life. Please check section 7.3 (Fetching samples) and "capture
3881 request header" for more information.
3882
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02003883 If the keyword "id" is used instead of "len", the action tries to store
3884 the captured string in a previously declared capture slot. This is useful
3885 to run captures in backends. The slot id can be declared by a previous
3886 directive "http-request capture" or with the "declare capture" keyword.
Baptiste Assmanne9544932015-11-03 23:31:35 +01003887 If the slot <id> doesn't exist, then HAProxy fails parsing the
3888 configuration to prevent unexpected behavior at run time.
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02003889
Willy Tarreau09448f72014-06-25 18:12:15 +02003890 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
3891 enables tracking of sticky counters from current request. These rules
3892 do not stop evaluation and do not change default action. Three sets of
3893 counters may be simultaneously tracked by the same connection. The first
3894 "track-sc0" rule executed enables tracking of the counters of the
3895 specified table as the first set. The first "track-sc1" rule executed
3896 enables tracking of the counters of the specified table as the second
3897 set. The first "track-sc2" rule executed enables tracking of the
3898 counters of the specified table as the third set. It is a recommended
3899 practice to use the first set of counters for the per-frontend counters
3900 and the second set for the per-backend ones. But this is just a
3901 guideline, all may be used everywhere.
3902
3903 These actions take one or two arguments :
3904 <key> is mandatory, and is a sample expression rule as described
3905 in section 7.3. It describes what elements of the incoming
3906 request or connection will be analysed, extracted, combined,
3907 and used to select which table entry to update the counters.
3908
3909 <table> is an optional table to be used instead of the default one,
3910 which is the stick-table declared in the current proxy. All
3911 the counters for the matches and updates for the key will
3912 then be performed in that table until the session ends.
3913
3914 Once a "track-sc*" rule is executed, the key is looked up in the table
3915 and if it is not found, an entry is allocated for it. Then a pointer to
3916 that entry is kept during all the session's life, and this entry's
3917 counters are updated as often as possible, every time the session's
3918 counters are updated, and also systematically when the session ends.
3919 Counters are only updated for events that happen after the tracking has
3920 been started. As an exception, connection counters and request counters
3921 are systematically updated so that they reflect useful information.
3922
3923 If the entry tracks concurrent connection counters, one connection is
3924 counted for as long as the entry is tracked, and the entry will not
3925 expire during that time. Tracking counters also provides a performance
3926 advantage over just checking the keys, because only one table lookup is
3927 performed for all ACL checks that make use of it.
3928
Thierry FOURNIER236657b2015-08-19 08:25:14 +02003929 - sc-set-gpt0(<sc-id>) <int> :
3930 This action sets the GPT0 tag according to the sticky counter designated
3931 by <sc-id> and the value of <int>. The expected result is a boolean. If
3932 an error occurs, this action silently fails and the actions evaluation
3933 continues.
3934
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02003935 - sc-inc-gpc0(<sc-id>):
3936 This action increments the GPC0 counter according with the sticky counter
3937 designated by <sc-id>. If an error occurs, this action silently fails and
3938 the actions evaluation continues.
3939
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02003940 - set-var(<var-name>) <expr> :
3941 Is used to set the contents of a variable. The variable is declared
3942 inline.
3943
Daniel Schneller0b547052016-03-21 20:46:57 +01003944 <var-name> The name of the variable starts with an indication about
3945 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +01003946 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +01003947 "sess" : the variable is shared with the whole session
3948 "txn" : the variable is shared with the transaction
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02003949 (request and response)
Daniel Schneller0b547052016-03-21 20:46:57 +01003950 "req" : the variable is shared only during request
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02003951 processing
Daniel Schneller0b547052016-03-21 20:46:57 +01003952 "res" : the variable is shared only during response
3953 processing
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02003954 This prefix is followed by a name. The separator is a '.'.
Daniel Schneller0b547052016-03-21 20:46:57 +01003955 The name may only contain characters 'a-z', 'A-Z', '0-9'
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02003956 and '_'.
3957
3958 <expr> Is a standard HAProxy expression formed by a sample-fetch
3959 followed by some converters.
3960
3961 Example:
3962
3963 http-request set-var(req.my_var) req.fhdr(user-agent),lower
3964
Adis Nezirovic2fbcafc2015-07-06 15:44:30 +02003965 - set-src <expr> :
3966 Is used to set the source IP address to the value of specified
3967 expression. Useful when a proxy in front of HAProxy rewrites source IP,
3968 but provides the correct IP in a HTTP header; or you want to mask
3969 source IP for privacy.
3970
3971 <expr> Is a standard HAProxy expression formed by a sample-fetch
3972 followed by some converters.
3973
3974 Example:
3975
3976 http-request set-src hdr(x-forwarded-for)
3977 http-request set-src src,ipmask(24)
3978
Willy Tarreau00005ce2016-10-21 15:07:45 +02003979 When possible, set-src preserves the original source port as long as the
3980 address family allows it, otherwise the source port is set to 0.
Adis Nezirovic2fbcafc2015-07-06 15:44:30 +02003981
William Lallemand44be6402016-05-25 01:51:35 +02003982 - set-src-port <expr> :
3983 Is used to set the source port address to the value of specified
3984 expression.
3985
3986 <expr> Is a standard HAProxy expression formed by a sample-fetch
3987 followed by some converters.
3988
3989 Example:
3990
3991 http-request set-src-port hdr(x-port)
3992 http-request set-src-port int(4000)
3993
Willy Tarreau00005ce2016-10-21 15:07:45 +02003994 When possible, set-src-port preserves the original source address as long
3995 as the address family supports a port, otherwise it forces the source
3996 address to IPv4 "0.0.0.0" before rewriting the port.
William Lallemand44be6402016-05-25 01:51:35 +02003997
William Lallemand13e9b0c2016-05-25 02:34:07 +02003998 - set-dst <expr> :
3999 Is used to set the destination IP address to the value of specified
4000 expression. Useful when a proxy in front of HAProxy rewrites destination
4001 IP, but provides the correct IP in a HTTP header; or you want to mask
4002 the IP for privacy. If you want to connect to the new address/port, use
4003 '0.0.0.0:0' as a server address in the backend.
4004
4005 <expr> Is a standard HAProxy expression formed by a sample-fetch
4006 followed by some converters.
4007
4008 Example:
4009
4010 http-request set-dst hdr(x-dst)
4011 http-request set-dst dst,ipmask(24)
4012
Willy Tarreau00005ce2016-10-21 15:07:45 +02004013 When possible, set-dst preserves the original destination port as long as
4014 the address family allows it, otherwise the destination port is set to 0.
4015
William Lallemand13e9b0c2016-05-25 02:34:07 +02004016 - set-dst-port <expr> :
4017 Is used to set the destination port address to the value of specified
4018 expression. If you want to connect to the new address/port, use
4019 '0.0.0.0:0' as a server address in the backend.
4020
4021 <expr> Is a standard HAProxy expression formed by a sample-fetch
4022 followed by some converters.
4023
4024 Example:
4025
4026 http-request set-dst-port hdr(x-port)
4027 http-request set-dst-port int(4000)
4028
Willy Tarreau00005ce2016-10-21 15:07:45 +02004029 When possible, set-dst-port preserves the original destination address as
4030 long as the address family supports a port, otherwise it forces the
4031 destination address to IPv4 "0.0.0.0" before rewriting the port.
4032
Willy Tarreau2d392c22015-08-24 01:43:45 +02004033 - "silent-drop" : this stops the evaluation of the rules and makes the
4034 client-facing connection suddenly disappear using a system-dependant way
4035 that tries to prevent the client from being notified. The effect it then
4036 that the client still sees an established connection while there's none
4037 on HAProxy. The purpose is to achieve a comparable effect to "tarpit"
4038 except that it doesn't use any local resource at all on the machine
4039 running HAProxy. It can resist much higher loads than "tarpit", and slow
4040 down stronger attackers. It is important to undestand the impact of using
4041 this mechanism. All stateful equipments placed between the client and
4042 HAProxy (firewalls, proxies, load balancers) will also keep the
4043 established connection for a long time and may suffer from this action.
4044 On modern Linux systems running with enough privileges, the TCP_REPAIR
4045 socket option is used to block the emission of a TCP reset. On other
4046 systems, the socket's TTL is reduced to 1 so that the TCP reset doesn't
4047 pass the first router, though it's still delivered to local networks. Do
4048 not use it unless you fully understand how it works.
4049
Willy Tarreau20b0de52012-12-24 15:45:22 +01004050 There is no limit to the number of http-request statements per instance.
4051
4052 It is important to know that http-request rules are processed very early in
4053 the HTTP processing, just after "block" rules and before "reqdel" or "reqrep"
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08004054 or "reqadd" rules. That way, headers added by "add-header"/"set-header" are
4055 visible by almost all further ACL rules.
4056
4057 Using "reqadd"/"reqdel"/"reqrep" to manipulate request headers is discouraged
4058 in newer versions (>= 1.5). But if you need to use regular expression to
4059 delete headers, you can still use "reqdel". Also please use
4060 "http-request deny/allow/tarpit" instead of "reqdeny"/"reqpass"/"reqtarpit".
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01004061
4062 Example:
Cyril Bonté78caf842010-03-10 22:41:43 +01004063 acl nagios src 192.168.129.3
4064 acl local_net src 192.168.0.0/16
4065 acl auth_ok http_auth(L1)
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01004066
Cyril Bonté78caf842010-03-10 22:41:43 +01004067 http-request allow if nagios
4068 http-request allow if local_net auth_ok
4069 http-request auth realm Gimme if local_net auth_ok
4070 http-request deny
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01004071
Cyril Bonté78caf842010-03-10 22:41:43 +01004072 Example:
4073 acl auth_ok http_auth_group(L1) G1
Cyril Bonté78caf842010-03-10 22:41:43 +01004074 http-request auth unless auth_ok
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01004075
Willy Tarreau20b0de52012-12-24 15:45:22 +01004076 Example:
4077 http-request set-header X-Haproxy-Current-Date %T
4078 http-request set-header X-SSL %[ssl_fc]
Willy Tarreaufca42612015-08-27 17:15:05 +02004079 http-request set-header X-SSL-Session_ID %[ssl_fc_session_id,hex]
Willy Tarreau20b0de52012-12-24 15:45:22 +01004080 http-request set-header X-SSL-Client-Verify %[ssl_c_verify]
4081 http-request set-header X-SSL-Client-DN %{+Q}[ssl_c_s_dn]
4082 http-request set-header X-SSL-Client-CN %{+Q}[ssl_c_s_dn(cn)]
4083 http-request set-header X-SSL-Issuer %{+Q}[ssl_c_i_dn]
4084 http-request set-header X-SSL-Client-NotBefore %{+Q}[ssl_c_notbefore]
4085 http-request set-header X-SSL-Client-NotAfter %{+Q}[ssl_c_notafter]
4086
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004087 Example:
4088 acl key req.hdr(X-Add-Acl-Key) -m found
4089 acl add path /addacl
4090 acl del path /delacl
4091
4092 acl myhost hdr(Host) -f myhost.lst
4093
4094 http-request add-acl(myhost.lst) %[req.hdr(X-Add-Acl-Key)] if key add
4095 http-request del-acl(myhost.lst) %[req.hdr(X-Add-Acl-Key)] if key del
4096
4097 Example:
4098 acl value req.hdr(X-Value) -m found
4099 acl setmap path /setmap
4100 acl delmap path /delmap
4101
4102 use_backend bk_appli if { hdr(Host),map_str(map.lst) -m found }
4103
4104 http-request set-map(map.lst) %[src] %[req.hdr(X-Value)] if setmap value
4105 http-request del-map(map.lst) %[src] if delmap
4106
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02004107 See also : "stats http-request", section 3.4 about userlists and section 7
4108 about ACL usage.
Willy Tarreauef781042010-01-27 11:53:01 +01004109
Willy Tarreauf4c43c12013-06-11 17:01:13 +02004110http-response { allow | deny | add-header <name> <fmt> | set-nice <nice> |
Willy Tarreau51d861a2015-05-22 17:30:48 +02004111 capture <sample> id <id> | redirect <rule> |
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02004112 set-header <name> <fmt> | del-header <name> |
Sasha Pachev218f0642014-06-16 12:05:59 -06004113 replace-header <name> <regex-match> <replace-fmt> |
4114 replace-value <name> <regex-match> <replace-fmt> |
Thierry FOURNIER35d70ef2015-08-26 16:21:56 +02004115 set-status <status> |
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004116 set-log-level <level> | set-mark <mark> | set-tos <tos> |
4117 add-acl(<file name>) <key fmt> |
4118 del-acl(<file name>) <key fmt> |
4119 del-map(<file name>) <key fmt> |
Thierry FOURNIER90da1912015-03-05 11:17:06 +01004120 set-map(<file name>) <key fmt> <value fmt> |
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004121 set-var(<var-name>) <expr> |
Ruoshan Huange4edc6b2016-07-14 15:07:45 +08004122 { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] |
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02004123 sc-inc-gpc0(<sc-id>) |
Thierry FOURNIER236657b2015-08-19 08:25:14 +02004124 sc-set-gpt0(<sc-id>) <int> |
Willy Tarreau2d392c22015-08-24 01:43:45 +02004125 silent-drop |
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004126 }
Lukas Tribus2dd1d1a2013-06-19 23:34:41 +02004127 [ { if | unless } <condition> ]
Willy Tarreaue365c0b2013-06-11 16:06:12 +02004128 Access control for Layer 7 responses
4129
4130 May be used in sections: defaults | frontend | listen | backend
4131 no | yes | yes | yes
4132
4133 The http-response statement defines a set of rules which apply to layer 7
4134 processing. The rules are evaluated in their declaration order when they are
4135 met in a frontend, listen or backend section. Any rule may optionally be
4136 followed by an ACL-based condition, in which case it will only be evaluated
4137 if the condition is true. Since these rules apply on responses, the backend
4138 rules are applied first, followed by the frontend's rules.
4139
4140 The first keyword is the rule's action. Currently supported actions include :
4141 - "allow" : this stops the evaluation of the rules and lets the response
4142 pass the check. No further "http-response" rules are evaluated for the
4143 current section.
4144
4145 - "deny" : this stops the evaluation of the rules and immediately rejects
4146 the response and emits an HTTP 502 error. No further "http-response"
4147 rules are evaluated.
4148
4149 - "add-header" appends an HTTP header field whose name is specified in
4150 <name> and whose value is defined by <fmt> which follows the log-format
4151 rules (see Custom Log Format in section 8.2.4). This may be used to send
4152 a cookie to a client for example, or to pass some internal information.
4153 This rule is not final, so it is possible to add other similar rules.
4154 Note that header addition is performed immediately, so one rule might
4155 reuse the resulting header from a previous rule.
4156
4157 - "set-header" does the same as "add-header" except that the header name
4158 is first removed if it existed. This is useful when passing security
4159 information to the server, where the header must not be manipulated by
4160 external users.
4161
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02004162 - "del-header" removes all HTTP header fields whose name is specified in
4163 <name>.
4164
Sasha Pachev218f0642014-06-16 12:05:59 -06004165 - "replace-header" matches the regular expression in all occurrences of
4166 header field <name> according to <match-regex>, and replaces them with
4167 the <replace-fmt> argument. Format characters are allowed in replace-fmt
4168 and work like in <fmt> arguments in "add-header". The match is only
4169 case-sensitive. It is important to understand that this action only
4170 considers whole header lines, regardless of the number of values they
4171 may contain. This usage is suited to headers naturally containing commas
4172 in their value, such as Set-Cookie, Expires and so on.
4173
4174 Example:
4175
4176 http-response replace-header Set-Cookie (C=[^;]*);(.*) \1;ip=%bi;\2
4177
4178 applied to:
4179
4180 Set-Cookie: C=1; expires=Tue, 14-Jun-2016 01:40:45 GMT
4181
4182 outputs:
4183
4184 Set-Cookie: C=1;ip=192.168.1.20; expires=Tue, 14-Jun-2016 01:40:45 GMT
4185
4186 assuming the backend IP is 192.168.1.20.
4187
4188 - "replace-value" works like "replace-header" except that it matches the
4189 regex against every comma-delimited value of the header field <name>
4190 instead of the entire header. This is suited for all headers which are
4191 allowed to carry more than one value. An example could be the Accept
4192 header.
4193
4194 Example:
4195
4196 http-response replace-value Cache-control ^public$ private
4197
4198 applied to:
4199
4200 Cache-Control: max-age=3600, public
4201
4202 outputs:
4203
4204 Cache-Control: max-age=3600, private
4205
Thierry FOURNIER35d70ef2015-08-26 16:21:56 +02004206 - "set-status" replaces the response status code with <status> which must
4207 be an integer between 100 and 999. Note that the reason is automatically
4208 adapted to the new code.
4209
4210 Example:
4211
4212 # return "431 Request Header Fields Too Large"
4213 http-response set-status 431
4214
Willy Tarreauf4c43c12013-06-11 17:01:13 +02004215 - "set-nice" sets the "nice" factor of the current request being processed.
4216 It only has effect against the other requests being processed at the same
4217 time. The default value is 0, unless altered by the "nice" setting on the
4218 "bind" line. The accepted range is -1024..1024. The higher the value, the
4219 nicest the request will be. Lower values will make the request more
4220 important than other ones. This can be useful to improve the speed of
4221 some requests, or lower the priority of non-important requests. Using
4222 this setting without prior experimentation can cause some major slowdown.
4223
Willy Tarreau9a355ec2013-06-11 17:45:46 +02004224 - "set-log-level" is used to change the log level of the current request
4225 when a certain condition is met. Valid levels are the 8 syslog levels
4226 (see the "log" keyword) plus the special level "silent" which disables
4227 logging for this request. This rule is not final so the last matching
4228 rule wins. This rule can be useful to disable health checks coming from
4229 another equipment.
4230
Willy Tarreau42cf39e2013-06-11 18:51:32 +02004231 - "set-tos" is used to set the TOS or DSCP field value of packets sent to
4232 the client to the value passed in <tos> on platforms which support this.
4233 This value represents the whole 8 bits of the IP TOS field, and can be
4234 expressed both in decimal or hexadecimal format (prefixed by "0x"). Note
4235 that only the 6 higher bits are used in DSCP or TOS, and the two lower
4236 bits are always 0. This can be used to adjust some routing behaviour on
4237 border routers based on some information from the request. See RFC 2474,
4238 2597, 3260 and 4594 for more information.
4239
Willy Tarreau51347ed2013-06-11 19:34:13 +02004240 - "set-mark" is used to set the Netfilter MARK on all packets sent to the
4241 client to the value passed in <mark> on platforms which support it. This
4242 value is an unsigned 32 bit value which can be matched by netfilter and
4243 by the routing table. It can be expressed both in decimal or hexadecimal
4244 format (prefixed by "0x"). This can be useful to force certain packets to
4245 take a different route (for example a cheaper network path for bulk
4246 downloads). This works on Linux kernels 2.6.32 and above and requires
4247 admin privileges.
4248
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004249 - "add-acl" is used to add a new entry into an ACL. The ACL must be loaded
4250 from a file (even a dummy empty file). The file name of the ACL to be
4251 updated is passed between parentheses. It takes one argument: <key fmt>,
4252 which follows log-format rules, to collect content of the new entry. It
4253 performs a lookup in the ACL before insertion, to avoid duplicated (or
4254 more) values. This lookup is done by a linear search and can be expensive
4255 with large lists! It is the equivalent of the "add acl" command from the
4256 stats socket, but can be triggered by an HTTP response.
4257
4258 - "del-acl" is used to delete an entry from an ACL. The ACL must be loaded
4259 from a file (even a dummy empty file). The file name of the ACL to be
4260 updated is passed between parentheses. It takes one argument: <key fmt>,
4261 which follows log-format rules, to collect content of the entry to delete.
4262 It is the equivalent of the "del acl" command from the stats socket, but
4263 can be triggered by an HTTP response.
4264
4265 - "del-map" is used to delete an entry from a MAP. The MAP must be loaded
4266 from a file (even a dummy empty file). The file name of the MAP to be
4267 updated is passed between parentheses. It takes one argument: <key fmt>,
4268 which follows log-format rules, to collect content of the entry to delete.
4269 It takes one argument: "file name" It is the equivalent of the "del map"
4270 command from the stats socket, but can be triggered by an HTTP response.
4271
4272 - "set-map" is used to add a new entry into a MAP. The MAP must be loaded
4273 from a file (even a dummy empty file). The file name of the MAP to be
4274 updated is passed between parentheses. It takes 2 arguments: <key fmt>,
4275 which follows log-format rules, used to collect MAP key, and <value fmt>,
4276 which follows log-format rules, used to collect content for the new entry.
4277 It performs a lookup in the MAP before insertion, to avoid duplicated (or
4278 more) values. This lookup is done by a linear search and can be expensive
4279 with large lists! It is the equivalent of the "set map" command from the
4280 stats socket, but can be triggered by an HTTP response.
4281
Thierry FOURNIERe80fada2015-05-26 18:06:31 +02004282 - capture <sample> id <id> :
4283 captures sample expression <sample> from the response buffer, and converts
4284 it to a string. The resulting string is stored into the next request
4285 "capture" slot, so it will possibly appear next to some captured HTTP
4286 headers. It will then automatically appear in the logs, and it will be
4287 possible to extract it using sample fetch rules to feed it into headers or
4288 anything. Please check section 7.3 (Fetching samples) and "capture
4289 response header" for more information.
4290
4291 The keyword "id" is the id of the capture slot which is used for storing
4292 the string. The capture slot must be defined in an associated frontend.
4293 This is useful to run captures in backends. The slot id can be declared by
4294 a previous directive "http-response capture" or with the "declare capture"
4295 keyword.
Baptiste Assmanne9544932015-11-03 23:31:35 +01004296 If the slot <id> doesn't exist, then HAProxy fails parsing the
4297 configuration to prevent unexpected behavior at run time.
Thierry FOURNIERe80fada2015-05-26 18:06:31 +02004298
Willy Tarreau51d861a2015-05-22 17:30:48 +02004299 - "redirect" : this performs an HTTP redirection based on a redirect rule.
4300 This supports a format string similarly to "http-request redirect" rules,
4301 with the exception that only the "location" type of redirect is possible
4302 on the response. See the "redirect" keyword for the rule's syntax. When
4303 a redirect rule is applied during a response, connections to the server
4304 are closed so that no data can be forwarded from the server to the client.
4305
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004306 - set-var(<var-name>) expr:
4307 Is used to set the contents of a variable. The variable is declared
4308 inline.
4309
Daniel Schneller0b547052016-03-21 20:46:57 +01004310 <var-name> The name of the variable starts with an indication about
4311 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +01004312 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +01004313 "sess" : the variable is shared with the whole session
4314 "txn" : the variable is shared with the transaction
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004315 (request and response)
Daniel Schneller0b547052016-03-21 20:46:57 +01004316 "req" : the variable is shared only during request
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004317 processing
Daniel Schneller0b547052016-03-21 20:46:57 +01004318 "res" : the variable is shared only during response
4319 processing
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004320 This prefix is followed by a name. The separator is a '.'.
Christopher Fauletb71557a2016-10-31 10:49:03 +01004321 The name may only contain characters 'a-z', 'A-Z', '0-9',
4322 '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004323
4324 <expr> Is a standard HAProxy expression formed by a sample-fetch
4325 followed by some converters.
4326
4327 Example:
4328
4329 http-response set-var(sess.last_redir) res.hdr(location)
4330
Ruoshan Huange4edc6b2016-07-14 15:07:45 +08004331 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
4332 enables tracking of sticky counters from current response. Please refer to
4333 "http-request track-sc" for a complete description. The only difference
4334 from "http-request track-sc" is the <key> sample expression can only make
4335 use of samples in response (eg. res.*, status etc.) and samples below
4336 Layer 6 (eg. ssl related samples, see section 7.3.4). If the sample is
4337 not supported, haproxy will fail and warn while parsing the config.
4338
Thierry FOURNIER236657b2015-08-19 08:25:14 +02004339 - sc-set-gpt0(<sc-id>) <int> :
4340 This action sets the GPT0 tag according to the sticky counter designated
4341 by <sc-id> and the value of <int>. The expected result is a boolean. If
4342 an error occurs, this action silently fails and the actions evaluation
4343 continues.
4344
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02004345 - sc-inc-gpc0(<sc-id>):
4346 This action increments the GPC0 counter according with the sticky counter
4347 designated by <sc-id>. If an error occurs, this action silently fails and
4348 the actions evaluation continues.
4349
Willy Tarreau2d392c22015-08-24 01:43:45 +02004350 - "silent-drop" : this stops the evaluation of the rules and makes the
4351 client-facing connection suddenly disappear using a system-dependant way
4352 that tries to prevent the client from being notified. The effect it then
4353 that the client still sees an established connection while there's none
4354 on HAProxy. The purpose is to achieve a comparable effect to "tarpit"
4355 except that it doesn't use any local resource at all on the machine
4356 running HAProxy. It can resist much higher loads than "tarpit", and slow
4357 down stronger attackers. It is important to undestand the impact of using
4358 this mechanism. All stateful equipments placed between the client and
4359 HAProxy (firewalls, proxies, load balancers) will also keep the
4360 established connection for a long time and may suffer from this action.
4361 On modern Linux systems running with enough privileges, the TCP_REPAIR
4362 socket option is used to block the emission of a TCP reset. On other
4363 systems, the socket's TTL is reduced to 1 so that the TCP reset doesn't
4364 pass the first router, though it's still delivered to local networks. Do
4365 not use it unless you fully understand how it works.
4366
Willy Tarreaue365c0b2013-06-11 16:06:12 +02004367 There is no limit to the number of http-response statements per instance.
4368
Godbach09250262013-07-02 01:19:15 +08004369 It is important to know that http-response rules are processed very early in
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08004370 the HTTP processing, before "rspdel" or "rsprep" or "rspadd" rules. That way,
4371 headers added by "add-header"/"set-header" are visible by almost all further ACL
Willy Tarreaue365c0b2013-06-11 16:06:12 +02004372 rules.
4373
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08004374 Using "rspadd"/"rspdel"/"rsprep" to manipulate request headers is discouraged
4375 in newer versions (>= 1.5). But if you need to use regular expression to
4376 delete headers, you can still use "rspdel". Also please use
4377 "http-response deny" instead of "rspdeny".
4378
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004379 Example:
4380 acl key_acl res.hdr(X-Acl-Key) -m found
4381
4382 acl myhost hdr(Host) -f myhost.lst
4383
4384 http-response add-acl(myhost.lst) %[res.hdr(X-Acl-Key)] if key_acl
4385 http-response del-acl(myhost.lst) %[res.hdr(X-Acl-Key)] if key_acl
4386
4387 Example:
4388 acl value res.hdr(X-Value) -m found
4389
4390 use_backend bk_appli if { hdr(Host),map_str(map.lst) -m found }
4391
4392 http-response set-map(map.lst) %[src] %[res.hdr(X-Value)] if value
4393 http-response del-map(map.lst) %[src] if ! value
4394
Willy Tarreaue365c0b2013-06-11 16:06:12 +02004395 See also : "http-request", section 3.4 about userlists and section 7 about
4396 ACL usage.
4397
Baptiste Assmann5ecb77f2013-10-06 23:24:13 +02004398
Willy Tarreau30631952015-08-06 15:05:24 +02004399http-reuse { never | safe | aggressive | always }
4400 Declare how idle HTTP connections may be shared between requests
4401
4402 May be used in sections: defaults | frontend | listen | backend
4403 yes | no | yes | yes
4404
4405 By default, a connection established between haproxy and the backend server
4406 belongs to the session that initiated it. The downside is that between the
4407 response and the next request, the connection remains idle and is not used.
4408 In many cases for performance reasons it is desirable to make it possible to
4409 reuse these idle connections to serve other requests from different sessions.
4410 This directive allows to tune this behaviour.
4411
4412 The argument indicates the desired connection reuse strategy :
4413
4414 - "never" : idle connections are never shared between sessions. This is
4415 the default choice. It may be enforced to cancel a different
4416 strategy inherited from a defaults section or for
4417 troubleshooting. For example, if an old bogus application
4418 considers that multiple requests over the same connection come
4419 from the same client and it is not possible to fix the
4420 application, it may be desirable to disable connection sharing
4421 in a single backend. An example of such an application could
4422 be an old haproxy using cookie insertion in tunnel mode and
4423 not checking any request past the first one.
4424
4425 - "safe" : this is the recommended strategy. The first request of a
4426 session is always sent over its own connection, and only
4427 subsequent requests may be dispatched over other existing
4428 connections. This ensures that in case the server closes the
4429 connection when the request is being sent, the browser can
4430 decide to silently retry it. Since it is exactly equivalent to
4431 regular keep-alive, there should be no side effects.
4432
4433 - "aggressive" : this mode may be useful in webservices environments where
4434 all servers are not necessarily known and where it would be
4435 appreciable to deliver most first requests over existing
4436 connections. In this case, first requests are only delivered
4437 over existing connections that have been reused at least once,
4438 proving that the server correctly supports connection reuse.
4439 It should only be used when it's sure that the client can
4440 retry a failed request once in a while and where the benefit
4441 of aggressive connection reuse significantly outweights the
4442 downsides of rare connection failures.
4443
4444 - "always" : this mode is only recommended when the path to the server is
4445 known for never breaking existing connections quickly after
4446 releasing them. It allows the first request of a session to be
4447 sent to an existing connection. This can provide a significant
4448 performance increase over the "safe" strategy when the backend
4449 is a cache farm, since such components tend to show a
4450 consistent behaviour and will benefit from the connection
4451 sharing. It is recommended that the "http-keep-alive" timeout
4452 remains low in this mode so that no dead connections remain
4453 usable. In most cases, this will lead to the same performance
4454 gains as "aggressive" but with more risks. It should only be
4455 used when it improves the situation over "aggressive".
4456
4457 When http connection sharing is enabled, a great care is taken to respect the
4458 connection properties and compatiblities. Specifically :
4459 - connections made with "usesrc" followed by a client-dependant value
4460 ("client", "clientip", "hdr_ip") are marked private and never shared ;
4461
4462 - connections sent to a server with a TLS SNI extension are marked private
4463 and are never shared ;
4464
4465 - connections receiving a status code 401 or 407 expect some authentication
4466 to be sent in return. Due to certain bogus authentication schemes (such
4467 as NTLM) relying on the connection, these connections are marked private
4468 and are never shared ;
4469
4470 No connection pool is involved, once a session dies, the last idle connection
4471 it was attached to is deleted at the same time. This ensures that connections
4472 may not last after all sessions are closed.
4473
4474 Note: connection reuse improves the accuracy of the "server maxconn" setting,
4475 because almost no new connection will be established while idle connections
4476 remain available. This is particularly true with the "always" strategy.
4477
4478 See also : "option http-keep-alive", "server maxconn"
4479
4480
Mark Lamourinec2247f02012-01-04 13:02:01 -05004481http-send-name-header [<header>]
4482 Add the server name to a request. Use the header string given by <header>
4483
4484 May be used in sections: defaults | frontend | listen | backend
4485 yes | no | yes | yes
4486
4487 Arguments :
4488
4489 <header> The header string to use to send the server name
4490
4491 The "http-send-name-header" statement causes the name of the target
4492 server to be added to the headers of an HTTP request. The name
4493 is added with the header string proved.
4494
4495 See also : "server"
4496
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01004497id <value>
Willy Tarreau53fb4ae2009-10-04 23:04:08 +02004498 Set a persistent ID to a proxy.
4499 May be used in sections : defaults | frontend | listen | backend
4500 no | yes | yes | yes
4501 Arguments : none
4502
4503 Set a persistent ID for the proxy. This ID must be unique and positive.
4504 An unused ID will automatically be assigned if unset. The first assigned
4505 value will be 1. This ID is currently only returned in statistics.
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01004506
4507
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004508ignore-persist { if | unless } <condition>
4509 Declare a condition to ignore persistence
4510 May be used in sections: defaults | frontend | listen | backend
4511 no | yes | yes | yes
4512
4513 By default, when cookie persistence is enabled, every requests containing
4514 the cookie are unconditionally persistent (assuming the target server is up
4515 and running).
4516
4517 The "ignore-persist" statement allows one to declare various ACL-based
4518 conditions which, when met, will cause a request to ignore persistence.
4519 This is sometimes useful to load balance requests for static files, which
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03004520 often don't require persistence. This can also be used to fully disable
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004521 persistence for a specific User-Agent (for example, some web crawler bots).
4522
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004523 The persistence is ignored when an "if" condition is met, or unless an
4524 "unless" condition is met.
4525
4526 See also : "force-persist", "cookie", and section 7 about ACL usage.
4527
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004528load-server-state-from-file { global | local | none }
4529 Allow seamless reload of HAProxy
4530 May be used in sections: defaults | frontend | listen | backend
4531 yes | no | yes | yes
4532
4533 This directive points HAProxy to a file where server state from previous
4534 running process has been saved. That way, when starting up, before handling
4535 traffic, the new process can apply old states to servers exactly has if no
4536 reload occured. The purpose of the "load-server-state-from-file" directive is
4537 to tell haproxy which file to use. For now, only 2 arguments to either prevent
4538 loading state or load states from a file containing all backends and servers.
4539 The state file can be generated by running the command "show servers state"
4540 over the stats socket and redirect output.
4541
4542 The format of the file is versionned and is very specific. To understand it,
4543 please read the documentation of the "show servers state" command (chapter
Kevin Decherf949c7202015-10-13 23:26:44 +02004544 9.2 of Management Guide).
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004545
4546 Arguments:
4547 global load the content of the file pointed by the global directive
4548 named "server-state-file".
4549
4550 local load the content of the file pointed by the directive
4551 "server-state-file-name" if set. If not set, then the backend
4552 name is used as a file name.
4553
4554 none don't load any stat for this backend
4555
4556 Notes:
Willy Tarreaue5a60682016-11-09 14:54:53 +01004557 - server's IP address is preserved across reloads by default, but the
4558 order can be changed thanks to the server's "init-addr" setting. This
4559 means that an IP address change performed on the CLI at run time will
4560 be preserved, and that any change to the local resolver (eg: /etc/hosts)
4561 will possibly not have any effect if the state file is in use.
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004562
4563 - server's weight is applied from previous running process unless it has
4564 has changed between previous and new configuration files.
4565
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004566 Example: Minimal configuration
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004567
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004568 global
4569 stats socket /tmp/socket
4570 server-state-file /tmp/server_state
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004571
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004572 defaults
4573 load-server-state-from-file global
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004574
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004575 backend bk
4576 server s1 127.0.0.1:22 check weight 11
4577 server s2 127.0.0.1:22 check weight 12
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004578
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004579
4580 Then one can run :
4581
4582 socat /tmp/socket - <<< "show servers state" > /tmp/server_state
4583
4584 Content of the file /tmp/server_state would be like this:
4585
4586 1
4587 # <field names skipped for the doc example>
4588 1 bk 1 s1 127.0.0.1 2 0 11 11 4 6 3 4 6 0 0
4589 1 bk 2 s2 127.0.0.1 2 0 12 12 4 6 3 4 6 0 0
4590
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004591 Example: Minimal configuration
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004592
4593 global
4594 stats socket /tmp/socket
4595 server-state-base /etc/haproxy/states
4596
4597 defaults
4598 load-server-state-from-file local
4599
4600 backend bk
4601 server s1 127.0.0.1:22 check weight 11
4602 server s2 127.0.0.1:22 check weight 12
4603
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004604
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004605 Then one can run :
4606
4607 socat /tmp/socket - <<< "show servers state bk" > /etc/haproxy/states/bk
4608
4609 Content of the file /etc/haproxy/states/bk would be like this:
4610
4611 1
4612 # <field names skipped for the doc example>
4613 1 bk 1 s1 127.0.0.1 2 0 11 11 4 6 3 4 6 0 0
4614 1 bk 2 s2 127.0.0.1 2 0 12 12 4 6 3 4 6 0 0
4615
4616 See also: "server-state-file", "server-state-file-name", and
4617 "show servers state"
4618
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004619
Willy Tarreau2769aa02007-12-27 18:26:09 +01004620log global
Willy Tarreau18324f52014-06-27 18:10:07 +02004621log <address> [len <length>] <facility> [<level> [<minlevel>]]
William Lallemand0f99e342011-10-12 17:50:54 +02004622no log
Willy Tarreau2769aa02007-12-27 18:26:09 +01004623 Enable per-instance logging of events and traffic.
4624 May be used in sections : defaults | frontend | listen | backend
4625 yes | yes | yes | yes
William Lallemand0f99e342011-10-12 17:50:54 +02004626
4627 Prefix :
4628 no should be used when the logger list must be flushed. For example,
4629 if you don't want to inherit from the default logger list. This
4630 prefix does not allow arguments.
4631
Willy Tarreau2769aa02007-12-27 18:26:09 +01004632 Arguments :
4633 global should be used when the instance's logging parameters are the
4634 same as the global ones. This is the most common usage. "global"
4635 replaces <address>, <facility> and <level> with those of the log
4636 entries found in the "global" section. Only one "log global"
4637 statement may be used per instance, and this form takes no other
4638 parameter.
4639
4640 <address> indicates where to send the logs. It takes the same format as
4641 for the "global" section's logs, and can be one of :
4642
4643 - An IPv4 address optionally followed by a colon (':') and a UDP
4644 port. If no port is specified, 514 is used by default (the
4645 standard syslog port).
4646
David du Colombier24bb5f52011-03-17 10:40:23 +01004647 - An IPv6 address followed by a colon (':') and optionally a UDP
4648 port. If no port is specified, 514 is used by default (the
4649 standard syslog port).
4650
Willy Tarreau2769aa02007-12-27 18:26:09 +01004651 - A filesystem path to a UNIX domain socket, keeping in mind
4652 considerations for chroot (be sure the path is accessible
4653 inside the chroot) and uid/gid (be sure the path is
4654 appropriately writeable).
4655
William Lallemandb2f07452015-05-12 14:27:13 +02004656 You may want to reference some environment variables in the
4657 address parameter, see section 2.3 about environment variables.
Willy Tarreaudad36a32013-03-11 01:20:04 +01004658
Willy Tarreau18324f52014-06-27 18:10:07 +02004659 <length> is an optional maximum line length. Log lines larger than this
4660 value will be truncated before being sent. The reason is that
4661 syslog servers act differently on log line length. All servers
4662 support the default value of 1024, but some servers simply drop
4663 larger lines while others do log them. If a server supports long
4664 lines, it may make sense to set this value here in order to avoid
4665 truncating long lines. Similarly, if a server drops long lines,
4666 it is preferable to truncate them before sending them. Accepted
4667 values are 80 to 65535 inclusive. The default value of 1024 is
4668 generally fine for all standard usages. Some specific cases of
4669 long captures or JSON-formated logs may require larger values.
4670
Willy Tarreau2769aa02007-12-27 18:26:09 +01004671 <facility> must be one of the 24 standard syslog facilities :
4672
4673 kern user mail daemon auth syslog lpr news
4674 uucp cron auth2 ftp ntp audit alert cron2
4675 local0 local1 local2 local3 local4 local5 local6 local7
4676
4677 <level> is optional and can be specified to filter outgoing messages. By
4678 default, all messages are sent. If a level is specified, only
4679 messages with a severity at least as important as this level
Willy Tarreauf7edefa2009-05-10 17:20:05 +02004680 will be sent. An optional minimum level can be specified. If it
4681 is set, logs emitted with a more severe level than this one will
4682 be capped to this level. This is used to avoid sending "emerg"
4683 messages on all terminals on some default syslog configurations.
4684 Eight levels are known :
Willy Tarreau2769aa02007-12-27 18:26:09 +01004685
4686 emerg alert crit err warning notice info debug
4687
William Lallemand0f99e342011-10-12 17:50:54 +02004688 It is important to keep in mind that it is the frontend which decides what to
4689 log from a connection, and that in case of content switching, the log entries
4690 from the backend will be ignored. Connections are logged at level "info".
Willy Tarreaucc6c8912009-02-22 10:53:55 +01004691
4692 However, backend log declaration define how and where servers status changes
4693 will be logged. Level "notice" will be used to indicate a server going up,
4694 "warning" will be used for termination signals and definitive service
4695 termination, and "alert" will be used for when a server goes down.
4696
4697 Note : According to RFC3164, messages are truncated to 1024 bytes before
4698 being emitted.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004699
4700 Example :
4701 log global
Willy Tarreauf7edefa2009-05-10 17:20:05 +02004702 log 127.0.0.1:514 local0 notice # only send important events
4703 log 127.0.0.1:514 local0 notice notice # same but limit output level
William Lallemandb2f07452015-05-12 14:27:13 +02004704 log "${LOCAL_SYSLOG}:514" local0 notice # send to local server
Willy Tarreaudad36a32013-03-11 01:20:04 +01004705
Willy Tarreau2769aa02007-12-27 18:26:09 +01004706
William Lallemand48940402012-01-30 16:47:22 +01004707log-format <string>
Willy Tarreaufb4e7ea2015-01-07 14:55:17 +01004708 Specifies the log format string to use for traffic logs
4709 May be used in sections: defaults | frontend | listen | backend
4710 yes | yes | yes | no
William Lallemand48940402012-01-30 16:47:22 +01004711
Willy Tarreaufb4e7ea2015-01-07 14:55:17 +01004712 This directive specifies the log format string that will be used for all logs
4713 resulting from traffic passing through the frontend using this line. If the
4714 directive is used in a defaults section, all subsequent frontends will use
4715 the same log format. Please see section 8.2.4 which covers the log format
4716 string in depth.
William Lallemand48940402012-01-30 16:47:22 +01004717
Dragan Dosen7ad31542015-09-28 17:16:47 +02004718log-format-sd <string>
4719 Specifies the RFC5424 structured-data log format string
4720 May be used in sections: defaults | frontend | listen | backend
4721 yes | yes | yes | no
4722
4723 This directive specifies the RFC5424 structured-data log format string that
4724 will be used for all logs resulting from traffic passing through the frontend
4725 using this line. If the directive is used in a defaults section, all
4726 subsequent frontends will use the same log format. Please see section 8.2.4
4727 which covers the log format string in depth.
4728
4729 See https://tools.ietf.org/html/rfc5424#section-6.3 for more information
4730 about the RFC5424 structured-data part.
4731
4732 Note : This log format string will be used only for loggers that have set
4733 log format to "rfc5424".
4734
4735 Example :
4736 log-format-sd [exampleSDID@1234\ bytes=\"%B\"\ status=\"%ST\"]
4737
4738
Willy Tarreau094af4e2015-01-07 15:03:42 +01004739log-tag <string>
4740 Specifies the log tag to use for all outgoing logs
4741 May be used in sections: defaults | frontend | listen | backend
4742 yes | yes | yes | yes
4743
4744 Sets the tag field in the syslog header to this string. It defaults to the
4745 log-tag set in the global section, otherwise the program name as launched
4746 from the command line, which usually is "haproxy". Sometimes it can be useful
4747 to differentiate between multiple processes running on the same host, or to
4748 differentiate customer instances running in the same process. In the backend,
4749 logs about servers up/down will use this tag. As a hint, it can be convenient
4750 to set a log-tag related to a hosted customer in a defaults section then put
4751 all the frontends and backends for that customer, then start another customer
4752 in a new defaults section. See also the global "log-tag" directive.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004753
Willy Tarreauc35362a2014-04-25 13:58:37 +02004754max-keep-alive-queue <value>
4755 Set the maximum server queue size for maintaining keep-alive connections
4756 May be used in sections: defaults | frontend | listen | backend
4757 yes | no | yes | yes
4758
4759 HTTP keep-alive tries to reuse the same server connection whenever possible,
4760 but sometimes it can be counter-productive, for example if a server has a lot
4761 of connections while other ones are idle. This is especially true for static
4762 servers.
4763
4764 The purpose of this setting is to set a threshold on the number of queued
4765 connections at which haproxy stops trying to reuse the same server and prefers
4766 to find another one. The default value, -1, means there is no limit. A value
4767 of zero means that keep-alive requests will never be queued. For very close
4768 servers which can be reached with a low latency and which are not sensible to
4769 breaking keep-alive, a low value is recommended (eg: local static server can
4770 use a value of 10 or less). For remote servers suffering from a high latency,
4771 higher values might be needed to cover for the latency and/or the cost of
4772 picking a different server.
4773
4774 Note that this has no impact on responses which are maintained to the same
4775 server consecutively to a 401 response. They will still go to the same server
4776 even if they have to be queued.
4777
4778 See also : "option http-server-close", "option prefer-last-server", server
4779 "maxconn" and cookie persistence.
4780
4781
Willy Tarreau2769aa02007-12-27 18:26:09 +01004782maxconn <conns>
4783 Fix the maximum number of concurrent connections on a frontend
4784 May be used in sections : defaults | frontend | listen | backend
4785 yes | yes | yes | no
4786 Arguments :
4787 <conns> is the maximum number of concurrent connections the frontend will
4788 accept to serve. Excess connections will be queued by the system
4789 in the socket's listen queue and will be served once a connection
4790 closes.
4791
4792 If the system supports it, it can be useful on big sites to raise this limit
4793 very high so that haproxy manages connection queues, instead of leaving the
4794 clients with unanswered connection attempts. This value should not exceed the
4795 global maxconn. Also, keep in mind that a connection contains two buffers
Baptiste Assmann79fb45d2016-03-06 23:34:31 +01004796 of tune.bufsize (16kB by default) each, as well as some other data resulting
4797 in about 33 kB of RAM being consumed per established connection. That means
4798 that a medium system equipped with 1GB of RAM can withstand around
4799 20000-25000 concurrent connections if properly tuned.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004800
4801 Also, when <conns> is set to large values, it is possible that the servers
4802 are not sized to accept such loads, and for this reason it is generally wise
4803 to assign them some reasonable connection limits.
4804
Vincent Bernat6341be52012-06-27 17:18:30 +02004805 By default, this value is set to 2000.
4806
Willy Tarreau2769aa02007-12-27 18:26:09 +01004807 See also : "server", global section's "maxconn", "fullconn"
4808
4809
4810mode { tcp|http|health }
4811 Set the running mode or protocol of the instance
4812 May be used in sections : defaults | frontend | listen | backend
4813 yes | yes | yes | yes
4814 Arguments :
4815 tcp The instance will work in pure TCP mode. A full-duplex connection
4816 will be established between clients and servers, and no layer 7
4817 examination will be performed. This is the default mode. It
4818 should be used for SSL, SSH, SMTP, ...
4819
4820 http The instance will work in HTTP mode. The client request will be
4821 analyzed in depth before connecting to any server. Any request
4822 which is not RFC-compliant will be rejected. Layer 7 filtering,
4823 processing and switching will be possible. This is the mode which
4824 brings HAProxy most of its value.
4825
4826 health The instance will work in "health" mode. It will just reply "OK"
Willy Tarreau82569f92012-09-27 23:48:56 +02004827 to incoming connections and close the connection. Alternatively,
4828 If the "httpchk" option is set, "HTTP/1.0 200 OK" will be sent
4829 instead. Nothing will be logged in either case. This mode is used
4830 to reply to external components health checks. This mode is
4831 deprecated and should not be used anymore as it is possible to do
4832 the same and even better by combining TCP or HTTP modes with the
4833 "monitor" keyword.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004834
Cyril Bonté108cf6e2012-04-21 23:30:29 +02004835 When doing content switching, it is mandatory that the frontend and the
4836 backend are in the same mode (generally HTTP), otherwise the configuration
4837 will be refused.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004838
Cyril Bonté108cf6e2012-04-21 23:30:29 +02004839 Example :
Willy Tarreau2769aa02007-12-27 18:26:09 +01004840 defaults http_instances
4841 mode http
4842
Cyril Bonté108cf6e2012-04-21 23:30:29 +02004843 See also : "monitor", "monitor-net"
Willy Tarreau2769aa02007-12-27 18:26:09 +01004844
Willy Tarreau0ba27502007-12-24 16:55:16 +01004845
Cyril Bontéf0c60612010-02-06 14:44:47 +01004846monitor fail { if | unless } <condition>
Willy Tarreau2769aa02007-12-27 18:26:09 +01004847 Add a condition to report a failure to a monitor HTTP request.
Willy Tarreau0ba27502007-12-24 16:55:16 +01004848 May be used in sections : defaults | frontend | listen | backend
4849 no | yes | yes | no
Willy Tarreau0ba27502007-12-24 16:55:16 +01004850 Arguments :
4851 if <cond> the monitor request will fail if the condition is satisfied,
4852 and will succeed otherwise. The condition should describe a
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01004853 combined test which must induce a failure if all conditions
Willy Tarreau0ba27502007-12-24 16:55:16 +01004854 are met, for instance a low number of servers both in a
4855 backend and its backup.
4856
4857 unless <cond> the monitor request will succeed only if the condition is
4858 satisfied, and will fail otherwise. Such a condition may be
4859 based on a test on the presence of a minimum number of active
4860 servers in a list of backends.
4861
4862 This statement adds a condition which can force the response to a monitor
4863 request to report a failure. By default, when an external component queries
4864 the URI dedicated to monitoring, a 200 response is returned. When one of the
4865 conditions above is met, haproxy will return 503 instead of 200. This is
4866 very useful to report a site failure to an external component which may base
4867 routing advertisements between multiple sites on the availability reported by
4868 haproxy. In this case, one would rely on an ACL involving the "nbsrv"
Willy Tarreauae94d4d2011-05-11 16:28:49 +02004869 criterion. Note that "monitor fail" only works in HTTP mode. Both status
4870 messages may be tweaked using "errorfile" or "errorloc" if needed.
Willy Tarreau0ba27502007-12-24 16:55:16 +01004871
4872 Example:
4873 frontend www
Willy Tarreau2769aa02007-12-27 18:26:09 +01004874 mode http
Willy Tarreau0ba27502007-12-24 16:55:16 +01004875 acl site_dead nbsrv(dynamic) lt 2
4876 acl site_dead nbsrv(static) lt 2
4877 monitor-uri /site_alive
4878 monitor fail if site_dead
4879
Willy Tarreauae94d4d2011-05-11 16:28:49 +02004880 See also : "monitor-net", "monitor-uri", "errorfile", "errorloc"
Willy Tarreau2769aa02007-12-27 18:26:09 +01004881
4882
4883monitor-net <source>
4884 Declare a source network which is limited to monitor requests
4885 May be used in sections : defaults | frontend | listen | backend
4886 yes | yes | yes | no
4887 Arguments :
4888 <source> is the source IPv4 address or network which will only be able to
4889 get monitor responses to any request. It can be either an IPv4
4890 address, a host name, or an address followed by a slash ('/')
4891 followed by a mask.
4892
4893 In TCP mode, any connection coming from a source matching <source> will cause
4894 the connection to be immediately closed without any log. This allows another
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01004895 equipment to probe the port and verify that it is still listening, without
Willy Tarreau2769aa02007-12-27 18:26:09 +01004896 forwarding the connection to a remote server.
4897
4898 In HTTP mode, a connection coming from a source matching <source> will be
4899 accepted, the following response will be sent without waiting for a request,
4900 then the connection will be closed : "HTTP/1.0 200 OK". This is normally
4901 enough for any front-end HTTP probe to detect that the service is UP and
Willy Tarreau82569f92012-09-27 23:48:56 +02004902 running without forwarding the request to a backend server. Note that this
4903 response is sent in raw format, without any transformation. This is important
4904 as it means that it will not be SSL-encrypted on SSL listeners.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004905
Willy Tarreau82569f92012-09-27 23:48:56 +02004906 Monitor requests are processed very early, just after tcp-request connection
4907 ACLs which are the only ones able to block them. These connections are short
4908 lived and never wait for any data from the client. They cannot be logged, and
4909 it is the intended purpose. They are only used to report HAProxy's health to
4910 an upper component, nothing more. Please note that "monitor fail" rules do
4911 not apply to connections intercepted by "monitor-net".
Willy Tarreau2769aa02007-12-27 18:26:09 +01004912
Willy Tarreau95cd2832010-03-04 23:36:33 +01004913 Last, please note that only one "monitor-net" statement can be specified in
4914 a frontend. If more than one is found, only the last one will be considered.
Cyril Bonté108cf6e2012-04-21 23:30:29 +02004915
Willy Tarreau2769aa02007-12-27 18:26:09 +01004916 Example :
4917 # addresses .252 and .253 are just probing us.
4918 frontend www
4919 monitor-net 192.168.0.252/31
4920
4921 See also : "monitor fail", "monitor-uri"
4922
4923
4924monitor-uri <uri>
4925 Intercept a URI used by external components' monitor requests
4926 May be used in sections : defaults | frontend | listen | backend
4927 yes | yes | yes | no
4928 Arguments :
4929 <uri> is the exact URI which we want to intercept to return HAProxy's
4930 health status instead of forwarding the request.
4931
4932 When an HTTP request referencing <uri> will be received on a frontend,
4933 HAProxy will not forward it nor log it, but instead will return either
4934 "HTTP/1.0 200 OK" or "HTTP/1.0 503 Service unavailable", depending on failure
4935 conditions defined with "monitor fail". This is normally enough for any
4936 front-end HTTP probe to detect that the service is UP and running without
4937 forwarding the request to a backend server. Note that the HTTP method, the
4938 version and all headers are ignored, but the request must at least be valid
4939 at the HTTP level. This keyword may only be used with an HTTP-mode frontend.
4940
4941 Monitor requests are processed very early. It is not possible to block nor
4942 divert them using ACLs. They cannot be logged either, and it is the intended
4943 purpose. They are only used to report HAProxy's health to an upper component,
4944 nothing more. However, it is possible to add any number of conditions using
4945 "monitor fail" and ACLs so that the result can be adjusted to whatever check
4946 can be imagined (most often the number of available servers in a backend).
4947
4948 Example :
4949 # Use /haproxy_test to report haproxy's status
4950 frontend www
4951 mode http
4952 monitor-uri /haproxy_test
4953
4954 See also : "monitor fail", "monitor-net"
4955
Willy Tarreau0ba27502007-12-24 16:55:16 +01004956
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004957option abortonclose
4958no option abortonclose
4959 Enable or disable early dropping of aborted requests pending in queues.
4960 May be used in sections : defaults | frontend | listen | backend
4961 yes | no | yes | yes
4962 Arguments : none
4963
4964 In presence of very high loads, the servers will take some time to respond.
4965 The per-instance connection queue will inflate, and the response time will
4966 increase respective to the size of the queue times the average per-session
4967 response time. When clients will wait for more than a few seconds, they will
Willy Tarreau198a7442008-01-17 12:05:32 +01004968 often hit the "STOP" button on their browser, leaving a useless request in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004969 the queue, and slowing down other users, and the servers as well, because the
4970 request will eventually be served, then aborted at the first error
4971 encountered while delivering the response.
4972
4973 As there is no way to distinguish between a full STOP and a simple output
4974 close on the client side, HTTP agents should be conservative and consider
4975 that the client might only have closed its output channel while waiting for
4976 the response. However, this introduces risks of congestion when lots of users
4977 do the same, and is completely useless nowadays because probably no client at
4978 all will close the session while waiting for the response. Some HTTP agents
Willy Tarreaud72758d2010-01-12 10:42:19 +01004979 support this behaviour (Squid, Apache, HAProxy), and others do not (TUX, most
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004980 hardware-based load balancers). So the probability for a closed input channel
Willy Tarreau198a7442008-01-17 12:05:32 +01004981 to represent a user hitting the "STOP" button is close to 100%, and the risk
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004982 of being the single component to break rare but valid traffic is extremely
4983 low, which adds to the temptation to be able to abort a session early while
4984 still not served and not pollute the servers.
4985
4986 In HAProxy, the user can choose the desired behaviour using the option
4987 "abortonclose". By default (without the option) the behaviour is HTTP
4988 compliant and aborted requests will be served. But when the option is
4989 specified, a session with an incoming channel closed will be aborted while
4990 it is still possible, either pending in the queue for a connection slot, or
4991 during the connection establishment if the server has not yet acknowledged
4992 the connection request. This considerably reduces the queue size and the load
4993 on saturated servers when users are tempted to click on STOP, which in turn
Willy Tarreaud72758d2010-01-12 10:42:19 +01004994 reduces the response time for other users.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004995
4996 If this option has been enabled in a "defaults" section, it can be disabled
4997 in a specific instance by prepending the "no" keyword before it.
4998
4999 See also : "timeout queue" and server's "maxconn" and "maxqueue" parameters
5000
5001
Willy Tarreau4076a152009-04-02 15:18:36 +02005002option accept-invalid-http-request
5003no option accept-invalid-http-request
5004 Enable or disable relaxing of HTTP request parsing
5005 May be used in sections : defaults | frontend | listen | backend
5006 yes | yes | yes | no
5007 Arguments : none
5008
Willy Tarreau91852eb2015-05-01 13:26:00 +02005009 By default, HAProxy complies with RFC7230 in terms of message parsing. This
Willy Tarreau4076a152009-04-02 15:18:36 +02005010 means that invalid characters in header names are not permitted and cause an
5011 error to be returned to the client. This is the desired behaviour as such
5012 forbidden characters are essentially used to build attacks exploiting server
5013 weaknesses, and bypass security filtering. Sometimes, a buggy browser or
5014 server will emit invalid header names for whatever reason (configuration,
5015 implementation) and the issue will not be immediately fixed. In such a case,
5016 it is possible to relax HAProxy's header name parser to accept any character
Willy Tarreau422246e2012-01-07 23:54:13 +01005017 even if that does not make sense, by specifying this option. Similarly, the
5018 list of characters allowed to appear in a URI is well defined by RFC3986, and
5019 chars 0-31, 32 (space), 34 ('"'), 60 ('<'), 62 ('>'), 92 ('\'), 94 ('^'), 96
5020 ('`'), 123 ('{'), 124 ('|'), 125 ('}'), 127 (delete) and anything above are
5021 not allowed at all. Haproxy always blocks a number of them (0..32, 127). The
Willy Tarreau91852eb2015-05-01 13:26:00 +02005022 remaining ones are blocked by default unless this option is enabled. This
Willy Tarreau13317662015-05-01 13:47:08 +02005023 option also relaxes the test on the HTTP version, it allows HTTP/0.9 requests
5024 to pass through (no version specified) and multiple digits for both the major
5025 and the minor version.
Willy Tarreau4076a152009-04-02 15:18:36 +02005026
5027 This option should never be enabled by default as it hides application bugs
5028 and open security breaches. It should only be deployed after a problem has
5029 been confirmed.
5030
5031 When this option is enabled, erroneous header names will still be accepted in
5032 requests, but the complete request will be captured in order to permit later
Willy Tarreau422246e2012-01-07 23:54:13 +01005033 analysis using the "show errors" request on the UNIX stats socket. Similarly,
5034 requests containing invalid chars in the URI part will be logged. Doing this
Willy Tarreau4076a152009-04-02 15:18:36 +02005035 also helps confirming that the issue has been solved.
5036
5037 If this option has been enabled in a "defaults" section, it can be disabled
5038 in a specific instance by prepending the "no" keyword before it.
5039
5040 See also : "option accept-invalid-http-response" and "show errors" on the
5041 stats socket.
5042
5043
5044option accept-invalid-http-response
5045no option accept-invalid-http-response
5046 Enable or disable relaxing of HTTP response parsing
5047 May be used in sections : defaults | frontend | listen | backend
5048 yes | no | yes | yes
5049 Arguments : none
5050
Willy Tarreau91852eb2015-05-01 13:26:00 +02005051 By default, HAProxy complies with RFC7230 in terms of message parsing. This
Willy Tarreau4076a152009-04-02 15:18:36 +02005052 means that invalid characters in header names are not permitted and cause an
5053 error to be returned to the client. This is the desired behaviour as such
5054 forbidden characters are essentially used to build attacks exploiting server
5055 weaknesses, and bypass security filtering. Sometimes, a buggy browser or
5056 server will emit invalid header names for whatever reason (configuration,
5057 implementation) and the issue will not be immediately fixed. In such a case,
5058 it is possible to relax HAProxy's header name parser to accept any character
Willy Tarreau91852eb2015-05-01 13:26:00 +02005059 even if that does not make sense, by specifying this option. This option also
5060 relaxes the test on the HTTP version format, it allows multiple digits for
5061 both the major and the minor version.
Willy Tarreau4076a152009-04-02 15:18:36 +02005062
5063 This option should never be enabled by default as it hides application bugs
5064 and open security breaches. It should only be deployed after a problem has
5065 been confirmed.
5066
5067 When this option is enabled, erroneous header names will still be accepted in
5068 responses, but the complete response will be captured in order to permit
5069 later analysis using the "show errors" request on the UNIX stats socket.
5070 Doing this also helps confirming that the issue has been solved.
5071
5072 If this option has been enabled in a "defaults" section, it can be disabled
5073 in a specific instance by prepending the "no" keyword before it.
5074
5075 See also : "option accept-invalid-http-request" and "show errors" on the
5076 stats socket.
5077
5078
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005079option allbackups
5080no option allbackups
5081 Use either all backup servers at a time or only the first one
5082 May be used in sections : defaults | frontend | listen | backend
5083 yes | no | yes | yes
5084 Arguments : none
5085
5086 By default, the first operational backup server gets all traffic when normal
5087 servers are all down. Sometimes, it may be preferred to use multiple backups
5088 at once, because one will not be enough. When "option allbackups" is enabled,
5089 the load balancing will be performed among all backup servers when all normal
5090 ones are unavailable. The same load balancing algorithm will be used and the
5091 servers' weights will be respected. Thus, there will not be any priority
5092 order between the backup servers anymore.
5093
5094 This option is mostly used with static server farms dedicated to return a
5095 "sorry" page when an application is completely offline.
5096
5097 If this option has been enabled in a "defaults" section, it can be disabled
5098 in a specific instance by prepending the "no" keyword before it.
5099
5100
5101option checkcache
5102no option checkcache
Godbach7056a352013-12-11 20:01:07 +08005103 Analyze all server responses and block responses with cacheable cookies
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005104 May be used in sections : defaults | frontend | listen | backend
5105 yes | no | yes | yes
5106 Arguments : none
5107
5108 Some high-level frameworks set application cookies everywhere and do not
5109 always let enough control to the developer to manage how the responses should
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005110 be cached. When a session cookie is returned on a cacheable object, there is a
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005111 high risk of session crossing or stealing between users traversing the same
5112 caches. In some situations, it is better to block the response than to let
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02005113 some sensitive session information go in the wild.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005114
5115 The option "checkcache" enables deep inspection of all server responses for
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005116 strict compliance with HTTP specification in terms of cacheability. It
Willy Tarreau198a7442008-01-17 12:05:32 +01005117 carefully checks "Cache-control", "Pragma" and "Set-cookie" headers in server
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005118 response to check if there's a risk of caching a cookie on a client-side
5119 proxy. When this option is enabled, the only responses which can be delivered
Willy Tarreau198a7442008-01-17 12:05:32 +01005120 to the client are :
5121 - all those without "Set-Cookie" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005122 - all those with a return code other than 200, 203, 206, 300, 301, 410,
Willy Tarreau198a7442008-01-17 12:05:32 +01005123 provided that the server has not set a "Cache-control: public" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005124 - all those that come from a POST request, provided that the server has not
5125 set a 'Cache-Control: public' header ;
5126 - those with a 'Pragma: no-cache' header
5127 - those with a 'Cache-control: private' header
5128 - those with a 'Cache-control: no-store' header
5129 - those with a 'Cache-control: max-age=0' header
5130 - those with a 'Cache-control: s-maxage=0' header
5131 - those with a 'Cache-control: no-cache' header
5132 - those with a 'Cache-control: no-cache="set-cookie"' header
5133 - those with a 'Cache-control: no-cache="set-cookie,' header
5134 (allowing other fields after set-cookie)
5135
5136 If a response doesn't respect these requirements, then it will be blocked
Willy Tarreau198a7442008-01-17 12:05:32 +01005137 just as if it was from an "rspdeny" filter, with an "HTTP 502 bad gateway".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005138 The session state shows "PH--" meaning that the proxy blocked the response
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005139 during headers processing. Additionally, an alert will be sent in the logs so
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005140 that admins are informed that there's something to be fixed.
5141
5142 Due to the high impact on the application, the application should be tested
5143 in depth with the option enabled before going to production. It is also a
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01005144 good practice to always activate it during tests, even if it is not used in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005145 production, as it will report potentially dangerous application behaviours.
5146
5147 If this option has been enabled in a "defaults" section, it can be disabled
5148 in a specific instance by prepending the "no" keyword before it.
5149
5150
5151option clitcpka
5152no option clitcpka
5153 Enable or disable the sending of TCP keepalive packets on the client side
5154 May be used in sections : defaults | frontend | listen | backend
5155 yes | yes | yes | no
5156 Arguments : none
5157
5158 When there is a firewall or any session-aware component between a client and
5159 a server, and when the protocol involves very long sessions with long idle
5160 periods (eg: remote desktops), there is a risk that one of the intermediate
5161 components decides to expire a session which has remained idle for too long.
5162
5163 Enabling socket-level TCP keep-alives makes the system regularly send packets
5164 to the other end of the connection, leaving it active. The delay between
5165 keep-alive probes is controlled by the system only and depends both on the
5166 operating system and its tuning parameters.
5167
5168 It is important to understand that keep-alive packets are neither emitted nor
5169 received at the application level. It is only the network stacks which sees
5170 them. For this reason, even if one side of the proxy already uses keep-alives
5171 to maintain its connection alive, those keep-alive packets will not be
5172 forwarded to the other side of the proxy.
5173
5174 Please note that this has nothing to do with HTTP keep-alive.
5175
5176 Using option "clitcpka" enables the emission of TCP keep-alive probes on the
5177 client side of a connection, which should help when session expirations are
5178 noticed between HAProxy and a client.
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 srvtcpka", "option tcpka"
5184
5185
Willy Tarreau0ba27502007-12-24 16:55:16 +01005186option contstats
5187 Enable continuous traffic statistics updates
5188 May be used in sections : defaults | frontend | listen | backend
5189 yes | yes | yes | no
5190 Arguments : none
5191
5192 By default, counters used for statistics calculation are incremented
5193 only when a session finishes. It works quite well when serving small
5194 objects, but with big ones (for example large images or archives) or
5195 with A/V streaming, a graph generated from haproxy counters looks like
Willy Tarreaudef0d222016-11-08 22:03:00 +01005196 a hedgehog. With this option enabled counters get incremented frequently
5197 along the session, typically every 5 seconds, which is often enough to
5198 produce clean graphs. Recounting touches a hotpath directly so it is not
5199 not enabled by default, as it can cause a lot of wakeups for very large
5200 session counts and cause a small performance drop.
Willy Tarreau0ba27502007-12-24 16:55:16 +01005201
5202
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02005203option dontlog-normal
5204no option dontlog-normal
5205 Enable or disable logging of normal, successful connections
5206 May be used in sections : defaults | frontend | listen | backend
5207 yes | yes | yes | no
5208 Arguments : none
5209
5210 There are large sites dealing with several thousand connections per second
5211 and for which logging is a major pain. Some of them are even forced to turn
5212 logs off and cannot debug production issues. Setting this option ensures that
5213 normal connections, those which experience no error, no timeout, no retry nor
5214 redispatch, will not be logged. This leaves disk space for anomalies. In HTTP
5215 mode, the response status code is checked and return codes 5xx will still be
5216 logged.
5217
5218 It is strongly discouraged to use this option as most of the time, the key to
5219 complex issues is in the normal logs which will not be logged here. If you
5220 need to separate logs, see the "log-separate-errors" option instead.
5221
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005222 See also : "log", "dontlognull", "log-separate-errors" and section 8 about
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02005223 logging.
5224
5225
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005226option dontlognull
5227no option dontlognull
5228 Enable or disable logging of null connections
5229 May be used in sections : defaults | frontend | listen | backend
5230 yes | yes | yes | no
5231 Arguments : none
5232
5233 In certain environments, there are components which will regularly connect to
5234 various systems to ensure that they are still alive. It can be the case from
5235 another load balancer as well as from monitoring systems. By default, even a
5236 simple port probe or scan will produce a log. If those connections pollute
5237 the logs too much, it is possible to enable option "dontlognull" to indicate
5238 that a connection on which no data has been transferred will not be logged,
Willy Tarreau0f228a02015-05-01 15:37:53 +02005239 which typically corresponds to those probes. Note that errors will still be
5240 returned to the client and accounted for in the stats. If this is not what is
5241 desired, option http-ignore-probes can be used instead.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005242
5243 It is generally recommended not to use this option in uncontrolled
5244 environments (eg: internet), otherwise scans and other malicious activities
5245 would not be logged.
5246
5247 If this option has been enabled in a "defaults" section, it can be disabled
5248 in a specific instance by prepending the "no" keyword before it.
5249
Willy Tarreau0f228a02015-05-01 15:37:53 +02005250 See also : "log", "http-ignore-probes", "monitor-net", "monitor-uri", and
5251 section 8 about logging.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005252
5253
5254option forceclose
5255no option forceclose
5256 Enable or disable active connection closing after response is transferred.
5257 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaua31e5df2009-12-30 01:10:35 +01005258 yes | yes | yes | yes
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005259 Arguments : none
5260
5261 Some HTTP servers do not necessarily close the connections when they receive
5262 the "Connection: close" set by "option httpclose", and if the client does not
5263 close either, then the connection remains open till the timeout expires. This
5264 causes high number of simultaneous connections on the servers and shows high
5265 global session times in the logs.
5266
5267 When this happens, it is possible to use "option forceclose". It will
Willy Tarreau82eeaf22009-12-29 12:09:05 +01005268 actively close the outgoing server channel as soon as the server has finished
Cyril Bonté653dcd62014-02-20 00:13:15 +01005269 to respond and release some resources earlier than with "option httpclose".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005270
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005271 This option may also be combined with "option http-pretend-keepalive", which
5272 will disable sending of the "Connection: close" header, but will still cause
5273 the connection to be closed once the whole response is received.
5274
Cyril Bonté653dcd62014-02-20 00:13:15 +01005275 This option disables and replaces any previous "option httpclose", "option
5276 http-server-close", "option http-keep-alive", or "option http-tunnel".
Willy Tarreau02bce8b2014-01-30 00:15:28 +01005277
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005278 If this option has been enabled in a "defaults" section, it can be disabled
5279 in a specific instance by prepending the "no" keyword before it.
5280
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005281 See also : "option httpclose" and "option http-pretend-keepalive"
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005282
5283
Willy Tarreau87cf5142011-08-19 22:57:24 +02005284option forwardfor [ except <network> ] [ header <name> ] [ if-none ]
Willy Tarreauc27debf2008-01-06 08:57:02 +01005285 Enable insertion of the X-Forwarded-For header to requests sent to servers
5286 May be used in sections : defaults | frontend | listen | backend
5287 yes | yes | yes | yes
5288 Arguments :
5289 <network> is an optional argument used to disable this option for sources
5290 matching <network>
Ross Westaf72a1d2008-08-03 10:51:45 +02005291 <name> an optional argument to specify a different "X-Forwarded-For"
Willy Tarreaud72758d2010-01-12 10:42:19 +01005292 header name.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005293
5294 Since HAProxy works in reverse-proxy mode, the servers see its IP address as
5295 their client address. This is sometimes annoying when the client's IP address
5296 is expected in server logs. To solve this problem, the well-known HTTP header
5297 "X-Forwarded-For" may be added by HAProxy to all requests sent to the server.
5298 This header contains a value representing the client's IP address. Since this
5299 header is always appended at the end of the existing header list, the server
5300 must be configured to always use the last occurrence of this header only. See
Ross Westaf72a1d2008-08-03 10:51:45 +02005301 the server's manual to find how to enable use of this standard header. Note
5302 that only the last occurrence of the header must be used, since it is really
5303 possible that the client has already brought one.
5304
Willy Tarreaud72758d2010-01-12 10:42:19 +01005305 The keyword "header" may be used to supply a different header name to replace
Ross Westaf72a1d2008-08-03 10:51:45 +02005306 the default "X-Forwarded-For". This can be useful where you might already
Willy Tarreaud72758d2010-01-12 10:42:19 +01005307 have a "X-Forwarded-For" header from a different application (eg: stunnel),
5308 and you need preserve it. Also if your backend server doesn't use the
Ross Westaf72a1d2008-08-03 10:51:45 +02005309 "X-Forwarded-For" header and requires different one (eg: Zeus Web Servers
5310 require "X-Cluster-Client-IP").
Willy Tarreauc27debf2008-01-06 08:57:02 +01005311
5312 Sometimes, a same HAProxy instance may be shared between a direct client
5313 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
5314 used to decrypt HTTPS traffic). It is possible to disable the addition of the
5315 header for a known source address or network by adding the "except" keyword
5316 followed by the network address. In this case, any source IP matching the
5317 network will not cause an addition of this header. Most common uses are with
5318 private networks or 127.0.0.1.
5319
Willy Tarreau87cf5142011-08-19 22:57:24 +02005320 Alternatively, the keyword "if-none" states that the header will only be
5321 added if it is not present. This should only be used in perfectly trusted
5322 environment, as this might cause a security issue if headers reaching haproxy
5323 are under the control of the end-user.
5324
Willy Tarreauc27debf2008-01-06 08:57:02 +01005325 This option may be specified either in the frontend or in the backend. If at
Ross Westaf72a1d2008-08-03 10:51:45 +02005326 least one of them uses it, the header will be added. Note that the backend's
5327 setting of the header subargument takes precedence over the frontend's if
Willy Tarreau87cf5142011-08-19 22:57:24 +02005328 both are defined. In the case of the "if-none" argument, if at least one of
5329 the frontend or the backend does not specify it, it wants the addition to be
5330 mandatory, so it wins.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005331
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02005332 Example :
Willy Tarreauc27debf2008-01-06 08:57:02 +01005333 # Public HTTP address also used by stunnel on the same machine
5334 frontend www
5335 mode http
5336 option forwardfor except 127.0.0.1 # stunnel already adds the header
5337
Ross Westaf72a1d2008-08-03 10:51:45 +02005338 # Those servers want the IP Address in X-Client
5339 backend www
5340 mode http
5341 option forwardfor header X-Client
5342
Willy Tarreau87cf5142011-08-19 22:57:24 +02005343 See also : "option httpclose", "option http-server-close",
Willy Tarreau70dffda2014-01-30 03:07:23 +01005344 "option forceclose", "option http-keep-alive"
Willy Tarreauc27debf2008-01-06 08:57:02 +01005345
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005346
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02005347option http-buffer-request
5348no option http-buffer-request
5349 Enable or disable waiting for whole HTTP request body before proceeding
5350 May be used in sections : defaults | frontend | listen | backend
5351 yes | yes | yes | yes
5352 Arguments : none
5353
5354 It is sometimes desirable to wait for the body of an HTTP request before
5355 taking a decision. This is what is being done by "balance url_param" for
5356 example. The first use case is to buffer requests from slow clients before
5357 connecting to the server. Another use case consists in taking the routing
5358 decision based on the request body's contents. This option placed in a
5359 frontend or backend forces the HTTP processing to wait until either the whole
5360 body is received, or the request buffer is full, or the first chunk is
5361 complete in case of chunked encoding. It can have undesired side effects with
5362 some applications abusing HTTP by expecting unbufferred transmissions between
5363 the frontend and the backend, so this should definitely not be used by
5364 default.
5365
Baptiste Assmanneccdf432015-10-28 13:49:01 +01005366 See also : "option http-no-delay", "timeout http-request"
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02005367
5368
Willy Tarreau0f228a02015-05-01 15:37:53 +02005369option http-ignore-probes
5370no option http-ignore-probes
5371 Enable or disable logging of null connections and request timeouts
5372 May be used in sections : defaults | frontend | listen | backend
5373 yes | yes | yes | no
5374 Arguments : none
5375
5376 Recently some browsers started to implement a "pre-connect" feature
5377 consisting in speculatively connecting to some recently visited web sites
5378 just in case the user would like to visit them. This results in many
5379 connections being established to web sites, which end up in 408 Request
5380 Timeout if the timeout strikes first, or 400 Bad Request when the browser
5381 decides to close them first. These ones pollute the log and feed the error
5382 counters. There was already "option dontlognull" but it's insufficient in
5383 this case. Instead, this option does the following things :
5384 - prevent any 400/408 message from being sent to the client if nothing
5385 was received over a connection before it was closed ;
5386 - prevent any log from being emitted in this situation ;
5387 - prevent any error counter from being incremented
5388
5389 That way the empty connection is silently ignored. Note that it is better
5390 not to use this unless it is clear that it is needed, because it will hide
5391 real problems. The most common reason for not receiving a request and seeing
5392 a 408 is due to an MTU inconsistency between the client and an intermediary
5393 element such as a VPN, which blocks too large packets. These issues are
5394 generally seen with POST requests as well as GET with large cookies. The logs
5395 are often the only way to detect them.
5396
5397 If this option has been enabled in a "defaults" section, it can be disabled
5398 in a specific instance by prepending the "no" keyword before it.
5399
5400 See also : "log", "dontlognull", "errorfile", and section 8 about logging.
5401
5402
Willy Tarreau16bfb022010-01-16 19:48:41 +01005403option http-keep-alive
5404no option http-keep-alive
5405 Enable or disable HTTP keep-alive from client to server
5406 May be used in sections : defaults | frontend | listen | backend
5407 yes | yes | yes | yes
5408 Arguments : none
5409
Willy Tarreau70dffda2014-01-30 03:07:23 +01005410 By default HAProxy operates in keep-alive mode with regards to persistent
5411 connections: for each connection it processes each request and response, and
5412 leaves the connection idle on both sides between the end of a response and the
5413 start of a new request. This mode may be changed by several options such as
5414 "option http-server-close", "option forceclose", "option httpclose" or
5415 "option http-tunnel". This option allows to set back the keep-alive mode,
5416 which can be useful when another mode was used in a defaults section.
5417
5418 Setting "option http-keep-alive" enables HTTP keep-alive mode on the client-
5419 and server- sides. This provides the lowest latency on the client side (slow
Willy Tarreau16bfb022010-01-16 19:48:41 +01005420 network) and the fastest session reuse on the server side at the expense
5421 of maintaining idle connections to the servers. In general, it is possible
5422 with this option to achieve approximately twice the request rate that the
5423 "http-server-close" option achieves on small objects. There are mainly two
5424 situations where this option may be useful :
5425
5426 - when the server is non-HTTP compliant and authenticates the connection
5427 instead of requests (eg: NTLM authentication)
5428
5429 - when the cost of establishing the connection to the server is significant
5430 compared to the cost of retrieving the associated object from the server.
5431
5432 This last case can happen when the server is a fast static server of cache.
5433 In this case, the server will need to be properly tuned to support high enough
5434 connection counts because connections will last until the client sends another
5435 request.
5436
5437 If the client request has to go to another backend or another server due to
5438 content switching or the load balancing algorithm, the idle connection will
Willy Tarreau9420b122013-12-15 18:58:25 +01005439 immediately be closed and a new one re-opened. Option "prefer-last-server" is
5440 available to try optimize server selection so that if the server currently
5441 attached to an idle connection is usable, it will be used.
Willy Tarreau16bfb022010-01-16 19:48:41 +01005442
5443 In general it is preferred to use "option http-server-close" with application
5444 servers, and some static servers might benefit from "option http-keep-alive".
5445
5446 At the moment, logs will not indicate whether requests came from the same
5447 session or not. The accept date reported in the logs corresponds to the end
5448 of the previous request, and the request time corresponds to the time spent
5449 waiting for a new request. The keep-alive request time is still bound to the
5450 timeout defined by "timeout http-keep-alive" or "timeout http-request" if
5451 not set.
5452
Cyril Bonté653dcd62014-02-20 00:13:15 +01005453 This option disables and replaces any previous "option httpclose", "option
5454 http-server-close", "option forceclose" or "option http-tunnel". When backend
Willy Tarreau70dffda2014-01-30 03:07:23 +01005455 and frontend options differ, all of these 4 options have precedence over
Cyril Bonté653dcd62014-02-20 00:13:15 +01005456 "option http-keep-alive".
Willy Tarreau16bfb022010-01-16 19:48:41 +01005457
5458 See also : "option forceclose", "option http-server-close",
Willy Tarreau9420b122013-12-15 18:58:25 +01005459 "option prefer-last-server", "option http-pretend-keepalive",
5460 "option httpclose", and "1.1. The HTTP transaction model".
Willy Tarreau16bfb022010-01-16 19:48:41 +01005461
5462
Willy Tarreau96e31212011-05-30 18:10:30 +02005463option http-no-delay
5464no option http-no-delay
5465 Instruct the system to favor low interactive delays over performance in HTTP
5466 May be used in sections : defaults | frontend | listen | backend
5467 yes | yes | yes | yes
5468 Arguments : none
5469
5470 In HTTP, each payload is unidirectional and has no notion of interactivity.
5471 Any agent is expected to queue data somewhat for a reasonably low delay.
5472 There are some very rare server-to-server applications that abuse the HTTP
5473 protocol and expect the payload phase to be highly interactive, with many
5474 interleaved data chunks in both directions within a single request. This is
5475 absolutely not supported by the HTTP specification and will not work across
5476 most proxies or servers. When such applications attempt to do this through
5477 haproxy, it works but they will experience high delays due to the network
5478 optimizations which favor performance by instructing the system to wait for
5479 enough data to be available in order to only send full packets. Typical
5480 delays are around 200 ms per round trip. Note that this only happens with
5481 abnormal uses. Normal uses such as CONNECT requests nor WebSockets are not
5482 affected.
5483
5484 When "option http-no-delay" is present in either the frontend or the backend
5485 used by a connection, all such optimizations will be disabled in order to
5486 make the exchanges as fast as possible. Of course this offers no guarantee on
5487 the functionality, as it may break at any other place. But if it works via
5488 HAProxy, it will work as fast as possible. This option should never be used
5489 by default, and should never be used at all unless such a buggy application
5490 is discovered. The impact of using this option is an increase of bandwidth
5491 usage and CPU usage, which may significantly lower performance in high
5492 latency environments.
5493
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02005494 See also : "option http-buffer-request"
5495
Willy Tarreau96e31212011-05-30 18:10:30 +02005496
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005497option http-pretend-keepalive
5498no option http-pretend-keepalive
5499 Define whether haproxy will announce keepalive to the server or not
5500 May be used in sections : defaults | frontend | listen | backend
5501 yes | yes | yes | yes
5502 Arguments : none
5503
5504 When running with "option http-server-close" or "option forceclose", haproxy
5505 adds a "Connection: close" header to the request forwarded to the server.
5506 Unfortunately, when some servers see this header, they automatically refrain
5507 from using the chunked encoding for responses of unknown length, while this
5508 is totally unrelated. The immediate effect is that this prevents haproxy from
5509 maintaining the client connection alive. A second effect is that a client or
5510 a cache could receive an incomplete response without being aware of it, and
5511 consider the response complete.
5512
5513 By setting "option http-pretend-keepalive", haproxy will make the server
5514 believe it will keep the connection alive. The server will then not fall back
5515 to the abnormal undesired above. When haproxy gets the whole response, it
5516 will close the connection with the server just as it would do with the
5517 "forceclose" option. That way the client gets a normal response and the
5518 connection is correctly closed on the server side.
5519
5520 It is recommended not to enable this option by default, because most servers
5521 will more efficiently close the connection themselves after the last packet,
5522 and release its buffers slightly earlier. Also, the added packet on the
5523 network could slightly reduce the overall peak performance. However it is
5524 worth noting that when this option is enabled, haproxy will have slightly
5525 less work to do. So if haproxy is the bottleneck on the whole architecture,
5526 enabling this option might save a few CPU cycles.
5527
5528 This option may be set both in a frontend and in a backend. It is enabled if
5529 at least one of the frontend or backend holding a connection has it enabled.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04005530 This option may be combined with "option httpclose", which will cause
Willy Tarreau22a95342010-09-29 14:31:41 +02005531 keepalive to be announced to the server and close to be announced to the
5532 client. This practice is discouraged though.
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005533
5534 If this option has been enabled in a "defaults" section, it can be disabled
5535 in a specific instance by prepending the "no" keyword before it.
5536
Willy Tarreau16bfb022010-01-16 19:48:41 +01005537 See also : "option forceclose", "option http-server-close", and
5538 "option http-keep-alive"
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005539
Willy Tarreauc27debf2008-01-06 08:57:02 +01005540
Willy Tarreaub608feb2010-01-02 22:47:18 +01005541option http-server-close
5542no option http-server-close
5543 Enable or disable HTTP connection closing on the server side
5544 May be used in sections : defaults | frontend | listen | backend
5545 yes | yes | yes | yes
5546 Arguments : none
5547
Willy Tarreau70dffda2014-01-30 03:07:23 +01005548 By default HAProxy operates in keep-alive mode with regards to persistent
5549 connections: for each connection it processes each request and response, and
5550 leaves the connection idle on both sides between the end of a response and
5551 the start of a new request. This mode may be changed by several options such
5552 as "option http-server-close", "option forceclose", "option httpclose" or
5553 "option http-tunnel". Setting "option http-server-close" enables HTTP
5554 connection-close mode on the server side while keeping the ability to support
5555 HTTP keep-alive and pipelining on the client side. This provides the lowest
5556 latency on the client side (slow network) and the fastest session reuse on
5557 the server side to save server resources, similarly to "option forceclose".
5558 It also permits non-keepalive capable servers to be served in keep-alive mode
5559 to the clients if they conform to the requirements of RFC2616. Please note
5560 that some servers do not always conform to those requirements when they see
5561 "Connection: close" in the request. The effect will be that keep-alive will
5562 never be used. A workaround consists in enabling "option
5563 http-pretend-keepalive".
Willy Tarreaub608feb2010-01-02 22:47:18 +01005564
5565 At the moment, logs will not indicate whether requests came from the same
5566 session or not. The accept date reported in the logs corresponds to the end
5567 of the previous request, and the request time corresponds to the time spent
5568 waiting for a new request. The keep-alive request time is still bound to the
Willy Tarreaub16a5742010-01-10 14:46:16 +01005569 timeout defined by "timeout http-keep-alive" or "timeout http-request" if
5570 not set.
Willy Tarreaub608feb2010-01-02 22:47:18 +01005571
5572 This option may be set both in a frontend and in a backend. It is enabled if
5573 at least one of the frontend or backend holding a connection has it enabled.
Cyril Bonté653dcd62014-02-20 00:13:15 +01005574 It disables and replaces any previous "option httpclose", "option forceclose",
5575 "option http-tunnel" or "option http-keep-alive". Please check section 4
Willy Tarreau70dffda2014-01-30 03:07:23 +01005576 ("Proxies") to see how this option combines with others when frontend and
5577 backend options differ.
Willy Tarreaub608feb2010-01-02 22:47:18 +01005578
5579 If this option has been enabled in a "defaults" section, it can be disabled
5580 in a specific instance by prepending the "no" keyword before it.
5581
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02005582 See also : "option forceclose", "option http-pretend-keepalive",
Willy Tarreau16bfb022010-01-16 19:48:41 +01005583 "option httpclose", "option http-keep-alive", and
5584 "1.1. The HTTP transaction model".
Willy Tarreaub608feb2010-01-02 22:47:18 +01005585
5586
Willy Tarreau02bce8b2014-01-30 00:15:28 +01005587option http-tunnel
5588no option http-tunnel
5589 Disable or enable HTTP connection processing after first transaction
5590 May be used in sections : defaults | frontend | listen | backend
5591 yes | yes | yes | yes
5592 Arguments : none
5593
Willy Tarreau70dffda2014-01-30 03:07:23 +01005594 By default HAProxy operates in keep-alive mode with regards to persistent
5595 connections: for each connection it processes each request and response, and
5596 leaves the connection idle on both sides between the end of a response and
5597 the start of a new request. This mode may be changed by several options such
5598 as "option http-server-close", "option forceclose", "option httpclose" or
5599 "option http-tunnel".
5600
5601 Option "http-tunnel" disables any HTTP processing past the first request and
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03005602 the first response. This is the mode which was used by default in versions
Willy Tarreau70dffda2014-01-30 03:07:23 +01005603 1.0 to 1.5-dev21. It is the mode with the lowest processing overhead, which
5604 is normally not needed anymore unless in very specific cases such as when
5605 using an in-house protocol that looks like HTTP but is not compatible, or
5606 just to log one request per client in order to reduce log size. Note that
5607 everything which works at the HTTP level, including header parsing/addition,
5608 cookie processing or content switching will only work for the first request
5609 and will be ignored after the first response.
Willy Tarreau02bce8b2014-01-30 00:15:28 +01005610
5611 If this option has been enabled in a "defaults" section, it can be disabled
5612 in a specific instance by prepending the "no" keyword before it.
5613
5614 See also : "option forceclose", "option http-server-close",
5615 "option httpclose", "option http-keep-alive", and
5616 "1.1. The HTTP transaction model".
5617
5618
Willy Tarreau88d349d2010-01-25 12:15:43 +01005619option http-use-proxy-header
Cyril Bontéf0c60612010-02-06 14:44:47 +01005620no option http-use-proxy-header
Willy Tarreau88d349d2010-01-25 12:15:43 +01005621 Make use of non-standard Proxy-Connection header instead of Connection
5622 May be used in sections : defaults | frontend | listen | backend
5623 yes | yes | yes | no
5624 Arguments : none
5625
5626 While RFC2616 explicitly states that HTTP/1.1 agents must use the
5627 Connection header to indicate their wish of persistent or non-persistent
5628 connections, both browsers and proxies ignore this header for proxied
5629 connections and make use of the undocumented, non-standard Proxy-Connection
5630 header instead. The issue begins when trying to put a load balancer between
5631 browsers and such proxies, because there will be a difference between what
5632 haproxy understands and what the client and the proxy agree on.
5633
5634 By setting this option in a frontend, haproxy can automatically switch to use
5635 that non-standard header if it sees proxied requests. A proxied request is
Lukas Tribusf01a9cd2016-02-03 18:09:37 +01005636 defined here as one where the URI begins with neither a '/' nor a '*'. This
5637 is incompatible with the HTTP tunnel mode. Note that this option can only be
5638 specified in a frontend and will affect the request along its whole life.
Willy Tarreau88d349d2010-01-25 12:15:43 +01005639
Willy Tarreau844a7e72010-01-31 21:46:18 +01005640 Also, when this option is set, a request which requires authentication will
5641 automatically switch to use proxy authentication headers if it is itself a
5642 proxied request. That makes it possible to check or enforce authentication in
5643 front of an existing proxy.
5644
Willy Tarreau88d349d2010-01-25 12:15:43 +01005645 This option should normally never be used, except in front of a proxy.
5646
5647 See also : "option httpclose", "option forceclose" and "option
5648 http-server-close".
5649
5650
Willy Tarreaud63335a2010-02-26 12:56:52 +01005651option httpchk
5652option httpchk <uri>
5653option httpchk <method> <uri>
5654option httpchk <method> <uri> <version>
5655 Enable HTTP protocol to check on the servers health
5656 May be used in sections : defaults | frontend | listen | backend
5657 yes | no | yes | yes
5658 Arguments :
5659 <method> is the optional HTTP method used with the requests. When not set,
5660 the "OPTIONS" method is used, as it generally requires low server
5661 processing and is easy to filter out from the logs. Any method
5662 may be used, though it is not recommended to invent non-standard
5663 ones.
5664
5665 <uri> is the URI referenced in the HTTP requests. It defaults to " / "
5666 which is accessible by default on almost any server, but may be
5667 changed to any other URI. Query strings are permitted.
5668
5669 <version> is the optional HTTP version string. It defaults to "HTTP/1.0"
5670 but some servers might behave incorrectly in HTTP 1.0, so turning
5671 it to HTTP/1.1 may sometimes help. Note that the Host field is
5672 mandatory in HTTP/1.1, and as a trick, it is possible to pass it
5673 after "\r\n" following the version string.
5674
5675 By default, server health checks only consist in trying to establish a TCP
5676 connection. When "option httpchk" is specified, a complete HTTP request is
5677 sent once the TCP connection is established, and responses 2xx and 3xx are
5678 considered valid, while all other ones indicate a server failure, including
5679 the lack of any response.
5680
5681 The port and interval are specified in the server configuration.
5682
5683 This option does not necessarily require an HTTP backend, it also works with
5684 plain TCP backends. This is particularly useful to check simple scripts bound
5685 to some dedicated ports using the inetd daemon.
5686
5687 Examples :
5688 # Relay HTTPS traffic to Apache instance and check service availability
5689 # using HTTP request "OPTIONS * HTTP/1.1" on port 80.
5690 backend https_relay
5691 mode tcp
5692 option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
5693 server apache1 192.168.1.1:443 check port 80
5694
Simon Hormanafc47ee2013-11-25 10:46:35 +09005695 See also : "option ssl-hello-chk", "option smtpchk", "option mysql-check",
5696 "option pgsql-check", "http-check" and the "check", "port" and
5697 "inter" server options.
Willy Tarreaud63335a2010-02-26 12:56:52 +01005698
5699
Willy Tarreauc27debf2008-01-06 08:57:02 +01005700option httpclose
5701no option httpclose
5702 Enable or disable passive HTTP connection closing
5703 May be used in sections : defaults | frontend | listen | backend
5704 yes | yes | yes | yes
5705 Arguments : none
5706
Willy Tarreau70dffda2014-01-30 03:07:23 +01005707 By default HAProxy operates in keep-alive mode with regards to persistent
5708 connections: for each connection it processes each request and response, and
5709 leaves the connection idle on both sides between the end of a response and
5710 the start of a new request. This mode may be changed by several options such
Cyril Bonté653dcd62014-02-20 00:13:15 +01005711 as "option http-server-close", "option forceclose", "option httpclose" or
Willy Tarreau70dffda2014-01-30 03:07:23 +01005712 "option http-tunnel".
5713
5714 If "option httpclose" is set, HAProxy will work in HTTP tunnel mode and check
5715 if a "Connection: close" header is already set in each direction, and will
5716 add one if missing. Each end should react to this by actively closing the TCP
5717 connection after each transfer, thus resulting in a switch to the HTTP close
5718 mode. Any "Connection" header different from "close" will also be removed.
5719 Note that this option is deprecated since what it does is very cheap but not
5720 reliable. Using "option http-server-close" or "option forceclose" is strongly
5721 recommended instead.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005722
5723 It seldom happens that some servers incorrectly ignore this header and do not
Jamie Gloudonaaa21002012-08-25 00:18:33 -04005724 close the connection even though they reply "Connection: close". For this
Willy Tarreau0dfdf192010-01-05 11:33:11 +01005725 reason, they are not compatible with older HTTP 1.0 browsers. If this happens
5726 it is possible to use the "option forceclose" which actively closes the
5727 request connection once the server responds. Option "forceclose" also
5728 releases the server connection earlier because it does not have to wait for
5729 the client to acknowledge it.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005730
5731 This option may be set both in a frontend and in a backend. It is enabled if
5732 at least one of the frontend or backend holding a connection has it enabled.
Cyril Bonté653dcd62014-02-20 00:13:15 +01005733 It disables and replaces any previous "option http-server-close",
5734 "option forceclose", "option http-keep-alive" or "option http-tunnel". Please
Willy Tarreau70dffda2014-01-30 03:07:23 +01005735 check section 4 ("Proxies") to see how this option combines with others when
5736 frontend and backend options differ.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005737
5738 If this option has been enabled in a "defaults" section, it can be disabled
5739 in a specific instance by prepending the "no" keyword before it.
5740
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02005741 See also : "option forceclose", "option http-server-close" and
5742 "1.1. The HTTP transaction model".
Willy Tarreauc27debf2008-01-06 08:57:02 +01005743
5744
Emeric Brun3a058f32009-06-30 18:26:00 +02005745option httplog [ clf ]
Willy Tarreauc27debf2008-01-06 08:57:02 +01005746 Enable logging of HTTP request, session state and timers
5747 May be used in sections : defaults | frontend | listen | backend
5748 yes | yes | yes | yes
Emeric Brun3a058f32009-06-30 18:26:00 +02005749 Arguments :
5750 clf if the "clf" argument is added, then the output format will be
5751 the CLF format instead of HAProxy's default HTTP format. You can
5752 use this when you need to feed HAProxy's logs through a specific
5753 log analyser which only support the CLF format and which is not
5754 extensible.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005755
5756 By default, the log output format is very poor, as it only contains the
5757 source and destination addresses, and the instance name. By specifying
5758 "option httplog", each log line turns into a much richer format including,
5759 but not limited to, the HTTP request, the connection timers, the session
5760 status, the connections numbers, the captured headers and cookies, the
5761 frontend, backend and server name, and of course the source address and
5762 ports.
5763
5764 This option may be set either in the frontend or the backend.
5765
PiBa-NLbd556bf2014-12-11 21:31:54 +01005766 Specifying only "option httplog" will automatically clear the 'clf' mode
5767 if it was set by default.
Emeric Brun3a058f32009-06-30 18:26:00 +02005768
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005769 See also : section 8 about logging.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005770
Willy Tarreau55165fe2009-05-10 12:02:55 +02005771
5772option http_proxy
5773no option http_proxy
5774 Enable or disable plain HTTP proxy mode
5775 May be used in sections : defaults | frontend | listen | backend
5776 yes | yes | yes | yes
5777 Arguments : none
5778
5779 It sometimes happens that people need a pure HTTP proxy which understands
5780 basic proxy requests without caching nor any fancy feature. In this case,
5781 it may be worth setting up an HAProxy instance with the "option http_proxy"
5782 set. In this mode, no server is declared, and the connection is forwarded to
5783 the IP address and port found in the URL after the "http://" scheme.
5784
5785 No host address resolution is performed, so this only works when pure IP
5786 addresses are passed. Since this option's usage perimeter is rather limited,
Lukas Tribusf01a9cd2016-02-03 18:09:37 +01005787 it will probably be used only by experts who know they need exactly it. This
5788 is incompatible with the HTTP tunnel mode.
Willy Tarreau55165fe2009-05-10 12:02:55 +02005789
5790 If this option has been enabled in a "defaults" section, it can be disabled
5791 in a specific instance by prepending the "no" keyword before it.
5792
5793 Example :
5794 # this backend understands HTTP proxy requests and forwards them directly.
5795 backend direct_forward
5796 option httpclose
5797 option http_proxy
5798
5799 See also : "option httpclose"
5800
Willy Tarreau211ad242009-10-03 21:45:07 +02005801
Jamie Gloudon801a0a32012-08-25 00:18:33 -04005802option independent-streams
5803no option independent-streams
5804 Enable or disable independent timeout processing for both directions
Willy Tarreauf27b5ea2009-10-03 22:01:18 +02005805 May be used in sections : defaults | frontend | listen | backend
5806 yes | yes | yes | yes
5807 Arguments : none
5808
5809 By default, when data is sent over a socket, both the write timeout and the
5810 read timeout for that socket are refreshed, because we consider that there is
5811 activity on that socket, and we have no other means of guessing if we should
5812 receive data or not.
5813
5814 While this default behaviour is desirable for almost all applications, there
5815 exists a situation where it is desirable to disable it, and only refresh the
5816 read timeout if there are incoming data. This happens on sessions with large
5817 timeouts and low amounts of exchanged data such as telnet session. If the
5818 server suddenly disappears, the output data accumulates in the system's
5819 socket buffers, both timeouts are correctly refreshed, and there is no way
5820 to know the server does not receive them, so we don't timeout. However, when
5821 the underlying protocol always echoes sent data, it would be enough by itself
5822 to detect the issue using the read timeout. Note that this problem does not
5823 happen with more verbose protocols because data won't accumulate long in the
5824 socket buffers.
5825
5826 When this option is set on the frontend, it will disable read timeout updates
5827 on data sent to the client. There probably is little use of this case. When
5828 the option is set on the backend, it will disable read timeout updates on
5829 data sent to the server. Doing so will typically break large HTTP posts from
5830 slow lines, so use it with caution.
5831
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03005832 Note: older versions used to call this setting "option independent-streams"
Jamie Gloudon801a0a32012-08-25 00:18:33 -04005833 with a spelling mistake. This spelling is still supported but
5834 deprecated.
5835
Willy Tarreauce887fd2012-05-12 12:50:00 +02005836 See also : "timeout client", "timeout server" and "timeout tunnel"
Willy Tarreauf27b5ea2009-10-03 22:01:18 +02005837
5838
Gabor Lekenyb4c81e42010-09-29 18:17:05 +02005839option ldap-check
5840 Use LDAPv3 health checks for server testing
5841 May be used in sections : defaults | frontend | listen | backend
5842 yes | no | yes | yes
5843 Arguments : none
5844
5845 It is possible to test that the server correctly talks LDAPv3 instead of just
5846 testing that it accepts the TCP connection. When this option is set, an
5847 LDAPv3 anonymous simple bind message is sent to the server, and the response
5848 is analyzed to find an LDAPv3 bind response message.
5849
5850 The server is considered valid only when the LDAP response contains success
5851 resultCode (http://tools.ietf.org/html/rfc4511#section-4.1.9).
5852
5853 Logging of bind requests is server dependent see your documentation how to
5854 configure it.
5855
5856 Example :
5857 option ldap-check
5858
5859 See also : "option httpchk"
5860
5861
Simon Horman98637e52014-06-20 12:30:16 +09005862option external-check
5863 Use external processes for server health checks
5864 May be used in sections : defaults | frontend | listen | backend
5865 yes | no | yes | yes
5866
5867 It is possible to test the health of a server using an external command.
5868 This is achieved by running the executable set using "external-check
5869 command".
5870
5871 Requires the "external-check" global to be set.
5872
5873 See also : "external-check", "external-check command", "external-check path"
5874
5875
Willy Tarreau211ad242009-10-03 21:45:07 +02005876option log-health-checks
5877no option log-health-checks
Willy Tarreaubef1b322014-05-13 21:01:39 +02005878 Enable or disable logging of health checks status updates
Willy Tarreau211ad242009-10-03 21:45:07 +02005879 May be used in sections : defaults | frontend | listen | backend
5880 yes | no | yes | yes
5881 Arguments : none
5882
Willy Tarreaubef1b322014-05-13 21:01:39 +02005883 By default, failed health check are logged if server is UP and successful
5884 health checks are logged if server is DOWN, so the amount of additional
5885 information is limited.
Willy Tarreau211ad242009-10-03 21:45:07 +02005886
Willy Tarreaubef1b322014-05-13 21:01:39 +02005887 When this option is enabled, any change of the health check status or to
5888 the server's health will be logged, so that it becomes possible to know
5889 that a server was failing occasional checks before crashing, or exactly when
5890 it failed to respond a valid HTTP status, then when the port started to
5891 reject connections, then when the server stopped responding at all.
5892
5893 Note that status changes not caused by health checks (eg: enable/disable on
5894 the CLI) are intentionally not logged by this option.
Willy Tarreau211ad242009-10-03 21:45:07 +02005895
Willy Tarreaubef1b322014-05-13 21:01:39 +02005896 See also: "option httpchk", "option ldap-check", "option mysql-check",
5897 "option pgsql-check", "option redis-check", "option smtpchk",
5898 "option tcp-check", "log" and section 8 about logging.
Willy Tarreau211ad242009-10-03 21:45:07 +02005899
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02005900
5901option log-separate-errors
5902no option log-separate-errors
5903 Change log level for non-completely successful connections
5904 May be used in sections : defaults | frontend | listen | backend
5905 yes | yes | yes | no
5906 Arguments : none
5907
5908 Sometimes looking for errors in logs is not easy. This option makes haproxy
5909 raise the level of logs containing potentially interesting information such
5910 as errors, timeouts, retries, redispatches, or HTTP status codes 5xx. The
5911 level changes from "info" to "err". This makes it possible to log them
5912 separately to a different file with most syslog daemons. Be careful not to
5913 remove them from the original file, otherwise you would lose ordering which
5914 provides very important information.
5915
5916 Using this option, large sites dealing with several thousand connections per
5917 second may log normal traffic to a rotating buffer and only archive smaller
5918 error logs.
5919
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005920 See also : "log", "dontlognull", "dontlog-normal" and section 8 about
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02005921 logging.
5922
Willy Tarreauc27debf2008-01-06 08:57:02 +01005923
5924option logasap
5925no option logasap
5926 Enable or disable early logging of HTTP requests
5927 May be used in sections : defaults | frontend | listen | backend
5928 yes | yes | yes | no
5929 Arguments : none
5930
5931 By default, HTTP requests are logged upon termination so that the total
5932 transfer time and the number of bytes appear in the logs. When large objects
5933 are being transferred, it may take a while before the request appears in the
5934 logs. Using "option logasap", the request gets logged as soon as the server
5935 sends the complete headers. The only missing information in the logs will be
5936 the total number of bytes which will indicate everything except the amount
5937 of data transferred, and the total time which will not take the transfer
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01005938 time into account. In such a situation, it's a good practice to capture the
Willy Tarreauc27debf2008-01-06 08:57:02 +01005939 "Content-Length" response header so that the logs at least indicate how many
5940 bytes are expected to be transferred.
5941
Willy Tarreaucc6c8912009-02-22 10:53:55 +01005942 Examples :
5943 listen http_proxy 0.0.0.0:80
5944 mode http
5945 option httplog
5946 option logasap
5947 log 192.168.2.200 local3
5948
5949 >>> Feb 6 12:14:14 localhost \
5950 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
5951 static/srv1 9/10/7/14/+30 200 +243 - - ---- 3/1/1/1/0 1/0 \
5952 "GET /image.iso HTTP/1.0"
5953
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005954 See also : "option httplog", "capture response header", and section 8 about
Willy Tarreauc27debf2008-01-06 08:57:02 +01005955 logging.
5956
5957
Nenad Merdanovic6639a7c2014-05-30 14:26:32 +02005958option mysql-check [ user <username> [ post-41 ] ]
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02005959 Use MySQL health checks for server testing
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01005960 May be used in sections : defaults | frontend | listen | backend
5961 yes | no | yes | yes
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02005962 Arguments :
Cyril Bonté108cf6e2012-04-21 23:30:29 +02005963 <username> This is the username which will be used when connecting to MySQL
5964 server.
Nenad Merdanovic6639a7c2014-05-30 14:26:32 +02005965 post-41 Send post v4.1 client compatible checks
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02005966
5967 If you specify a username, the check consists of sending two MySQL packet,
5968 one Client Authentication packet, and one QUIT packet, to correctly close
5969 MySQL session. We then parse the MySQL Handshake Initialisation packet and/or
5970 Error packet. It is a basic but useful test which does not produce error nor
5971 aborted connect on the server. However, it requires adding an authorization
5972 in the MySQL table, like this :
5973
5974 USE mysql;
5975 INSERT INTO user (Host,User) values ('<ip_of_haproxy>','<username>');
5976 FLUSH PRIVILEGES;
5977
5978 If you don't specify a username (it is deprecated and not recommended), the
5979 check only consists in parsing the Mysql Handshake Initialisation packet or
5980 Error packet, we don't send anything in this mode. It was reported that it
5981 can generate lockout if check is too frequent and/or if there is not enough
5982 traffic. In fact, you need in this case to check MySQL "max_connect_errors"
5983 value as if a connection is established successfully within fewer than MySQL
5984 "max_connect_errors" attempts after a previous connection was interrupted,
5985 the error count for the host is cleared to zero. If HAProxy's server get
5986 blocked, the "FLUSH HOSTS" statement is the only way to unblock it.
5987
5988 Remember that this does not check database presence nor database consistency.
5989 To do this, you can use an external check with xinetd for example.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01005990
Hervé COMMOWICK212f7782011-06-10 14:05:59 +02005991 The check requires MySQL >=3.22, for older version, please use TCP check.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01005992
5993 Most often, an incoming MySQL server needs to see the client's IP address for
5994 various purposes, including IP privilege matching and connection logging.
5995 When possible, it is often wise to masquerade the client's IP address when
5996 connecting to the server using the "usesrc" argument of the "source" keyword,
Willy Tarreau29fbe512015-08-20 19:35:14 +02005997 which requires the transparent proxy feature to be compiled in, and the MySQL
5998 server to route the client via the machine hosting haproxy.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01005999
6000 See also: "option httpchk"
6001
6002
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006003option nolinger
6004no option nolinger
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006005 Enable or disable immediate session resource cleaning after close
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006006 May be used in sections: defaults | frontend | listen | backend
6007 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006008 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006009
6010 When clients or servers abort connections in a dirty way (eg: they are
6011 physically disconnected), the session timeouts triggers and the session is
6012 closed. But it will remain in FIN_WAIT1 state for some time in the system,
6013 using some resources and possibly limiting the ability to establish newer
6014 connections.
6015
6016 When this happens, it is possible to activate "option nolinger" which forces
6017 the system to immediately remove any socket's pending data on close. Thus,
6018 the session is instantly purged from the system's tables. This usually has
6019 side effects such as increased number of TCP resets due to old retransmits
6020 getting immediately rejected. Some firewalls may sometimes complain about
6021 this too.
6022
6023 For this reason, it is not recommended to use this option when not absolutely
6024 needed. You know that you need it when you have thousands of FIN_WAIT1
6025 sessions on your system (TIME_WAIT ones do not count).
6026
6027 This option may be used both on frontends and backends, depending on the side
6028 where it is required. Use it on the frontend for clients, and on the backend
6029 for servers.
6030
6031 If this option has been enabled in a "defaults" section, it can be disabled
6032 in a specific instance by prepending the "no" keyword before it.
6033
6034
Willy Tarreau55165fe2009-05-10 12:02:55 +02006035option originalto [ except <network> ] [ header <name> ]
6036 Enable insertion of the X-Original-To header to requests sent to servers
6037 May be used in sections : defaults | frontend | listen | backend
6038 yes | yes | yes | yes
6039 Arguments :
6040 <network> is an optional argument used to disable this option for sources
6041 matching <network>
6042 <name> an optional argument to specify a different "X-Original-To"
6043 header name.
6044
6045 Since HAProxy can work in transparent mode, every request from a client can
6046 be redirected to the proxy and HAProxy itself can proxy every request to a
6047 complex SQUID environment and the destination host from SO_ORIGINAL_DST will
6048 be lost. This is annoying when you want access rules based on destination ip
6049 addresses. To solve this problem, a new HTTP header "X-Original-To" may be
6050 added by HAProxy to all requests sent to the server. This header contains a
6051 value representing the original destination IP address. Since this must be
6052 configured to always use the last occurrence of this header only. Note that
6053 only the last occurrence of the header must be used, since it is really
6054 possible that the client has already brought one.
6055
6056 The keyword "header" may be used to supply a different header name to replace
6057 the default "X-Original-To". This can be useful where you might already
6058 have a "X-Original-To" header from a different application, and you need
6059 preserve it. Also if your backend server doesn't use the "X-Original-To"
6060 header and requires different one.
6061
6062 Sometimes, a same HAProxy instance may be shared between a direct client
6063 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
6064 used to decrypt HTTPS traffic). It is possible to disable the addition of the
6065 header for a known source address or network by adding the "except" keyword
6066 followed by the network address. In this case, any source IP matching the
6067 network will not cause an addition of this header. Most common uses are with
6068 private networks or 127.0.0.1.
6069
6070 This option may be specified either in the frontend or in the backend. If at
6071 least one of them uses it, the header will be added. Note that the backend's
6072 setting of the header subargument takes precedence over the frontend's if
6073 both are defined.
6074
Willy Tarreau55165fe2009-05-10 12:02:55 +02006075 Examples :
6076 # Original Destination address
6077 frontend www
6078 mode http
6079 option originalto except 127.0.0.1
6080
6081 # Those servers want the IP Address in X-Client-Dst
6082 backend www
6083 mode http
6084 option originalto header X-Client-Dst
6085
Willy Tarreau87cf5142011-08-19 22:57:24 +02006086 See also : "option httpclose", "option http-server-close",
6087 "option forceclose"
Willy Tarreau55165fe2009-05-10 12:02:55 +02006088
6089
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006090option persist
6091no option persist
6092 Enable or disable forced persistence on down servers
6093 May be used in sections: defaults | frontend | listen | backend
6094 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006095 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006096
6097 When an HTTP request reaches a backend with a cookie which references a dead
6098 server, by default it is redispatched to another server. It is possible to
6099 force the request to be sent to the dead server first using "option persist"
6100 if absolutely needed. A common use case is when servers are under extreme
6101 load and spend their time flapping. In this case, the users would still be
6102 directed to the server they opened the session on, in the hope they would be
6103 correctly served. It is recommended to use "option redispatch" in conjunction
6104 with this option so that in the event it would not be possible to connect to
6105 the server at all (server definitely dead), the client would finally be
6106 redirected to another valid server.
6107
6108 If this option has been enabled in a "defaults" section, it can be disabled
6109 in a specific instance by prepending the "no" keyword before it.
6110
Willy Tarreau4de91492010-01-22 19:10:05 +01006111 See also : "option redispatch", "retries", "force-persist"
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006112
6113
Willy Tarreau0c122822013-12-15 18:49:01 +01006114option pgsql-check [ user <username> ]
6115 Use PostgreSQL health checks for server testing
6116 May be used in sections : defaults | frontend | listen | backend
6117 yes | no | yes | yes
6118 Arguments :
6119 <username> This is the username which will be used when connecting to
6120 PostgreSQL server.
6121
6122 The check sends a PostgreSQL StartupMessage and waits for either
6123 Authentication request or ErrorResponse message. It is a basic but useful
6124 test which does not produce error nor aborted connect on the server.
6125 This check is identical with the "mysql-check".
6126
6127 See also: "option httpchk"
6128
6129
Willy Tarreau9420b122013-12-15 18:58:25 +01006130option prefer-last-server
6131no option prefer-last-server
6132 Allow multiple load balanced requests to remain on the same server
6133 May be used in sections: defaults | frontend | listen | backend
6134 yes | no | yes | yes
6135 Arguments : none
6136
6137 When the load balancing algorithm in use is not deterministic, and a previous
6138 request was sent to a server to which haproxy still holds a connection, it is
6139 sometimes desirable that subsequent requests on a same session go to the same
6140 server as much as possible. Note that this is different from persistence, as
6141 we only indicate a preference which haproxy tries to apply without any form
6142 of warranty. The real use is for keep-alive connections sent to servers. When
6143 this option is used, haproxy will try to reuse the same connection that is
6144 attached to the server instead of rebalancing to another server, causing a
6145 close of the connection. This can make sense for static file servers. It does
Willy Tarreau068621e2013-12-23 15:11:25 +01006146 not make much sense to use this in combination with hashing algorithms. Note,
6147 haproxy already automatically tries to stick to a server which sends a 401 or
6148 to a proxy which sends a 407 (authentication required). This is mandatory for
6149 use with the broken NTLM authentication challenge, and significantly helps in
6150 troubleshooting some faulty applications. Option prefer-last-server might be
6151 desirable in these environments as well, to avoid redistributing the traffic
6152 after every other response.
Willy Tarreau9420b122013-12-15 18:58:25 +01006153
6154 If this option has been enabled in a "defaults" section, it can be disabled
6155 in a specific instance by prepending the "no" keyword before it.
6156
6157 See also: "option http-keep-alive"
6158
6159
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006160option redispatch
Joseph Lynch726ab712015-05-11 23:25:34 -07006161option redispatch <interval>
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006162no option redispatch
6163 Enable or disable session redistribution in case of connection failure
6164 May be used in sections: defaults | frontend | listen | backend
6165 yes | no | yes | yes
Joseph Lynch726ab712015-05-11 23:25:34 -07006166 Arguments :
6167 <interval> The optional integer value that controls how often redispatches
6168 occur when retrying connections. Positive value P indicates a
6169 redispatch is desired on every Pth retry, and negative value
6170 N indicate a redispath is desired on the Nth retry prior to the
6171 last retry. For example, the default of -1 preserves the
6172 historical behaviour of redispatching on the last retry, a
6173 positive value of 1 would indicate a redispatch on every retry,
6174 and a positive value of 3 would indicate a redispatch on every
6175 third retry. You can disable redispatches with a value of 0.
6176
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006177
6178 In HTTP mode, if a server designated by a cookie is down, clients may
6179 definitely stick to it because they cannot flush the cookie, so they will not
6180 be able to access the service anymore.
6181
6182 Specifying "option redispatch" will allow the proxy to break their
6183 persistence and redistribute them to a working server.
6184
Joseph Lynch726ab712015-05-11 23:25:34 -07006185 It also allows to retry connections to another server in case of multiple
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006186 connection failures. Of course, it requires having "retries" set to a nonzero
6187 value.
Willy Tarreaud72758d2010-01-12 10:42:19 +01006188
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006189 This form is the preferred form, which replaces both the "redispatch" and
6190 "redisp" keywords.
6191
6192 If this option has been enabled in a "defaults" section, it can be disabled
6193 in a specific instance by prepending the "no" keyword before it.
6194
Willy Tarreau4de91492010-01-22 19:10:05 +01006195 See also : "redispatch", "retries", "force-persist"
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006196
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006197
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02006198option redis-check
6199 Use redis health checks for server testing
6200 May be used in sections : defaults | frontend | listen | backend
6201 yes | no | yes | yes
6202 Arguments : none
6203
6204 It is possible to test that the server correctly talks REDIS protocol instead
6205 of just testing that it accepts the TCP connection. When this option is set,
6206 a PING redis command is sent to the server, and the response is analyzed to
6207 find the "+PONG" response message.
6208
6209 Example :
6210 option redis-check
6211
6212 See also : "option httpchk"
6213
6214
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006215option smtpchk
6216option smtpchk <hello> <domain>
6217 Use SMTP health checks for server testing
6218 May be used in sections : defaults | frontend | listen | backend
6219 yes | no | yes | yes
Willy Tarreaud72758d2010-01-12 10:42:19 +01006220 Arguments :
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006221 <hello> is an optional argument. It is the "hello" command to use. It can
6222 be either "HELO" (for SMTP) or "EHLO" (for ESTMP). All other
6223 values will be turned into the default command ("HELO").
6224
6225 <domain> is the domain name to present to the server. It may only be
6226 specified (and is mandatory) if the hello command has been
6227 specified. By default, "localhost" is used.
6228
6229 When "option smtpchk" is set, the health checks will consist in TCP
6230 connections followed by an SMTP command. By default, this command is
6231 "HELO localhost". The server's return code is analyzed and only return codes
6232 starting with a "2" will be considered as valid. All other responses,
6233 including a lack of response will constitute an error and will indicate a
6234 dead server.
6235
6236 This test is meant to be used with SMTP servers or relays. Depending on the
6237 request, it is possible that some servers do not log each connection attempt,
6238 so you may want to experiment to improve the behaviour. Using telnet on port
6239 25 is often easier than adjusting the configuration.
6240
6241 Most often, an incoming SMTP server needs to see the client's IP address for
6242 various purposes, including spam filtering, anti-spoofing and logging. When
6243 possible, it is often wise to masquerade the client's IP address when
6244 connecting to the server using the "usesrc" argument of the "source" keyword,
Willy Tarreau29fbe512015-08-20 19:35:14 +02006245 which requires the transparent proxy feature to be compiled in.
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006246
6247 Example :
6248 option smtpchk HELO mydomain.org
6249
6250 See also : "option httpchk", "source"
6251
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006252
Krzysztof Piotr Oledzkiaeebf9b2009-10-04 15:43:17 +02006253option socket-stats
6254no option socket-stats
6255
6256 Enable or disable collecting & providing separate statistics for each socket.
6257 May be used in sections : defaults | frontend | listen | backend
6258 yes | yes | yes | no
6259
6260 Arguments : none
6261
6262
Willy Tarreauff4f82d2009-02-06 11:28:13 +01006263option splice-auto
6264no option splice-auto
6265 Enable or disable automatic kernel acceleration on sockets in both directions
6266 May be used in sections : defaults | frontend | listen | backend
6267 yes | yes | yes | yes
6268 Arguments : none
6269
6270 When this option is enabled either on a frontend or on a backend, haproxy
6271 will automatically evaluate the opportunity to use kernel tcp splicing to
6272 forward data between the client and the server, in either direction. Haproxy
6273 uses heuristics to estimate if kernel splicing might improve performance or
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006274 not. Both directions are handled independently. Note that the heuristics used
Willy Tarreauff4f82d2009-02-06 11:28:13 +01006275 are not much aggressive in order to limit excessive use of splicing. This
6276 option requires splicing to be enabled at compile time, and may be globally
6277 disabled with the global option "nosplice". Since splice uses pipes, using it
6278 requires that there are enough spare pipes.
6279
6280 Important note: kernel-based TCP splicing is a Linux-specific feature which
6281 first appeared in kernel 2.6.25. It offers kernel-based acceleration to
6282 transfer data between sockets without copying these data to user-space, thus
6283 providing noticeable performance gains and CPU cycles savings. Since many
6284 early implementations are buggy, corrupt data and/or are inefficient, this
6285 feature is not enabled by default, and it should be used with extreme care.
6286 While it is not possible to detect the correctness of an implementation,
6287 2.6.29 is the first version offering a properly working implementation. In
6288 case of doubt, splicing may be globally disabled using the global "nosplice"
6289 keyword.
6290
6291 Example :
6292 option splice-auto
6293
6294 If this option has been enabled in a "defaults" section, it can be disabled
6295 in a specific instance by prepending the "no" keyword before it.
6296
6297 See also : "option splice-request", "option splice-response", and global
6298 options "nosplice" and "maxpipes"
6299
6300
6301option splice-request
6302no option splice-request
6303 Enable or disable automatic kernel acceleration on sockets for requests
6304 May be used in sections : defaults | frontend | listen | backend
6305 yes | yes | yes | yes
6306 Arguments : none
6307
6308 When this option is enabled either on a frontend or on a backend, haproxy
Jamie Gloudonaaa21002012-08-25 00:18:33 -04006309 will use kernel tcp splicing whenever possible to forward data going from
Willy Tarreauff4f82d2009-02-06 11:28:13 +01006310 the client to the server. It might still use the recv/send scheme if there
6311 are no spare pipes left. This option requires splicing to be enabled at
6312 compile time, and may be globally disabled with the global option "nosplice".
6313 Since splice uses pipes, using it requires that there are enough spare pipes.
6314
6315 Important note: see "option splice-auto" for usage limitations.
6316
6317 Example :
6318 option splice-request
6319
6320 If this option has been enabled in a "defaults" section, it can be disabled
6321 in a specific instance by prepending the "no" keyword before it.
6322
6323 See also : "option splice-auto", "option splice-response", and global options
6324 "nosplice" and "maxpipes"
6325
6326
6327option splice-response
6328no option splice-response
6329 Enable or disable automatic kernel acceleration on sockets for responses
6330 May be used in sections : defaults | frontend | listen | backend
6331 yes | yes | yes | yes
6332 Arguments : none
6333
6334 When this option is enabled either on a frontend or on a backend, haproxy
Jamie Gloudonaaa21002012-08-25 00:18:33 -04006335 will use kernel tcp splicing whenever possible to forward data going from
Willy Tarreauff4f82d2009-02-06 11:28:13 +01006336 the server to the client. It might still use the recv/send scheme if there
6337 are no spare pipes left. This option requires splicing to be enabled at
6338 compile time, and may be globally disabled with the global option "nosplice".
6339 Since splice uses pipes, using it requires that there are enough spare pipes.
6340
6341 Important note: see "option splice-auto" for usage limitations.
6342
6343 Example :
6344 option splice-response
6345
6346 If this option has been enabled in a "defaults" section, it can be disabled
6347 in a specific instance by prepending the "no" keyword before it.
6348
6349 See also : "option splice-auto", "option splice-request", and global options
6350 "nosplice" and "maxpipes"
6351
6352
Willy Tarreaubf1f8162007-12-28 17:42:56 +01006353option srvtcpka
6354no option srvtcpka
6355 Enable or disable the sending of TCP keepalive packets on the server side
6356 May be used in sections : defaults | frontend | listen | backend
6357 yes | no | yes | yes
6358 Arguments : none
6359
6360 When there is a firewall or any session-aware component between a client and
6361 a server, and when the protocol involves very long sessions with long idle
6362 periods (eg: remote desktops), there is a risk that one of the intermediate
6363 components decides to expire a session which has remained idle for too long.
6364
6365 Enabling socket-level TCP keep-alives makes the system regularly send packets
6366 to the other end of the connection, leaving it active. The delay between
6367 keep-alive probes is controlled by the system only and depends both on the
6368 operating system and its tuning parameters.
6369
6370 It is important to understand that keep-alive packets are neither emitted nor
6371 received at the application level. It is only the network stacks which sees
6372 them. For this reason, even if one side of the proxy already uses keep-alives
6373 to maintain its connection alive, those keep-alive packets will not be
6374 forwarded to the other side of the proxy.
6375
6376 Please note that this has nothing to do with HTTP keep-alive.
6377
6378 Using option "srvtcpka" enables the emission of TCP keep-alive probes on the
6379 server side of a connection, which should help when session expirations are
6380 noticed between HAProxy and a server.
6381
6382 If this option has been enabled in a "defaults" section, it can be disabled
6383 in a specific instance by prepending the "no" keyword before it.
6384
6385 See also : "option clitcpka", "option tcpka"
6386
6387
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006388option ssl-hello-chk
6389 Use SSLv3 client hello health checks for server testing
6390 May be used in sections : defaults | frontend | listen | backend
6391 yes | no | yes | yes
6392 Arguments : none
6393
6394 When some SSL-based protocols are relayed in TCP mode through HAProxy, it is
6395 possible to test that the server correctly talks SSL instead of just testing
6396 that it accepts the TCP connection. When "option ssl-hello-chk" is set, pure
6397 SSLv3 client hello messages are sent once the connection is established to
6398 the server, and the response is analyzed to find an SSL server hello message.
6399 The server is considered valid only when the response contains this server
6400 hello message.
6401
6402 All servers tested till there correctly reply to SSLv3 client hello messages,
6403 and most servers tested do not even log the requests containing only hello
6404 messages, which is appreciable.
6405
Willy Tarreau763a95b2012-10-04 23:15:39 +02006406 Note that this check works even when SSL support was not built into haproxy
6407 because it forges the SSL message. When SSL support is available, it is best
6408 to use native SSL health checks instead of this one.
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006409
Willy Tarreau763a95b2012-10-04 23:15:39 +02006410 See also: "option httpchk", "check-ssl"
6411
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006412
Willy Tarreaued179852013-12-16 01:07:00 +01006413option tcp-check
6414 Perform health checks using tcp-check send/expect sequences
6415 May be used in sections: defaults | frontend | listen | backend
6416 yes | no | yes | yes
6417
6418 This health check method is intended to be combined with "tcp-check" command
6419 lists in order to support send/expect types of health check sequences.
6420
6421 TCP checks currently support 4 modes of operations :
6422 - no "tcp-check" directive : the health check only consists in a connection
6423 attempt, which remains the default mode.
6424
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006425 - "tcp-check send" or "tcp-check send-binary" only is mentioned : this is
Willy Tarreaued179852013-12-16 01:07:00 +01006426 used to send a string along with a connection opening. With some
6427 protocols, it helps sending a "QUIT" message for example that prevents
6428 the server from logging a connection error for each health check. The
6429 check result will still be based on the ability to open the connection
6430 only.
6431
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006432 - "tcp-check expect" only is mentioned : this is used to test a banner.
Willy Tarreaued179852013-12-16 01:07:00 +01006433 The connection is opened and haproxy waits for the server to present some
6434 contents which must validate some rules. The check result will be based
6435 on the matching between the contents and the rules. This is suited for
6436 POP, IMAP, SMTP, FTP, SSH, TELNET.
6437
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006438 - both "tcp-check send" and "tcp-check expect" are mentioned : this is
Willy Tarreaued179852013-12-16 01:07:00 +01006439 used to test a hello-type protocol. Haproxy sends a message, the server
6440 responds and its response is analysed. the check result will be based on
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006441 the matching between the response contents and the rules. This is often
Willy Tarreaued179852013-12-16 01:07:00 +01006442 suited for protocols which require a binding or a request/response model.
6443 LDAP, MySQL, Redis and SSL are example of such protocols, though they
6444 already all have their dedicated checks with a deeper understanding of
6445 the respective protocols.
6446 In this mode, many questions may be sent and many answers may be
6447 analysed.
6448
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006449 A fifth mode can be used to insert comments in different steps of the
6450 script.
6451
6452 For each tcp-check rule you create, you can add a "comment" directive,
6453 followed by a string. This string will be reported in the log and stderr
6454 in debug mode. It is useful to make user-friendly error reporting.
6455 The "comment" is of course optional.
6456
6457
Willy Tarreaued179852013-12-16 01:07:00 +01006458 Examples :
6459 # perform a POP check (analyse only server's banner)
6460 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006461 tcp-check expect string +OK\ POP3\ ready comment POP\ protocol
Willy Tarreaued179852013-12-16 01:07:00 +01006462
6463 # perform an IMAP check (analyse only server's banner)
6464 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006465 tcp-check expect string *\ OK\ IMAP4\ ready comment IMAP\ protocol
Willy Tarreaued179852013-12-16 01:07:00 +01006466
6467 # look for the redis master server after ensuring it speaks well
6468 # redis protocol, then it exits properly.
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006469 # (send a command then analyse the response 3 times)
Willy Tarreaued179852013-12-16 01:07:00 +01006470 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006471 tcp-check comment PING\ phase
Willy Tarreaued179852013-12-16 01:07:00 +01006472 tcp-check send PING\r\n
Baptiste Assmanna3322992015-08-04 10:12:18 +02006473 tcp-check expect string +PONG
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006474 tcp-check comment role\ check
Willy Tarreaued179852013-12-16 01:07:00 +01006475 tcp-check send info\ replication\r\n
6476 tcp-check expect string role:master
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006477 tcp-check comment QUIT\ phase
Willy Tarreaued179852013-12-16 01:07:00 +01006478 tcp-check send QUIT\r\n
6479 tcp-check expect string +OK
6480
6481 forge a HTTP request, then analyse the response
6482 (send many headers before analyzing)
6483 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006484 tcp-check comment forge\ and\ send\ HTTP\ request
Willy Tarreaued179852013-12-16 01:07:00 +01006485 tcp-check send HEAD\ /\ HTTP/1.1\r\n
6486 tcp-check send Host:\ www.mydomain.com\r\n
6487 tcp-check send User-Agent:\ HAProxy\ tcpcheck\r\n
6488 tcp-check send \r\n
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006489 tcp-check expect rstring HTTP/1\..\ (2..|3..) comment check\ HTTP\ response
Willy Tarreaued179852013-12-16 01:07:00 +01006490
6491
6492 See also : "tcp-check expect", "tcp-check send"
6493
6494
Willy Tarreau9ea05a72009-06-14 12:07:01 +02006495option tcp-smart-accept
6496no option tcp-smart-accept
6497 Enable or disable the saving of one ACK packet during the accept sequence
6498 May be used in sections : defaults | frontend | listen | backend
6499 yes | yes | yes | no
6500 Arguments : none
6501
6502 When an HTTP connection request comes in, the system acknowledges it on
6503 behalf of HAProxy, then the client immediately sends its request, and the
6504 system acknowledges it too while it is notifying HAProxy about the new
6505 connection. HAProxy then reads the request and responds. This means that we
6506 have one TCP ACK sent by the system for nothing, because the request could
6507 very well be acknowledged by HAProxy when it sends its response.
6508
6509 For this reason, in HTTP mode, HAProxy automatically asks the system to avoid
6510 sending this useless ACK on platforms which support it (currently at least
6511 Linux). It must not cause any problem, because the system will send it anyway
6512 after 40 ms if the response takes more time than expected to come.
6513
6514 During complex network debugging sessions, it may be desirable to disable
6515 this optimization because delayed ACKs can make troubleshooting more complex
6516 when trying to identify where packets are delayed. It is then possible to
6517 fall back to normal behaviour by specifying "no option tcp-smart-accept".
6518
6519 It is also possible to force it for non-HTTP proxies by simply specifying
6520 "option tcp-smart-accept". For instance, it can make sense with some services
6521 such as SMTP where the server speaks first.
6522
6523 It is recommended to avoid forcing this option in a defaults section. In case
6524 of doubt, consider setting it back to automatic values by prepending the
6525 "default" keyword before it, or disabling it using the "no" keyword.
6526
Willy Tarreaud88edf22009-06-14 15:48:17 +02006527 See also : "option tcp-smart-connect"
6528
6529
6530option tcp-smart-connect
6531no option tcp-smart-connect
6532 Enable or disable the saving of one ACK packet during the connect sequence
6533 May be used in sections : defaults | frontend | listen | backend
6534 yes | no | yes | yes
6535 Arguments : none
6536
6537 On certain systems (at least Linux), HAProxy can ask the kernel not to
6538 immediately send an empty ACK upon a connection request, but to directly
6539 send the buffer request instead. This saves one packet on the network and
6540 thus boosts performance. It can also be useful for some servers, because they
6541 immediately get the request along with the incoming connection.
6542
6543 This feature is enabled when "option tcp-smart-connect" is set in a backend.
6544 It is not enabled by default because it makes network troubleshooting more
6545 complex.
6546
6547 It only makes sense to enable it with protocols where the client speaks first
6548 such as HTTP. In other situations, if there is no data to send in place of
6549 the ACK, a normal ACK is sent.
6550
6551 If this option has been enabled in a "defaults" section, it can be disabled
6552 in a specific instance by prepending the "no" keyword before it.
6553
6554 See also : "option tcp-smart-accept"
6555
Willy Tarreau9ea05a72009-06-14 12:07:01 +02006556
Willy Tarreaubf1f8162007-12-28 17:42:56 +01006557option tcpka
6558 Enable or disable the sending of TCP keepalive packets on both sides
6559 May be used in sections : defaults | frontend | listen | backend
6560 yes | yes | yes | yes
6561 Arguments : none
6562
6563 When there is a firewall or any session-aware component between a client and
6564 a server, and when the protocol involves very long sessions with long idle
6565 periods (eg: remote desktops), there is a risk that one of the intermediate
6566 components decides to expire a session which has remained idle for too long.
6567
6568 Enabling socket-level TCP keep-alives makes the system regularly send packets
6569 to the other end of the connection, leaving it active. The delay between
6570 keep-alive probes is controlled by the system only and depends both on the
6571 operating system and its tuning parameters.
6572
6573 It is important to understand that keep-alive packets are neither emitted nor
6574 received at the application level. It is only the network stacks which sees
6575 them. For this reason, even if one side of the proxy already uses keep-alives
6576 to maintain its connection alive, those keep-alive packets will not be
6577 forwarded to the other side of the proxy.
6578
6579 Please note that this has nothing to do with HTTP keep-alive.
6580
6581 Using option "tcpka" enables the emission of TCP keep-alive probes on both
6582 the client and server sides of a connection. Note that this is meaningful
6583 only in "defaults" or "listen" sections. If this option is used in a
6584 frontend, only the client side will get keep-alives, and if this option is
6585 used in a backend, only the server side will get keep-alives. For this
6586 reason, it is strongly recommended to explicitly use "option clitcpka" and
6587 "option srvtcpka" when the configuration is split between frontends and
6588 backends.
6589
6590 See also : "option clitcpka", "option srvtcpka"
6591
Willy Tarreau844e3c52008-01-11 16:28:18 +01006592
6593option tcplog
6594 Enable advanced logging of TCP connections with session state and timers
6595 May be used in sections : defaults | frontend | listen | backend
6596 yes | yes | yes | yes
6597 Arguments : none
6598
6599 By default, the log output format is very poor, as it only contains the
6600 source and destination addresses, and the instance name. By specifying
6601 "option tcplog", each log line turns into a much richer format including, but
6602 not limited to, the connection timers, the session status, the connections
6603 numbers, the frontend, backend and server name, and of course the source
6604 address and ports. This option is useful for pure TCP proxies in order to
6605 find which of the client or server disconnects or times out. For normal HTTP
6606 proxies, it's better to use "option httplog" which is even more complete.
6607
6608 This option may be set either in the frontend or the backend.
6609
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006610 See also : "option httplog", and section 8 about logging.
Willy Tarreau844e3c52008-01-11 16:28:18 +01006611
6612
Willy Tarreau844e3c52008-01-11 16:28:18 +01006613option transparent
6614no option transparent
6615 Enable client-side transparent proxying
6616 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +01006617 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +01006618 Arguments : none
6619
6620 This option was introduced in order to provide layer 7 persistence to layer 3
6621 load balancers. The idea is to use the OS's ability to redirect an incoming
6622 connection for a remote address to a local process (here HAProxy), and let
6623 this process know what address was initially requested. When this option is
6624 used, sessions without cookies will be forwarded to the original destination
6625 IP address of the incoming request (which should match that of another
6626 equipment), while requests with cookies will still be forwarded to the
6627 appropriate server.
6628
6629 Note that contrary to a common belief, this option does NOT make HAProxy
6630 present the client's IP to the server when establishing the connection.
6631
Willy Tarreaua1146052011-03-01 09:51:54 +01006632 See also: the "usesrc" argument of the "source" keyword, and the
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006633 "transparent" option of the "bind" keyword.
Willy Tarreau844e3c52008-01-11 16:28:18 +01006634
Willy Tarreaubf1f8162007-12-28 17:42:56 +01006635
Simon Horman98637e52014-06-20 12:30:16 +09006636external-check command <command>
6637 Executable to run when performing an external-check
6638 May be used in sections : defaults | frontend | listen | backend
6639 yes | no | yes | yes
6640
6641 Arguments :
6642 <command> is the external command to run
6643
Simon Horman98637e52014-06-20 12:30:16 +09006644 The arguments passed to the to the command are:
6645
Cyril Bonté777be862014-12-02 21:21:35 +01006646 <proxy_address> <proxy_port> <server_address> <server_port>
Simon Horman98637e52014-06-20 12:30:16 +09006647
Cyril Bonté777be862014-12-02 21:21:35 +01006648 The <proxy_address> and <proxy_port> are derived from the first listener
6649 that is either IPv4, IPv6 or a UNIX socket. In the case of a UNIX socket
6650 listener the proxy_address will be the path of the socket and the
6651 <proxy_port> will be the string "NOT_USED". In a backend section, it's not
6652 possible to determine a listener, and both <proxy_address> and <proxy_port>
6653 will have the string value "NOT_USED".
Simon Horman98637e52014-06-20 12:30:16 +09006654
Cyril Bonté72cda2a2014-12-27 22:28:39 +01006655 Some values are also provided through environment variables.
6656
6657 Environment variables :
6658 HAPROXY_PROXY_ADDR The first bind address if available (or empty if not
6659 applicable, for example in a "backend" section).
6660
6661 HAPROXY_PROXY_ID The backend id.
6662
6663 HAPROXY_PROXY_NAME The backend name.
6664
6665 HAPROXY_PROXY_PORT The first bind port if available (or empty if not
6666 applicable, for example in a "backend" section or
6667 for a UNIX socket).
6668
6669 HAPROXY_SERVER_ADDR The server address.
6670
6671 HAPROXY_SERVER_CURCONN The current number of connections on the server.
6672
6673 HAPROXY_SERVER_ID The server id.
6674
6675 HAPROXY_SERVER_MAXCONN The server max connections.
6676
6677 HAPROXY_SERVER_NAME The server name.
6678
6679 HAPROXY_SERVER_PORT The server port if available (or empty for a UNIX
6680 socket).
6681
6682 PATH The PATH environment variable used when executing
6683 the command may be set using "external-check path".
6684
Simon Horman98637e52014-06-20 12:30:16 +09006685 If the command executed and exits with a zero status then the check is
6686 considered to have passed, otherwise the check is considered to have
6687 failed.
6688
6689 Example :
6690 external-check command /bin/true
6691
6692 See also : "external-check", "option external-check", "external-check path"
6693
6694
6695external-check path <path>
6696 The value of the PATH environment variable used when running an external-check
6697 May be used in sections : defaults | frontend | listen | backend
6698 yes | no | yes | yes
6699
6700 Arguments :
6701 <path> is the path used when executing external command to run
6702
6703 The default path is "".
6704
6705 Example :
6706 external-check path "/usr/bin:/bin"
6707
6708 See also : "external-check", "option external-check",
6709 "external-check command"
6710
6711
Emeric Brun647caf12009-06-30 17:57:00 +02006712persist rdp-cookie
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02006713persist rdp-cookie(<name>)
Emeric Brun647caf12009-06-30 17:57:00 +02006714 Enable RDP cookie-based persistence
6715 May be used in sections : defaults | frontend | listen | backend
6716 yes | no | yes | yes
6717 Arguments :
6718 <name> is the optional name of the RDP cookie to check. If omitted, the
Willy Tarreau61e28f22010-05-16 22:31:05 +02006719 default cookie name "msts" will be used. There currently is no
6720 valid reason to change this name.
Emeric Brun647caf12009-06-30 17:57:00 +02006721
6722 This statement enables persistence based on an RDP cookie. The RDP cookie
6723 contains all information required to find the server in the list of known
6724 servers. So when this option is set in the backend, the request is analysed
6725 and if an RDP cookie is found, it is decoded. If it matches a known server
6726 which is still UP (or if "option persist" is set), then the connection is
6727 forwarded to this server.
6728
6729 Note that this only makes sense in a TCP backend, but for this to work, the
6730 frontend must have waited long enough to ensure that an RDP cookie is present
6731 in the request buffer. This is the same requirement as with the "rdp-cookie"
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006732 load-balancing method. Thus it is highly recommended to put all statements in
Emeric Brun647caf12009-06-30 17:57:00 +02006733 a single "listen" section.
6734
Willy Tarreau61e28f22010-05-16 22:31:05 +02006735 Also, it is important to understand that the terminal server will emit this
6736 RDP cookie only if it is configured for "token redirection mode", which means
6737 that the "IP address redirection" option is disabled.
6738
Emeric Brun647caf12009-06-30 17:57:00 +02006739 Example :
6740 listen tse-farm
6741 bind :3389
6742 # wait up to 5s for an RDP cookie in the request
6743 tcp-request inspect-delay 5s
6744 tcp-request content accept if RDP_COOKIE
6745 # apply RDP cookie persistence
6746 persist rdp-cookie
6747 # if server is unknown, let's balance on the same cookie.
Cyril Bontédc4d9032012-04-08 21:57:39 +02006748 # alternatively, "balance leastconn" may be useful too.
Emeric Brun647caf12009-06-30 17:57:00 +02006749 balance rdp-cookie
6750 server srv1 1.1.1.1:3389
6751 server srv2 1.1.1.2:3389
6752
Simon Hormanab814e02011-06-24 14:50:20 +09006753 See also : "balance rdp-cookie", "tcp-request", the "req_rdp_cookie" ACL and
6754 the rdp_cookie pattern fetch function.
Emeric Brun647caf12009-06-30 17:57:00 +02006755
6756
Willy Tarreau3a7d2072009-03-05 23:48:25 +01006757rate-limit sessions <rate>
6758 Set a limit on the number of new sessions accepted per second on a frontend
6759 May be used in sections : defaults | frontend | listen | backend
6760 yes | yes | yes | no
6761 Arguments :
6762 <rate> The <rate> parameter is an integer designating the maximum number
6763 of new sessions per second to accept on the frontend.
6764
6765 When the frontend reaches the specified number of new sessions per second, it
6766 stops accepting new connections until the rate drops below the limit again.
6767 During this time, the pending sessions will be kept in the socket's backlog
6768 (in system buffers) and haproxy will not even be aware that sessions are
6769 pending. When applying very low limit on a highly loaded service, it may make
6770 sense to increase the socket's backlog using the "backlog" keyword.
6771
6772 This feature is particularly efficient at blocking connection-based attacks
6773 or service abuse on fragile servers. Since the session rate is measured every
6774 millisecond, it is extremely accurate. Also, the limit applies immediately,
6775 no delay is needed at all to detect the threshold.
6776
6777 Example : limit the connection rate on SMTP to 10 per second max
6778 listen smtp
6779 mode tcp
6780 bind :25
6781 rate-limit sessions 10
Panagiotis Panagiotopoulos7282d8e2016-02-11 16:37:15 +02006782 server smtp1 127.0.0.1:1025
Willy Tarreau3a7d2072009-03-05 23:48:25 +01006783
Willy Tarreaua17c2d92011-07-25 08:16:20 +02006784 Note : when the maximum rate is reached, the frontend's status is not changed
6785 but its sockets appear as "WAITING" in the statistics if the
6786 "socket-stats" option is enabled.
Willy Tarreau3a7d2072009-03-05 23:48:25 +01006787
6788 See also : the "backlog" keyword and the "fe_sess_rate" ACL criterion.
6789
6790
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006791redirect location <loc> [code <code>] <option> [{if | unless} <condition>]
6792redirect prefix <pfx> [code <code>] <option> [{if | unless} <condition>]
6793redirect scheme <sch> [code <code>] <option> [{if | unless} <condition>]
Willy Tarreaub463dfb2008-06-07 23:08:56 +02006794 Return an HTTP redirection if/unless a condition is matched
6795 May be used in sections : defaults | frontend | listen | backend
6796 no | yes | yes | yes
6797
6798 If/unless the condition is matched, the HTTP request will lead to a redirect
Willy Tarreauf285f542010-01-03 20:03:03 +01006799 response. If no condition is specified, the redirect applies unconditionally.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02006800
Willy Tarreau0140f252008-11-19 21:07:09 +01006801 Arguments :
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006802 <loc> With "redirect location", the exact value in <loc> is placed into
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01006803 the HTTP "Location" header. When used in an "http-request" rule,
6804 <loc> value follows the log-format rules and can include some
6805 dynamic values (see Custom Log Format in section 8.2.4).
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006806
6807 <pfx> With "redirect prefix", the "Location" header is built from the
6808 concatenation of <pfx> and the complete URI path, including the
6809 query string, unless the "drop-query" option is specified (see
6810 below). As a special case, if <pfx> equals exactly "/", then
6811 nothing is inserted before the original URI. It allows one to
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01006812 redirect to the same URL (for instance, to insert a cookie). When
6813 used in an "http-request" rule, <pfx> value follows the log-format
6814 rules and can include some dynamic values (see Custom Log Format
6815 in section 8.2.4).
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006816
6817 <sch> With "redirect scheme", then the "Location" header is built by
6818 concatenating <sch> with "://" then the first occurrence of the
6819 "Host" header, and then the URI path, including the query string
6820 unless the "drop-query" option is specified (see below). If no
6821 path is found or if the path is "*", then "/" is used instead. If
6822 no "Host" header is found, then an empty host component will be
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006823 returned, which most recent browsers interpret as redirecting to
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006824 the same host. This directive is mostly used to redirect HTTP to
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01006825 HTTPS. When used in an "http-request" rule, <sch> value follows
6826 the log-format rules and can include some dynamic values (see
6827 Custom Log Format in section 8.2.4).
Willy Tarreau0140f252008-11-19 21:07:09 +01006828
6829 <code> The code is optional. It indicates which type of HTTP redirection
Willy Tarreaub67fdc42013-03-29 19:28:11 +01006830 is desired. Only codes 301, 302, 303, 307 and 308 are supported,
6831 with 302 used by default if no code is specified. 301 means
6832 "Moved permanently", and a browser may cache the Location. 302
Baptiste Assmannea849c02015-08-03 11:42:50 +02006833 means "Moved temporarily" and means that the browser should not
Willy Tarreaub67fdc42013-03-29 19:28:11 +01006834 cache the redirection. 303 is equivalent to 302 except that the
6835 browser will fetch the location with a GET method. 307 is just
6836 like 302 but makes it clear that the same method must be reused.
6837 Likewise, 308 replaces 301 if the same method must be used.
Willy Tarreau0140f252008-11-19 21:07:09 +01006838
6839 <option> There are several options which can be specified to adjust the
6840 expected behaviour of a redirection :
6841
6842 - "drop-query"
6843 When this keyword is used in a prefix-based redirection, then the
6844 location will be set without any possible query-string, which is useful
6845 for directing users to a non-secure page for instance. It has no effect
6846 with a location-type redirect.
6847
Willy Tarreau81e3b4f2010-01-10 00:42:19 +01006848 - "append-slash"
6849 This keyword may be used in conjunction with "drop-query" to redirect
6850 users who use a URL not ending with a '/' to the same one with the '/'.
6851 It can be useful to ensure that search engines will only see one URL.
6852 For this, a return code 301 is preferred.
6853
Willy Tarreau0140f252008-11-19 21:07:09 +01006854 - "set-cookie NAME[=value]"
6855 A "Set-Cookie" header will be added with NAME (and optionally "=value")
6856 to the response. This is sometimes used to indicate that a user has
6857 been seen, for instance to protect against some types of DoS. No other
6858 cookie option is added, so the cookie will be a session cookie. Note
6859 that for a browser, a sole cookie name without an equal sign is
6860 different from a cookie with an equal sign.
6861
6862 - "clear-cookie NAME[=]"
6863 A "Set-Cookie" header will be added with NAME (and optionally "="), but
6864 with the "Max-Age" attribute set to zero. This will tell the browser to
6865 delete this cookie. It is useful for instance on logout pages. It is
6866 important to note that clearing the cookie "NAME" will not remove a
6867 cookie set with "NAME=value". You have to clear the cookie "NAME=" for
6868 that, because the browser makes the difference.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02006869
6870 Example: move the login URL only to HTTPS.
6871 acl clear dst_port 80
6872 acl secure dst_port 8080
6873 acl login_page url_beg /login
Willy Tarreau0140f252008-11-19 21:07:09 +01006874 acl logout url_beg /logout
Willy Tarreau79da4692008-11-19 20:03:04 +01006875 acl uid_given url_reg /login?userid=[^&]+
Willy Tarreau0140f252008-11-19 21:07:09 +01006876 acl cookie_set hdr_sub(cookie) SEEN=1
6877
6878 redirect prefix https://mysite.com set-cookie SEEN=1 if !cookie_set
Willy Tarreau79da4692008-11-19 20:03:04 +01006879 redirect prefix https://mysite.com if login_page !secure
6880 redirect prefix http://mysite.com drop-query if login_page !uid_given
6881 redirect location http://mysite.com/ if !login_page secure
Willy Tarreau0140f252008-11-19 21:07:09 +01006882 redirect location / clear-cookie USERID= if logout
Willy Tarreaub463dfb2008-06-07 23:08:56 +02006883
Willy Tarreau81e3b4f2010-01-10 00:42:19 +01006884 Example: send redirects for request for articles without a '/'.
6885 acl missing_slash path_reg ^/article/[^/]*$
6886 redirect code 301 prefix / drop-query append-slash if missing_slash
6887
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006888 Example: redirect all HTTP traffic to HTTPS when SSL is handled by haproxy.
David BERARDe7153042012-11-03 00:11:31 +01006889 redirect scheme https if !{ ssl_fc }
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006890
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01006891 Example: append 'www.' prefix in front of all hosts not having it
Coen Rosdorff596659b2016-04-11 11:33:49 +02006892 http-request redirect code 301 location \
6893 http://www.%[hdr(host)]%[capture.req.uri] \
6894 unless { hdr_beg(host) -i www }
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01006895
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006896 See section 7 about ACL usage.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02006897
6898
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006899redisp (deprecated)
6900redispatch (deprecated)
6901 Enable or disable session redistribution in case of connection failure
6902 May be used in sections: defaults | frontend | listen | backend
6903 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006904 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006905
6906 In HTTP mode, if a server designated by a cookie is down, clients may
6907 definitely stick to it because they cannot flush the cookie, so they will not
6908 be able to access the service anymore.
6909
6910 Specifying "redispatch" will allow the proxy to break their persistence and
6911 redistribute them to a working server.
6912
6913 It also allows to retry last connection to another server in case of multiple
6914 connection failures. Of course, it requires having "retries" set to a nonzero
6915 value.
Willy Tarreaud72758d2010-01-12 10:42:19 +01006916
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006917 This form is deprecated, do not use it in any new configuration, use the new
6918 "option redispatch" instead.
6919
6920 See also : "option redispatch"
6921
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006922
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01006923reqadd <string> [{if | unless} <cond>]
Willy Tarreau303c0352008-01-17 19:01:39 +01006924 Add a header at the end of the HTTP request
6925 May be used in sections : defaults | frontend | listen | backend
6926 no | yes | yes | yes
6927 Arguments :
6928 <string> is the complete line to be added. Any space or known delimiter
6929 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006930 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01006931
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01006932 <cond> is an optional matching condition built from ACLs. It makes it
6933 possible to ignore this rule when other conditions are not met.
6934
Willy Tarreau303c0352008-01-17 19:01:39 +01006935 A new line consisting in <string> followed by a line feed will be added after
6936 the last header of an HTTP request.
6937
6938 Header transformations only apply to traffic which passes through HAProxy,
6939 and not to traffic generated by HAProxy, such as health-checks or error
6940 responses.
6941
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01006942 Example : add "X-Proto: SSL" to requests coming via port 81
6943 acl is-ssl dst_port 81
6944 reqadd X-Proto:\ SSL if is-ssl
6945
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08006946 See also: "rspadd", "http-request", section 6 about HTTP header manipulation,
6947 and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01006948
6949
Willy Tarreau5321c422010-01-28 20:35:13 +01006950reqallow <search> [{if | unless} <cond>]
6951reqiallow <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01006952 Definitely allow an HTTP request if a line matches a regular expression
6953 May be used in sections : defaults | frontend | listen | backend
6954 no | yes | yes | yes
6955 Arguments :
6956 <search> is the regular expression applied to HTTP headers and to the
6957 request line. This is an extended regular expression. Parenthesis
6958 grouping is supported and no preliminary backslash is required.
6959 Any space or known delimiter must be escaped using a backslash
6960 ('\'). The pattern applies to a full line at a time. The
6961 "reqallow" keyword strictly matches case while "reqiallow"
6962 ignores case.
6963
Willy Tarreau5321c422010-01-28 20:35:13 +01006964 <cond> is an optional matching condition built from ACLs. It makes it
6965 possible to ignore this rule when other conditions are not met.
6966
Willy Tarreau303c0352008-01-17 19:01:39 +01006967 A request containing any line which matches extended regular expression
6968 <search> will mark the request as allowed, even if any later test would
6969 result in a deny. The test applies both to the request line and to request
6970 headers. Keep in mind that URLs in request line are case-sensitive while
Willy Tarreaud72758d2010-01-12 10:42:19 +01006971 header names are not.
Willy Tarreau303c0352008-01-17 19:01:39 +01006972
6973 It is easier, faster and more powerful to use ACLs to write access policies.
6974 Reqdeny, reqallow and reqpass should be avoided in new designs.
6975
6976 Example :
6977 # allow www.* but refuse *.local
6978 reqiallow ^Host:\ www\.
6979 reqideny ^Host:\ .*\.local
6980
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08006981 See also: "reqdeny", "block", "http-request", section 6 about HTTP header
6982 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01006983
6984
Willy Tarreau5321c422010-01-28 20:35:13 +01006985reqdel <search> [{if | unless} <cond>]
6986reqidel <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01006987 Delete all headers matching a regular expression in an HTTP request
6988 May be used in sections : defaults | frontend | listen | backend
6989 no | yes | yes | yes
6990 Arguments :
6991 <search> is the regular expression applied to HTTP headers and to the
6992 request line. This is an extended regular expression. Parenthesis
6993 grouping is supported and no preliminary backslash is required.
6994 Any space or known delimiter must be escaped using a backslash
6995 ('\'). The pattern applies to a full line at a time. The "reqdel"
6996 keyword strictly matches case while "reqidel" ignores case.
6997
Willy Tarreau5321c422010-01-28 20:35:13 +01006998 <cond> is an optional matching condition built from ACLs. It makes it
6999 possible to ignore this rule when other conditions are not met.
7000
Willy Tarreau303c0352008-01-17 19:01:39 +01007001 Any header line matching extended regular expression <search> in the request
7002 will be completely deleted. Most common use of this is to remove unwanted
7003 and/or dangerous headers or cookies from a request before passing it to the
7004 next servers.
7005
7006 Header transformations only apply to traffic which passes through HAProxy,
7007 and not to traffic generated by HAProxy, such as health-checks or error
7008 responses. Keep in mind that header names are not case-sensitive.
7009
7010 Example :
7011 # remove X-Forwarded-For header and SERVER cookie
7012 reqidel ^X-Forwarded-For:.*
7013 reqidel ^Cookie:.*SERVER=
7014
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007015 See also: "reqadd", "reqrep", "rspdel", "http-request", section 6 about
7016 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007017
7018
Willy Tarreau5321c422010-01-28 20:35:13 +01007019reqdeny <search> [{if | unless} <cond>]
7020reqideny <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007021 Deny an HTTP request if a line matches a regular expression
7022 May be used in sections : defaults | frontend | listen | backend
7023 no | yes | yes | yes
7024 Arguments :
7025 <search> is the regular expression applied to HTTP headers and to the
7026 request line. This is an extended regular expression. Parenthesis
7027 grouping is supported and no preliminary backslash is required.
7028 Any space or known delimiter must be escaped using a backslash
7029 ('\'). The pattern applies to a full line at a time. The
7030 "reqdeny" keyword strictly matches case while "reqideny" ignores
7031 case.
7032
Willy Tarreau5321c422010-01-28 20:35:13 +01007033 <cond> is an optional matching condition built from ACLs. It makes it
7034 possible to ignore this rule when other conditions are not met.
7035
Willy Tarreau303c0352008-01-17 19:01:39 +01007036 A request containing any line which matches extended regular expression
7037 <search> will mark the request as denied, even if any later test would
7038 result in an allow. The test applies both to the request line and to request
7039 headers. Keep in mind that URLs in request line are case-sensitive while
Willy Tarreaud72758d2010-01-12 10:42:19 +01007040 header names are not.
Willy Tarreau303c0352008-01-17 19:01:39 +01007041
Willy Tarreauced27012008-01-17 20:35:34 +01007042 A denied request will generate an "HTTP 403 forbidden" response once the
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01007043 complete request has been parsed. This is consistent with what is practiced
Willy Tarreaud72758d2010-01-12 10:42:19 +01007044 using ACLs.
Willy Tarreauced27012008-01-17 20:35:34 +01007045
Willy Tarreau303c0352008-01-17 19:01:39 +01007046 It is easier, faster and more powerful to use ACLs to write access policies.
7047 Reqdeny, reqallow and reqpass should be avoided in new designs.
7048
7049 Example :
7050 # refuse *.local, then allow www.*
7051 reqideny ^Host:\ .*\.local
7052 reqiallow ^Host:\ www\.
7053
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007054 See also: "reqallow", "rspdeny", "block", "http-request", section 6 about
7055 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007056
7057
Willy Tarreau5321c422010-01-28 20:35:13 +01007058reqpass <search> [{if | unless} <cond>]
7059reqipass <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007060 Ignore any HTTP request line matching a regular expression in next rules
7061 May be used in sections : defaults | frontend | listen | backend
7062 no | yes | yes | yes
7063 Arguments :
7064 <search> is the regular expression applied to HTTP headers and to the
7065 request line. This is an extended regular expression. Parenthesis
7066 grouping is supported and no preliminary backslash is required.
7067 Any space or known delimiter must be escaped using a backslash
7068 ('\'). The pattern applies to a full line at a time. The
7069 "reqpass" keyword strictly matches case while "reqipass" ignores
7070 case.
7071
Willy Tarreau5321c422010-01-28 20:35:13 +01007072 <cond> is an optional matching condition built from ACLs. It makes it
7073 possible to ignore this rule when other conditions are not met.
7074
Willy Tarreau303c0352008-01-17 19:01:39 +01007075 A request containing any line which matches extended regular expression
7076 <search> will skip next rules, without assigning any deny or allow verdict.
7077 The test applies both to the request line and to request headers. Keep in
7078 mind that URLs in request line are case-sensitive while header names are not.
7079
7080 It is easier, faster and more powerful to use ACLs to write access policies.
7081 Reqdeny, reqallow and reqpass should be avoided in new designs.
7082
7083 Example :
7084 # refuse *.local, then allow www.*, but ignore "www.private.local"
7085 reqipass ^Host:\ www.private\.local
7086 reqideny ^Host:\ .*\.local
7087 reqiallow ^Host:\ www\.
7088
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007089 See also: "reqallow", "reqdeny", "block", "http-request", section 6 about
7090 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007091
7092
Willy Tarreau5321c422010-01-28 20:35:13 +01007093reqrep <search> <string> [{if | unless} <cond>]
7094reqirep <search> <string> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007095 Replace a regular expression with a string in an HTTP request line
7096 May be used in sections : defaults | frontend | listen | backend
7097 no | yes | yes | yes
7098 Arguments :
7099 <search> is the regular expression applied to HTTP headers and to the
7100 request line. This is an extended regular expression. Parenthesis
7101 grouping is supported and no preliminary backslash is required.
7102 Any space or known delimiter must be escaped using a backslash
7103 ('\'). The pattern applies to a full line at a time. The "reqrep"
7104 keyword strictly matches case while "reqirep" ignores case.
7105
7106 <string> is the complete line to be added. Any space or known delimiter
7107 must be escaped using a backslash ('\'). References to matched
7108 pattern groups are possible using the common \N form, with N
7109 being a single digit between 0 and 9. Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007110 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01007111
Willy Tarreau5321c422010-01-28 20:35:13 +01007112 <cond> is an optional matching condition built from ACLs. It makes it
7113 possible to ignore this rule when other conditions are not met.
7114
Willy Tarreau303c0352008-01-17 19:01:39 +01007115 Any line matching extended regular expression <search> in the request (both
7116 the request line and header lines) will be completely replaced with <string>.
7117 Most common use of this is to rewrite URLs or domain names in "Host" headers.
7118
7119 Header transformations only apply to traffic which passes through HAProxy,
7120 and not to traffic generated by HAProxy, such as health-checks or error
7121 responses. Note that for increased readability, it is suggested to add enough
7122 spaces between the request and the response. Keep in mind that URLs in
7123 request line are case-sensitive while header names are not.
7124
7125 Example :
7126 # replace "/static/" with "/" at the beginning of any request path.
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04007127 reqrep ^([^\ :]*)\ /static/(.*) \1\ /\2
Willy Tarreau303c0352008-01-17 19:01:39 +01007128 # replace "www.mydomain.com" with "www" in the host name.
7129 reqirep ^Host:\ www.mydomain.com Host:\ www
7130
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007131 See also: "reqadd", "reqdel", "rsprep", "tune.bufsize", "http-request",
7132 section 6 about HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007133
7134
Willy Tarreau5321c422010-01-28 20:35:13 +01007135reqtarpit <search> [{if | unless} <cond>]
7136reqitarpit <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007137 Tarpit an HTTP request containing a line matching a regular expression
7138 May be used in sections : defaults | frontend | listen | backend
7139 no | yes | yes | yes
7140 Arguments :
7141 <search> is the regular expression applied to HTTP headers and to the
7142 request line. This is an extended regular expression. Parenthesis
7143 grouping is supported and no preliminary backslash is required.
7144 Any space or known delimiter must be escaped using a backslash
7145 ('\'). The pattern applies to a full line at a time. The
7146 "reqtarpit" keyword strictly matches case while "reqitarpit"
7147 ignores case.
7148
Willy Tarreau5321c422010-01-28 20:35:13 +01007149 <cond> is an optional matching condition built from ACLs. It makes it
7150 possible to ignore this rule when other conditions are not met.
7151
Willy Tarreau303c0352008-01-17 19:01:39 +01007152 A request containing any line which matches extended regular expression
7153 <search> will be tarpitted, which means that it will connect to nowhere, will
Willy Tarreauced27012008-01-17 20:35:34 +01007154 be kept open for a pre-defined time, then will return an HTTP error 500 so
7155 that the attacker does not suspect it has been tarpitted. The status 500 will
7156 be reported in the logs, but the completion flags will indicate "PT". The
Willy Tarreau303c0352008-01-17 19:01:39 +01007157 delay is defined by "timeout tarpit", or "timeout connect" if the former is
7158 not set.
7159
7160 The goal of the tarpit is to slow down robots attacking servers with
7161 identifiable requests. Many robots limit their outgoing number of connections
7162 and stay connected waiting for a reply which can take several minutes to
7163 come. Depending on the environment and attack, it may be particularly
7164 efficient at reducing the load on the network and firewalls.
7165
Willy Tarreau5321c422010-01-28 20:35:13 +01007166 Examples :
Willy Tarreau303c0352008-01-17 19:01:39 +01007167 # ignore user-agents reporting any flavour of "Mozilla" or "MSIE", but
7168 # block all others.
7169 reqipass ^User-Agent:\.*(Mozilla|MSIE)
7170 reqitarpit ^User-Agent:
7171
Willy Tarreau5321c422010-01-28 20:35:13 +01007172 # block bad guys
7173 acl badguys src 10.1.0.3 172.16.13.20/28
7174 reqitarpit . if badguys
7175
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007176 See also: "reqallow", "reqdeny", "reqpass", "http-request", section 6
7177 about HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007178
7179
Willy Tarreaue5c5ce92008-06-20 17:27:19 +02007180retries <value>
7181 Set the number of retries to perform on a server after a connection failure
7182 May be used in sections: defaults | frontend | listen | backend
7183 yes | no | yes | yes
7184 Arguments :
7185 <value> is the number of times a connection attempt should be retried on
7186 a server when a connection either is refused or times out. The
7187 default value is 3.
7188
7189 It is important to understand that this value applies to the number of
7190 connection attempts, not full requests. When a connection has effectively
7191 been established to a server, there will be no more retry.
7192
7193 In order to avoid immediate reconnections to a server which is restarting,
Joseph Lynch726ab712015-05-11 23:25:34 -07007194 a turn-around timer of min("timeout connect", one second) is applied before
7195 a retry occurs.
Willy Tarreaue5c5ce92008-06-20 17:27:19 +02007196
7197 When "option redispatch" is set, the last retry may be performed on another
7198 server even if a cookie references a different server.
7199
7200 See also : "option redispatch"
7201
7202
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007203rspadd <string> [{if | unless} <cond>]
Willy Tarreau303c0352008-01-17 19:01:39 +01007204 Add a header at the end of the HTTP response
7205 May be used in sections : defaults | frontend | listen | backend
7206 no | yes | yes | yes
7207 Arguments :
7208 <string> is the complete line to be added. Any space or known delimiter
7209 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007210 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01007211
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007212 <cond> is an optional matching condition built from ACLs. It makes it
7213 possible to ignore this rule when other conditions are not met.
7214
Willy Tarreau303c0352008-01-17 19:01:39 +01007215 A new line consisting in <string> followed by a line feed will be added after
7216 the last header of an HTTP response.
7217
7218 Header transformations only apply to traffic which passes through HAProxy,
7219 and not to traffic generated by HAProxy, such as health-checks or error
7220 responses.
7221
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007222 See also: "rspdel" "reqadd", "http-response", section 6 about HTTP header
7223 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007224
7225
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007226rspdel <search> [{if | unless} <cond>]
7227rspidel <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007228 Delete all headers matching a regular expression in an HTTP response
7229 May be used in sections : defaults | frontend | listen | backend
7230 no | yes | yes | yes
7231 Arguments :
7232 <search> is the regular expression applied to HTTP headers and to the
7233 response line. This is an extended regular expression, so
7234 parenthesis grouping is supported and no preliminary backslash
7235 is required. Any space or known delimiter must be escaped using
7236 a backslash ('\'). The pattern applies to a full line at a time.
7237 The "rspdel" keyword strictly matches case while "rspidel"
7238 ignores case.
7239
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007240 <cond> is an optional matching condition built from ACLs. It makes it
7241 possible to ignore this rule when other conditions are not met.
7242
Willy Tarreau303c0352008-01-17 19:01:39 +01007243 Any header line matching extended regular expression <search> in the response
7244 will be completely deleted. Most common use of this is to remove unwanted
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02007245 and/or sensitive headers or cookies from a response before passing it to the
Willy Tarreau303c0352008-01-17 19:01:39 +01007246 client.
7247
7248 Header transformations only apply to traffic which passes through HAProxy,
7249 and not to traffic generated by HAProxy, such as health-checks or error
7250 responses. Keep in mind that header names are not case-sensitive.
7251
7252 Example :
7253 # remove the Server header from responses
Willy Tarreau5e80e022013-05-25 08:31:25 +02007254 rspidel ^Server:.*
Willy Tarreau303c0352008-01-17 19:01:39 +01007255
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007256 See also: "rspadd", "rsprep", "reqdel", "http-response", section 6 about
7257 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007258
7259
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007260rspdeny <search> [{if | unless} <cond>]
7261rspideny <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007262 Block an HTTP response if a line matches a regular expression
7263 May be used in sections : defaults | frontend | listen | backend
7264 no | yes | yes | yes
7265 Arguments :
7266 <search> is the regular expression applied to HTTP headers and to the
7267 response line. This is an extended regular expression, so
7268 parenthesis grouping is supported and no preliminary backslash
7269 is required. Any space or known delimiter must be escaped using
7270 a backslash ('\'). The pattern applies to a full line at a time.
7271 The "rspdeny" keyword strictly matches case while "rspideny"
7272 ignores case.
7273
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007274 <cond> is an optional matching condition built from ACLs. It makes it
7275 possible to ignore this rule when other conditions are not met.
7276
Willy Tarreau303c0352008-01-17 19:01:39 +01007277 A response containing any line which matches extended regular expression
7278 <search> will mark the request as denied. The test applies both to the
7279 response line and to response headers. Keep in mind that header names are not
7280 case-sensitive.
7281
7282 Main use of this keyword is to prevent sensitive information leak and to
Willy Tarreauced27012008-01-17 20:35:34 +01007283 block the response before it reaches the client. If a response is denied, it
7284 will be replaced with an HTTP 502 error so that the client never retrieves
7285 any sensitive data.
Willy Tarreau303c0352008-01-17 19:01:39 +01007286
7287 It is easier, faster and more powerful to use ACLs to write access policies.
7288 Rspdeny should be avoided in new designs.
7289
7290 Example :
7291 # Ensure that no content type matching ms-word will leak
7292 rspideny ^Content-type:\.*/ms-word
7293
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007294 See also: "reqdeny", "acl", "block", "http-response", section 6 about
7295 HTTP header manipulation and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007296
7297
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007298rsprep <search> <string> [{if | unless} <cond>]
7299rspirep <search> <string> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007300 Replace a regular expression with a string in an HTTP response line
7301 May be used in sections : defaults | frontend | listen | backend
7302 no | yes | yes | yes
7303 Arguments :
7304 <search> is the regular expression applied to HTTP headers and to the
7305 response line. This is an extended regular expression, so
7306 parenthesis grouping is supported and no preliminary backslash
7307 is required. Any space or known delimiter must be escaped using
7308 a backslash ('\'). The pattern applies to a full line at a time.
7309 The "rsprep" keyword strictly matches case while "rspirep"
7310 ignores case.
7311
7312 <string> is the complete line to be added. Any space or known delimiter
7313 must be escaped using a backslash ('\'). References to matched
7314 pattern groups are possible using the common \N form, with N
7315 being a single digit between 0 and 9. Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007316 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01007317
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007318 <cond> is an optional matching condition built from ACLs. It makes it
7319 possible to ignore this rule when other conditions are not met.
7320
Willy Tarreau303c0352008-01-17 19:01:39 +01007321 Any line matching extended regular expression <search> in the response (both
7322 the response line and header lines) will be completely replaced with
7323 <string>. Most common use of this is to rewrite Location headers.
7324
7325 Header transformations only apply to traffic which passes through HAProxy,
7326 and not to traffic generated by HAProxy, such as health-checks or error
7327 responses. Note that for increased readability, it is suggested to add enough
7328 spaces between the request and the response. Keep in mind that header names
7329 are not case-sensitive.
7330
7331 Example :
7332 # replace "Location: 127.0.0.1:8080" with "Location: www.mydomain.com"
7333 rspirep ^Location:\ 127.0.0.1:8080 Location:\ www.mydomain.com
7334
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007335 See also: "rspadd", "rspdel", "reqrep", "http-response", section 6 about
7336 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007337
7338
David du Colombier486df472011-03-17 10:40:26 +01007339server <name> <address>[:[port]] [param*]
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007340 Declare a server in a backend
7341 May be used in sections : defaults | frontend | listen | backend
7342 no | no | yes | yes
7343 Arguments :
7344 <name> is the internal name assigned to this server. This name will
Cyril Bonté941a0c62012-10-15 19:44:24 +02007345 appear in logs and alerts. If "http-send-name-header" is
Mark Lamourinec2247f02012-01-04 13:02:01 -05007346 set, it will be added to the request header sent to the server.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007347
David du Colombier486df472011-03-17 10:40:26 +01007348 <address> is the IPv4 or IPv6 address of the server. Alternatively, a
7349 resolvable hostname is supported, but this name will be resolved
7350 during start-up. Address "0.0.0.0" or "*" has a special meaning.
7351 It indicates that the connection will be forwarded to the same IP
Willy Tarreaud669a4f2010-07-13 14:49:50 +02007352 address as the one from the client connection. This is useful in
7353 transparent proxy architectures where the client's connection is
7354 intercepted and haproxy must forward to the original destination
7355 address. This is more or less what the "transparent" keyword does
7356 except that with a server it's possible to limit concurrency and
Willy Tarreau24709282013-03-10 21:32:12 +01007357 to report statistics. Optionally, an address family prefix may be
7358 used before the address to force the family regardless of the
7359 address format, which can be useful to specify a path to a unix
7360 socket with no slash ('/'). Currently supported prefixes are :
7361 - 'ipv4@' -> address is always IPv4
7362 - 'ipv6@' -> address is always IPv6
7363 - 'unix@' -> address is a path to a local unix socket
Willy Tarreauccfccef2014-05-10 01:49:15 +02007364 - 'abns@' -> address is in abstract namespace (Linux only)
William Lallemandb2f07452015-05-12 14:27:13 +02007365 You may want to reference some environment variables in the
7366 address parameter, see section 2.3 about environment
Willy Tarreau6a031d12016-11-07 19:42:35 +01007367 variables. The "init-addr" setting can be used to modify the way
7368 IP addresses should be resolved upon startup.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007369
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007370 <port> is an optional port specification. If set, all connections will
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007371 be sent to this port. If unset, the same port the client
7372 connected to will be used. The port may also be prefixed by a "+"
7373 or a "-". In this case, the server's port will be determined by
7374 adding this value to the client's port.
7375
7376 <param*> is a list of parameters for this server. The "server" keywords
7377 accepts an important number of options and has a complete section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007378 dedicated to it. Please refer to section 5 for more details.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007379
7380 Examples :
7381 server first 10.1.1.1:1080 cookie first check inter 1000
7382 server second 10.1.1.2:1080 cookie second check inter 1000
Willy Tarreau24709282013-03-10 21:32:12 +01007383 server transp ipv4@
William Lallemandb2f07452015-05-12 14:27:13 +02007384 server backup "${SRV_BACKUP}:1080" backup
7385 server www1_dc1 "${LAN_DC1}.101:80"
7386 server www1_dc2 "${LAN_DC2}.101:80"
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007387
Willy Tarreau55dcaf62015-09-27 15:03:15 +02007388 Note: regarding Linux's abstract namespace sockets, HAProxy uses the whole
7389 sun_path length is used for the address length. Some other programs
7390 such as socat use the string length only by default. Pass the option
7391 ",unix-tightsocklen=0" to any abstract socket definition in socat to
7392 make it compatible with HAProxy's.
7393
Mark Lamourinec2247f02012-01-04 13:02:01 -05007394 See also: "default-server", "http-send-name-header" and section 5 about
7395 server options
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007396
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02007397server-state-file-name [<file>]
7398 Set the server state file to read, load and apply to servers available in
7399 this backend. It only applies when the directive "load-server-state-from-file"
7400 is set to "local". When <file> is not provided or if this directive is not
7401 set, then backend name is used. If <file> starts with a slash '/', then it is
7402 considered as an absolute path. Otherwise, <file> is concatenated to the
7403 global directive "server-state-file-base".
7404
7405 Example: the minimal configuration below would make HAProxy look for the
7406 state server file '/etc/haproxy/states/bk':
7407
7408 global
7409 server-state-file-base /etc/haproxy/states
7410
7411 backend bk
7412 load-server-state-from-file
7413
7414 See also: "server-state-file-base", "load-server-state-from-file", and
7415 "show servers state"
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007416
7417source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreaubce70882009-09-07 11:51:47 +02007418source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
Willy Tarreaud53f96b2009-02-04 18:46:54 +01007419source <addr>[:<port>] [interface <name>]
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007420 Set the source address for outgoing connections
7421 May be used in sections : defaults | frontend | listen | backend
7422 yes | no | yes | yes
7423 Arguments :
7424 <addr> is the IPv4 address HAProxy will bind to before connecting to a
7425 server. This address is also used as a source for health checks.
Willy Tarreau24709282013-03-10 21:32:12 +01007426
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007427 The default value of 0.0.0.0 means that the system will select
Willy Tarreau24709282013-03-10 21:32:12 +01007428 the most appropriate address to reach its destination. Optionally
7429 an address family prefix may be used before the address to force
7430 the family regardless of the address format, which can be useful
7431 to specify a path to a unix socket with no slash ('/'). Currently
7432 supported prefixes are :
7433 - 'ipv4@' -> address is always IPv4
7434 - 'ipv6@' -> address is always IPv6
7435 - 'unix@' -> address is a path to a local unix socket
Willy Tarreauccfccef2014-05-10 01:49:15 +02007436 - 'abns@' -> address is in abstract namespace (Linux only)
Cyril Bonté307ee1e2015-09-28 23:16:06 +02007437 You may want to reference some environment variables in the
7438 address parameter, see section 2.3 about environment variables.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007439
7440 <port> is an optional port. It is normally not needed but may be useful
7441 in some very specific contexts. The default value of zero means
Willy Tarreauc6f4ce82009-06-10 11:09:37 +02007442 the system will select a free port. Note that port ranges are not
7443 supported in the backend. If you want to force port ranges, you
7444 have to specify them on each "server" line.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007445
7446 <addr2> is the IP address to present to the server when connections are
7447 forwarded in full transparent proxy mode. This is currently only
7448 supported on some patched Linux kernels. When this address is
7449 specified, clients connecting to the server will be presented
7450 with this address, while health checks will still use the address
7451 <addr>.
7452
7453 <port2> is the optional port to present to the server when connections
7454 are forwarded in full transparent proxy mode (see <addr2> above).
7455 The default value of zero means the system will select a free
7456 port.
7457
Willy Tarreaubce70882009-09-07 11:51:47 +02007458 <hdr> is the name of a HTTP header in which to fetch the IP to bind to.
7459 This is the name of a comma-separated header list which can
7460 contain multiple IP addresses. By default, the last occurrence is
7461 used. This is designed to work with the X-Forwarded-For header
Baptiste Assmannea3e73b2013-02-02 23:47:49 +01007462 and to automatically bind to the client's IP address as seen
Willy Tarreaubce70882009-09-07 11:51:47 +02007463 by previous proxy, typically Stunnel. In order to use another
7464 occurrence from the last one, please see the <occ> parameter
7465 below. When the header (or occurrence) is not found, no binding
7466 is performed so that the proxy's default IP address is used. Also
7467 keep in mind that the header name is case insensitive, as for any
7468 HTTP header.
7469
7470 <occ> is the occurrence number of a value to be used in a multi-value
7471 header. This is to be used in conjunction with "hdr_ip(<hdr>)",
Jamie Gloudonaaa21002012-08-25 00:18:33 -04007472 in order to specify which occurrence to use for the source IP
Willy Tarreaubce70882009-09-07 11:51:47 +02007473 address. Positive values indicate a position from the first
7474 occurrence, 1 being the first one. Negative values indicate
7475 positions relative to the last one, -1 being the last one. This
7476 is helpful for situations where an X-Forwarded-For header is set
7477 at the entry point of an infrastructure and must be used several
7478 proxy layers away. When this value is not specified, -1 is
7479 assumed. Passing a zero here disables the feature.
7480
Willy Tarreaud53f96b2009-02-04 18:46:54 +01007481 <name> is an optional interface name to which to bind to for outgoing
7482 traffic. On systems supporting this features (currently, only
7483 Linux), this allows one to bind all traffic to the server to
7484 this interface even if it is not the one the system would select
7485 based on routing tables. This should be used with extreme care.
7486 Note that using this option requires root privileges.
7487
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007488 The "source" keyword is useful in complex environments where a specific
7489 address only is allowed to connect to the servers. It may be needed when a
7490 private address must be used through a public gateway for instance, and it is
7491 known that the system cannot determine the adequate source address by itself.
7492
7493 An extension which is available on certain patched Linux kernels may be used
7494 through the "usesrc" optional keyword. It makes it possible to connect to the
7495 servers with an IP address which does not belong to the system itself. This
7496 is called "full transparent proxy mode". For this to work, the destination
7497 servers have to route their traffic back to this address through the machine
7498 running HAProxy, and IP forwarding must generally be enabled on this machine.
7499
7500 In this "full transparent proxy" mode, it is possible to force a specific IP
7501 address to be presented to the servers. This is not much used in fact. A more
7502 common use is to tell HAProxy to present the client's IP address. For this,
7503 there are two methods :
7504
7505 - present the client's IP and port addresses. This is the most transparent
7506 mode, but it can cause problems when IP connection tracking is enabled on
7507 the machine, because a same connection may be seen twice with different
7508 states. However, this solution presents the huge advantage of not
7509 limiting the system to the 64k outgoing address+port couples, because all
7510 of the client ranges may be used.
7511
7512 - present only the client's IP address and select a spare port. This
7513 solution is still quite elegant but slightly less transparent (downstream
7514 firewalls logs will not match upstream's). It also presents the downside
7515 of limiting the number of concurrent connections to the usual 64k ports.
7516 However, since the upstream and downstream ports are different, local IP
7517 connection tracking on the machine will not be upset by the reuse of the
7518 same session.
7519
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007520 This option sets the default source for all servers in the backend. It may
7521 also be specified in a "defaults" section. Finer source address specification
7522 is possible at the server level using the "source" server option. Refer to
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007523 section 5 for more information.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007524
Baptiste Assmann91bd3372015-07-17 21:59:42 +02007525 In order to work, "usesrc" requires root privileges.
7526
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007527 Examples :
7528 backend private
7529 # Connect to the servers using our 192.168.1.200 source address
7530 source 192.168.1.200
7531
7532 backend transparent_ssl1
7533 # Connect to the SSL farm from the client's source address
7534 source 192.168.1.200 usesrc clientip
7535
7536 backend transparent_ssl2
7537 # Connect to the SSL farm from the client's source address and port
7538 # not recommended if IP conntrack is present on the local machine.
7539 source 192.168.1.200 usesrc client
7540
7541 backend transparent_ssl3
7542 # Connect to the SSL farm from the client's source address. It
7543 # is more conntrack-friendly.
7544 source 192.168.1.200 usesrc clientip
7545
7546 backend transparent_smtp
7547 # Connect to the SMTP farm from the client's source address/port
7548 # with Tproxy version 4.
7549 source 0.0.0.0 usesrc clientip
7550
Willy Tarreaubce70882009-09-07 11:51:47 +02007551 backend transparent_http
7552 # Connect to the servers using the client's IP as seen by previous
7553 # proxy.
7554 source 0.0.0.0 usesrc hdr_ip(x-forwarded-for,-1)
7555
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007556 See also : the "source" server option in section 5, the Tproxy patches for
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007557 the Linux kernel on www.balabit.com, the "bind" keyword.
7558
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01007559
Willy Tarreau844e3c52008-01-11 16:28:18 +01007560srvtimeout <timeout> (deprecated)
7561 Set the maximum inactivity time on the server side.
7562 May be used in sections : defaults | frontend | listen | backend
7563 yes | no | yes | yes
7564 Arguments :
7565 <timeout> is the timeout value specified in milliseconds by default, but
7566 can be in any other unit if the number is suffixed by the unit,
7567 as explained at the top of this document.
7568
7569 The inactivity timeout applies when the server is expected to acknowledge or
7570 send data. In HTTP mode, this timeout is particularly important to consider
7571 during the first phase of the server's response, when it has to send the
7572 headers, as it directly represents the server's processing time for the
7573 request. To find out what value to put there, it's often good to start with
7574 what would be considered as unacceptable response times, then check the logs
7575 to observe the response time distribution, and adjust the value accordingly.
7576
7577 The value is specified in milliseconds by default, but can be in any other
7578 unit if the number is suffixed by the unit, as specified at the top of this
7579 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
7580 recommended that the client timeout remains equal to the server timeout in
7581 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01007582 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01007583 packet losses by specifying timeouts that are slightly above multiples of 3
Willy Tarreaud72758d2010-01-12 10:42:19 +01007584 seconds (eg: 4 or 5 seconds minimum).
Willy Tarreau844e3c52008-01-11 16:28:18 +01007585
7586 This parameter is specific to backends, but can be specified once for all in
7587 "defaults" sections. This is in fact one of the easiest solutions not to
7588 forget about it. An unspecified timeout results in an infinite timeout, which
7589 is not recommended. Such a usage is accepted and works but reports a warning
7590 during startup because it may results in accumulation of expired sessions in
7591 the system if the system's timeouts are not configured either.
7592
7593 This parameter is provided for compatibility but is currently deprecated.
7594 Please use "timeout server" instead.
7595
Willy Tarreauce887fd2012-05-12 12:50:00 +02007596 See also : "timeout server", "timeout tunnel", "timeout client" and
7597 "clitimeout".
Willy Tarreau844e3c52008-01-11 16:28:18 +01007598
7599
Cyril Bonté66c327d2010-10-12 00:14:37 +02007600stats admin { if | unless } <cond>
7601 Enable statistics admin level if/unless a condition is matched
7602 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007603 no | yes | yes | yes
Cyril Bonté66c327d2010-10-12 00:14:37 +02007604
7605 This statement enables the statistics admin level if/unless a condition is
7606 matched.
7607
7608 The admin level allows to enable/disable servers from the web interface. By
7609 default, statistics page is read-only for security reasons.
7610
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01007611 Note : Consider not using this feature in multi-process mode (nbproc > 1)
7612 unless you know what you do : memory is not shared between the
7613 processes, which can result in random behaviours.
7614
Cyril Bonté23b39d92011-02-10 22:54:44 +01007615 Currently, the POST request is limited to the buffer size minus the reserved
7616 buffer space, which means that if the list of servers is too long, the
7617 request won't be processed. It is recommended to alter few servers at a
7618 time.
Cyril Bonté66c327d2010-10-12 00:14:37 +02007619
7620 Example :
7621 # statistics admin level only for localhost
7622 backend stats_localhost
7623 stats enable
7624 stats admin if LOCALHOST
7625
7626 Example :
7627 # statistics admin level always enabled because of the authentication
7628 backend stats_auth
7629 stats enable
7630 stats auth admin:AdMiN123
7631 stats admin if TRUE
7632
7633 Example :
7634 # statistics admin level depends on the authenticated user
7635 userlist stats-auth
7636 group admin users admin
7637 user admin insecure-password AdMiN123
7638 group readonly users haproxy
7639 user haproxy insecure-password haproxy
7640
7641 backend stats_auth
7642 stats enable
7643 acl AUTH http_auth(stats-auth)
7644 acl AUTH_ADMIN http_auth_group(stats-auth) admin
7645 stats http-request auth unless AUTH
7646 stats admin if AUTH_ADMIN
7647
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01007648 See also : "stats enable", "stats auth", "stats http-request", "nbproc",
7649 "bind-process", section 3.4 about userlists and section 7 about
7650 ACL usage.
Cyril Bonté66c327d2010-10-12 00:14:37 +02007651
7652
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007653stats auth <user>:<passwd>
7654 Enable statistics with authentication and grant access to an account
7655 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007656 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007657 Arguments :
7658 <user> is a user name to grant access to
7659
7660 <passwd> is the cleartext password associated to this user
7661
7662 This statement enables statistics with default settings, and restricts access
7663 to declared users only. It may be repeated as many times as necessary to
7664 allow as many users as desired. When a user tries to access the statistics
7665 without a valid account, a "401 Forbidden" response will be returned so that
7666 the browser asks the user to provide a valid user and password. The real
7667 which will be returned to the browser is configurable using "stats realm".
7668
7669 Since the authentication method is HTTP Basic Authentication, the passwords
7670 circulate in cleartext on the network. Thus, it was decided that the
7671 configuration file would also use cleartext passwords to remind the users
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02007672 that those ones should not be sensitive and not shared with any other account.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007673
7674 It is also possible to reduce the scope of the proxies which appear in the
7675 report using "stats scope".
7676
7677 Though this statement alone is enough to enable statistics reporting, it is
7678 recommended to set all other settings in order to avoid relying on default
7679 unobvious parameters.
7680
7681 Example :
7682 # public access (limited to this backend only)
7683 backend public_www
7684 server srv1 192.168.0.1:80
7685 stats enable
7686 stats hide-version
7687 stats scope .
7688 stats uri /admin?stats
7689 stats realm Haproxy\ Statistics
7690 stats auth admin1:AdMiN123
7691 stats auth admin2:AdMiN321
7692
7693 # internal monitoring access (unlimited)
7694 backend private_monitoring
7695 stats enable
7696 stats uri /admin?stats
7697 stats refresh 5s
7698
7699 See also : "stats enable", "stats realm", "stats scope", "stats uri"
7700
7701
7702stats enable
7703 Enable statistics reporting with default settings
7704 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007705 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007706 Arguments : none
7707
7708 This statement enables statistics reporting with default settings defined
7709 at build time. Unless stated otherwise, these settings are used :
7710 - stats uri : /haproxy?stats
7711 - stats realm : "HAProxy Statistics"
7712 - stats auth : no authentication
7713 - stats scope : no restriction
7714
7715 Though this statement alone is enough to enable statistics reporting, it is
7716 recommended to set all other settings in order to avoid relying on default
7717 unobvious parameters.
7718
7719 Example :
7720 # public access (limited to this backend only)
7721 backend public_www
7722 server srv1 192.168.0.1:80
7723 stats enable
7724 stats hide-version
7725 stats scope .
7726 stats uri /admin?stats
7727 stats realm Haproxy\ Statistics
7728 stats auth admin1:AdMiN123
7729 stats auth admin2:AdMiN321
7730
7731 # internal monitoring access (unlimited)
7732 backend private_monitoring
7733 stats enable
7734 stats uri /admin?stats
7735 stats refresh 5s
7736
7737 See also : "stats auth", "stats realm", "stats uri"
7738
7739
Willy Tarreaud63335a2010-02-26 12:56:52 +01007740stats hide-version
7741 Enable statistics and hide HAProxy version reporting
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02007742 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007743 yes | yes | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01007744 Arguments : none
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02007745
Willy Tarreaud63335a2010-02-26 12:56:52 +01007746 By default, the stats page reports some useful status information along with
7747 the statistics. Among them is HAProxy's version. However, it is generally
7748 considered dangerous to report precise version to anyone, as it can help them
7749 target known weaknesses with specific attacks. The "stats hide-version"
7750 statement removes the version from the statistics report. This is recommended
7751 for public sites or any site with a weak login/password.
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02007752
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +02007753 Though this statement alone is enough to enable statistics reporting, it is
7754 recommended to set all other settings in order to avoid relying on default
7755 unobvious parameters.
7756
Willy Tarreaud63335a2010-02-26 12:56:52 +01007757 Example :
7758 # public access (limited to this backend only)
7759 backend public_www
7760 server srv1 192.168.0.1:80
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +02007761 stats enable
Willy Tarreaud63335a2010-02-26 12:56:52 +01007762 stats hide-version
7763 stats scope .
7764 stats uri /admin?stats
7765 stats realm Haproxy\ Statistics
7766 stats auth admin1:AdMiN123
7767 stats auth admin2:AdMiN321
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02007768
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02007769 # internal monitoring access (unlimited)
7770 backend private_monitoring
7771 stats enable
Willy Tarreaud63335a2010-02-26 12:56:52 +01007772 stats uri /admin?stats
7773 stats refresh 5s
Krzysztof Piotr Oledzki15514c22010-01-04 16:03:09 +01007774
Willy Tarreaud63335a2010-02-26 12:56:52 +01007775 See also : "stats auth", "stats enable", "stats realm", "stats uri"
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02007776
Willy Tarreau983e01e2010-01-11 18:42:06 +01007777
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02007778stats http-request { allow | deny | auth [realm <realm>] }
7779 [ { if | unless } <condition> ]
7780 Access control for statistics
7781
7782 May be used in sections: defaults | frontend | listen | backend
7783 no | no | yes | yes
7784
7785 As "http-request", these set of options allow to fine control access to
7786 statistics. Each option may be followed by if/unless and acl.
7787 First option with matched condition (or option without condition) is final.
7788 For "deny" a 403 error will be returned, for "allow" normal processing is
7789 performed, for "auth" a 401/407 error code is returned so the client
7790 should be asked to enter a username and password.
7791
7792 There is no fixed limit to the number of http-request statements per
7793 instance.
7794
7795 See also : "http-request", section 3.4 about userlists and section 7
7796 about ACL usage.
7797
7798
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007799stats realm <realm>
7800 Enable statistics and set authentication realm
7801 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007802 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007803 Arguments :
7804 <realm> is the name of the HTTP Basic Authentication realm reported to
7805 the browser. The browser uses it to display it in the pop-up
7806 inviting the user to enter a valid username and password.
7807
7808 The realm is read as a single word, so any spaces in it should be escaped
7809 using a backslash ('\').
7810
7811 This statement is useful only in conjunction with "stats auth" since it is
7812 only related to authentication.
7813
7814 Though this statement alone is enough to enable statistics reporting, it is
7815 recommended to set all other settings in order to avoid relying on default
7816 unobvious parameters.
7817
7818 Example :
7819 # public access (limited to this backend only)
7820 backend public_www
7821 server srv1 192.168.0.1:80
7822 stats enable
7823 stats hide-version
7824 stats scope .
7825 stats uri /admin?stats
7826 stats realm Haproxy\ Statistics
7827 stats auth admin1:AdMiN123
7828 stats auth admin2:AdMiN321
7829
7830 # internal monitoring access (unlimited)
7831 backend private_monitoring
7832 stats enable
7833 stats uri /admin?stats
7834 stats refresh 5s
7835
7836 See also : "stats auth", "stats enable", "stats uri"
7837
7838
7839stats refresh <delay>
7840 Enable statistics with automatic refresh
7841 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007842 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007843 Arguments :
7844 <delay> is the suggested refresh delay, specified in seconds, which will
7845 be returned to the browser consulting the report page. While the
7846 browser is free to apply any delay, it will generally respect it
7847 and refresh the page this every seconds. The refresh interval may
7848 be specified in any other non-default time unit, by suffixing the
7849 unit after the value, as explained at the top of this document.
7850
7851 This statement is useful on monitoring displays with a permanent page
7852 reporting the load balancer's activity. When set, the HTML report page will
7853 include a link "refresh"/"stop refresh" so that the user can select whether
7854 he wants automatic refresh of the page or not.
7855
7856 Though this statement alone is enough to enable statistics reporting, it is
7857 recommended to set all other settings in order to avoid relying on default
7858 unobvious parameters.
7859
7860 Example :
7861 # public access (limited to this backend only)
7862 backend public_www
7863 server srv1 192.168.0.1:80
7864 stats enable
7865 stats hide-version
7866 stats scope .
7867 stats uri /admin?stats
7868 stats realm Haproxy\ Statistics
7869 stats auth admin1:AdMiN123
7870 stats auth admin2:AdMiN321
7871
7872 # internal monitoring access (unlimited)
7873 backend private_monitoring
7874 stats enable
7875 stats uri /admin?stats
7876 stats refresh 5s
7877
7878 See also : "stats auth", "stats enable", "stats realm", "stats uri"
7879
7880
7881stats scope { <name> | "." }
7882 Enable statistics and limit access scope
7883 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007884 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007885 Arguments :
7886 <name> is the name of a listen, frontend or backend section to be
7887 reported. The special name "." (a single dot) designates the
7888 section in which the statement appears.
7889
7890 When this statement is specified, only the sections enumerated with this
7891 statement will appear in the report. All other ones will be hidden. This
7892 statement may appear as many times as needed if multiple sections need to be
7893 reported. Please note that the name checking is performed as simple string
7894 comparisons, and that it is never checked that a give section name really
7895 exists.
7896
7897 Though this statement alone is enough to enable statistics reporting, it is
7898 recommended to set all other settings in order to avoid relying on default
7899 unobvious parameters.
7900
7901 Example :
7902 # public access (limited to this backend only)
7903 backend public_www
7904 server srv1 192.168.0.1:80
7905 stats enable
7906 stats hide-version
7907 stats scope .
7908 stats uri /admin?stats
7909 stats realm Haproxy\ Statistics
7910 stats auth admin1:AdMiN123
7911 stats auth admin2:AdMiN321
7912
7913 # internal monitoring access (unlimited)
7914 backend private_monitoring
7915 stats enable
7916 stats uri /admin?stats
7917 stats refresh 5s
7918
7919 See also : "stats auth", "stats enable", "stats realm", "stats uri"
7920
Willy Tarreaud63335a2010-02-26 12:56:52 +01007921
Willy Tarreauc9705a12010-07-27 20:05:50 +02007922stats show-desc [ <desc> ]
Willy Tarreaud63335a2010-02-26 12:56:52 +01007923 Enable reporting of a description on the statistics page.
7924 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007925 yes | yes | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01007926
Willy Tarreauc9705a12010-07-27 20:05:50 +02007927 <desc> is an optional description to be reported. If unspecified, the
Willy Tarreaud63335a2010-02-26 12:56:52 +01007928 description from global section is automatically used instead.
7929
7930 This statement is useful for users that offer shared services to their
7931 customers, where node or description should be different for each customer.
7932
7933 Though this statement alone is enough to enable statistics reporting, it is
7934 recommended to set all other settings in order to avoid relying on default
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04007935 unobvious parameters. By default description is not shown.
Willy Tarreaud63335a2010-02-26 12:56:52 +01007936
7937 Example :
7938 # internal monitoring access (unlimited)
7939 backend private_monitoring
7940 stats enable
7941 stats show-desc Master node for Europe, Asia, Africa
7942 stats uri /admin?stats
7943 stats refresh 5s
7944
7945 See also: "show-node", "stats enable", "stats uri" and "description" in
7946 global section.
7947
7948
7949stats show-legends
Willy Tarreaued2119c2014-04-24 22:10:39 +02007950 Enable reporting additional information on the statistics page
7951 May be used in sections : defaults | frontend | listen | backend
7952 yes | yes | yes | yes
7953 Arguments : none
7954
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03007955 Enable reporting additional information on the statistics page :
Willy Tarreaud63335a2010-02-26 12:56:52 +01007956 - cap: capabilities (proxy)
7957 - mode: one of tcp, http or health (proxy)
7958 - id: SNMP ID (proxy, socket, server)
7959 - IP (socket, server)
7960 - cookie (backend, server)
7961
7962 Though this statement alone is enough to enable statistics reporting, it is
7963 recommended to set all other settings in order to avoid relying on default
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04007964 unobvious parameters. Default behaviour is not to show this information.
Willy Tarreaud63335a2010-02-26 12:56:52 +01007965
7966 See also: "stats enable", "stats uri".
7967
7968
7969stats show-node [ <name> ]
7970 Enable reporting of a host name on the statistics page.
7971 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007972 yes | yes | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01007973 Arguments:
7974 <name> is an optional name to be reported. If unspecified, the
7975 node name from global section is automatically used instead.
7976
7977 This statement is useful for users that offer shared services to their
7978 customers, where node or description might be different on a stats page
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04007979 provided for each customer. Default behaviour is not to show host name.
Willy Tarreaud63335a2010-02-26 12:56:52 +01007980
7981 Though this statement alone is enough to enable statistics reporting, it is
7982 recommended to set all other settings in order to avoid relying on default
7983 unobvious parameters.
7984
7985 Example:
7986 # internal monitoring access (unlimited)
7987 backend private_monitoring
7988 stats enable
7989 stats show-node Europe-1
7990 stats uri /admin?stats
7991 stats refresh 5s
7992
7993 See also: "show-desc", "stats enable", "stats uri", and "node" in global
7994 section.
7995
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007996
7997stats uri <prefix>
7998 Enable statistics and define the URI prefix to access them
7999 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008000 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008001 Arguments :
8002 <prefix> is the prefix of any URI which will be redirected to stats. This
8003 prefix may contain a question mark ('?') to indicate part of a
8004 query string.
8005
8006 The statistics URI is intercepted on the relayed traffic, so it appears as a
8007 page within the normal application. It is strongly advised to ensure that the
8008 selected URI will never appear in the application, otherwise it will never be
8009 possible to reach it in the application.
8010
8011 The default URI compiled in haproxy is "/haproxy?stats", but this may be
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01008012 changed at build time, so it's better to always explicitly specify it here.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008013 It is generally a good idea to include a question mark in the URI so that
8014 intermediate proxies refrain from caching the results. Also, since any string
8015 beginning with the prefix will be accepted as a stats request, the question
8016 mark helps ensuring that no valid URI will begin with the same words.
8017
8018 It is sometimes very convenient to use "/" as the URI prefix, and put that
8019 statement in a "listen" instance of its own. That makes it easy to dedicate
8020 an address or a port to statistics only.
8021
8022 Though this statement alone is enough to enable statistics reporting, it is
8023 recommended to set all other settings in order to avoid relying on default
8024 unobvious parameters.
8025
8026 Example :
8027 # public access (limited to this backend only)
8028 backend public_www
8029 server srv1 192.168.0.1:80
8030 stats enable
8031 stats hide-version
8032 stats scope .
8033 stats uri /admin?stats
8034 stats realm Haproxy\ Statistics
8035 stats auth admin1:AdMiN123
8036 stats auth admin2:AdMiN321
8037
8038 # internal monitoring access (unlimited)
8039 backend private_monitoring
8040 stats enable
8041 stats uri /admin?stats
8042 stats refresh 5s
8043
8044 See also : "stats auth", "stats enable", "stats realm"
8045
8046
Willy Tarreaud63335a2010-02-26 12:56:52 +01008047stick match <pattern> [table <table>] [{if | unless} <cond>]
8048 Define a request pattern matching condition to stick a user to a server
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008049 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaud63335a2010-02-26 12:56:52 +01008050 no | no | yes | yes
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008051
8052 Arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02008053 <pattern> is a sample expression rule as described in section 7.3. It
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008054 describes what elements of the incoming request or connection
8055 will be analysed in the hope to find a matching entry in a
8056 stickiness table. This rule is mandatory.
8057
8058 <table> is an optional stickiness table name. If unspecified, the same
8059 backend's table is used. A stickiness table is declared using
8060 the "stick-table" statement.
8061
8062 <cond> is an optional matching condition. It makes it possible to match
8063 on a certain criterion only when other conditions are met (or
8064 not met). For instance, it could be used to match on a source IP
8065 address except when a request passes through a known proxy, in
8066 which case we'd match on a header containing that IP address.
8067
8068 Some protocols or applications require complex stickiness rules and cannot
8069 always simply rely on cookies nor hashing. The "stick match" statement
8070 describes a rule to extract the stickiness criterion from an incoming request
8071 or connection. See section 7 for a complete list of possible patterns and
8072 transformation rules.
8073
8074 The table has to be declared using the "stick-table" statement. It must be of
8075 a type compatible with the pattern. By default it is the one which is present
8076 in the same backend. It is possible to share a table with other backends by
8077 referencing it using the "table" keyword. If another table is referenced,
8078 the server's ID inside the backends are used. By default, all server IDs
8079 start at 1 in each backend, so the server ordering is enough. But in case of
8080 doubt, it is highly recommended to force server IDs using their "id" setting.
8081
8082 It is possible to restrict the conditions where a "stick match" statement
8083 will apply, using "if" or "unless" followed by a condition. See section 7 for
8084 ACL based conditions.
8085
8086 There is no limit on the number of "stick match" statements. The first that
8087 applies and matches will cause the request to be directed to the same server
8088 as was used for the request which created the entry. That way, multiple
8089 matches can be used as fallbacks.
8090
8091 The stick rules are checked after the persistence cookies, so they will not
8092 affect stickiness if a cookie has already been used to select a server. That
8093 way, it becomes very easy to insert cookies and match on IP addresses in
8094 order to maintain stickiness between HTTP and HTTPS.
8095
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008096 Note : Consider not using this feature in multi-process mode (nbproc > 1)
8097 unless you know what you do : memory is not shared between the
8098 processes, which can result in random behaviours.
8099
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008100 Example :
8101 # forward SMTP users to the same server they just used for POP in the
8102 # last 30 minutes
8103 backend pop
8104 mode tcp
8105 balance roundrobin
8106 stick store-request src
8107 stick-table type ip size 200k expire 30m
8108 server s1 192.168.1.1:110
8109 server s2 192.168.1.1:110
8110
8111 backend smtp
8112 mode tcp
8113 balance roundrobin
8114 stick match src table pop
8115 server s1 192.168.1.1:25
8116 server s2 192.168.1.1:25
8117
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008118 See also : "stick-table", "stick on", "nbproc", "bind-process" and section 7
Willy Tarreaube722a22014-06-13 16:31:59 +02008119 about ACLs and samples fetching.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008120
8121
8122stick on <pattern> [table <table>] [{if | unless} <condition>]
8123 Define a request pattern to associate a user to a server
8124 May be used in sections : defaults | frontend | listen | backend
8125 no | no | yes | yes
8126
8127 Note : This form is exactly equivalent to "stick match" followed by
8128 "stick store-request", all with the same arguments. Please refer
8129 to both keywords for details. It is only provided as a convenience
8130 for writing more maintainable configurations.
8131
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008132 Note : Consider not using this feature in multi-process mode (nbproc > 1)
8133 unless you know what you do : memory is not shared between the
8134 processes, which can result in random behaviours.
8135
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008136 Examples :
8137 # The following form ...
Willy Tarreauec579d82010-02-26 19:15:04 +01008138 stick on src table pop if !localhost
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008139
8140 # ...is strictly equivalent to this one :
8141 stick match src table pop if !localhost
8142 stick store-request src table pop if !localhost
8143
8144
8145 # Use cookie persistence for HTTP, and stick on source address for HTTPS as
8146 # well as HTTP without cookie. Share the same table between both accesses.
8147 backend http
8148 mode http
8149 balance roundrobin
8150 stick on src table https
8151 cookie SRV insert indirect nocache
8152 server s1 192.168.1.1:80 cookie s1
8153 server s2 192.168.1.1:80 cookie s2
8154
8155 backend https
8156 mode tcp
8157 balance roundrobin
8158 stick-table type ip size 200k expire 30m
8159 stick on src
8160 server s1 192.168.1.1:443
8161 server s2 192.168.1.1:443
8162
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008163 See also : "stick match", "stick store-request", "nbproc" and "bind-process".
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008164
8165
8166stick store-request <pattern> [table <table>] [{if | unless} <condition>]
8167 Define a request pattern used to create an entry in a stickiness table
8168 May be used in sections : defaults | frontend | listen | backend
8169 no | no | yes | yes
8170
8171 Arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02008172 <pattern> is a sample expression rule as described in section 7.3. It
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008173 describes what elements of the incoming request or connection
8174 will be analysed, extracted and stored in the table once a
8175 server is selected.
8176
8177 <table> is an optional stickiness table name. If unspecified, the same
8178 backend's table is used. A stickiness table is declared using
8179 the "stick-table" statement.
8180
8181 <cond> is an optional storage condition. It makes it possible to store
8182 certain criteria only when some conditions are met (or not met).
8183 For instance, it could be used to store the source IP address
8184 except when the request passes through a known proxy, in which
8185 case we'd store a converted form of a header containing that IP
8186 address.
8187
8188 Some protocols or applications require complex stickiness rules and cannot
8189 always simply rely on cookies nor hashing. The "stick store-request" statement
8190 describes a rule to decide what to extract from the request and when to do
8191 it, in order to store it into a stickiness table for further requests to
8192 match it using the "stick match" statement. Obviously the extracted part must
8193 make sense and have a chance to be matched in a further request. Storing a
8194 client's IP address for instance often makes sense. Storing an ID found in a
8195 URL parameter also makes sense. Storing a source port will almost never make
8196 any sense because it will be randomly matched. See section 7 for a complete
8197 list of possible patterns and transformation rules.
8198
8199 The table has to be declared using the "stick-table" statement. It must be of
8200 a type compatible with the pattern. By default it is the one which is present
8201 in the same backend. It is possible to share a table with other backends by
8202 referencing it using the "table" keyword. If another table is referenced,
8203 the server's ID inside the backends are used. By default, all server IDs
8204 start at 1 in each backend, so the server ordering is enough. But in case of
8205 doubt, it is highly recommended to force server IDs using their "id" setting.
8206
8207 It is possible to restrict the conditions where a "stick store-request"
8208 statement will apply, using "if" or "unless" followed by a condition. This
8209 condition will be evaluated while parsing the request, so any criteria can be
8210 used. See section 7 for ACL based conditions.
8211
8212 There is no limit on the number of "stick store-request" statements, but
8213 there is a limit of 8 simultaneous stores per request or response. This
8214 makes it possible to store up to 8 criteria, all extracted from either the
8215 request or the response, regardless of the number of rules. Only the 8 first
8216 ones which match will be kept. Using this, it is possible to feed multiple
8217 tables at once in the hope to increase the chance to recognize a user on
Willy Tarreau9667a802013-12-09 12:52:13 +01008218 another protocol or access method. Using multiple store-request rules with
8219 the same table is possible and may be used to find the best criterion to rely
8220 on, by arranging the rules by decreasing preference order. Only the first
8221 extracted criterion for a given table will be stored. All subsequent store-
8222 request rules referencing the same table will be skipped and their ACLs will
8223 not be evaluated.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008224
8225 The "store-request" rules are evaluated once the server connection has been
8226 established, so that the table will contain the real server that processed
8227 the request.
8228
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008229 Note : Consider not using this feature in multi-process mode (nbproc > 1)
8230 unless you know what you do : memory is not shared between the
8231 processes, which can result in random behaviours.
8232
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008233 Example :
8234 # forward SMTP users to the same server they just used for POP in the
8235 # last 30 minutes
8236 backend pop
8237 mode tcp
8238 balance roundrobin
8239 stick store-request src
8240 stick-table type ip size 200k expire 30m
8241 server s1 192.168.1.1:110
8242 server s2 192.168.1.1:110
8243
8244 backend smtp
8245 mode tcp
8246 balance roundrobin
8247 stick match src table pop
8248 server s1 192.168.1.1:25
8249 server s2 192.168.1.1:25
8250
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008251 See also : "stick-table", "stick on", "nbproc", "bind-process" and section 7
Willy Tarreaube722a22014-06-13 16:31:59 +02008252 about ACLs and sample fetching.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008253
8254
Emeric Brun7c6b82e2010-09-24 16:34:28 +02008255stick-table type {ip | integer | string [len <length>] | binary [len <length>]}
Emeric Brunf099e792010-09-27 12:05:28 +02008256 size <size> [expire <expire>] [nopurge] [peers <peersect>]
8257 [store <data_type>]*
Godbach64cef792013-12-04 16:08:22 +08008258 Configure the stickiness table for the current section
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008259 May be used in sections : defaults | frontend | listen | backend
Willy Tarreauc00cdc22010-06-06 16:48:26 +02008260 no | yes | yes | yes
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008261
8262 Arguments :
8263 ip a table declared with "type ip" will only store IPv4 addresses.
8264 This form is very compact (about 50 bytes per entry) and allows
8265 very fast entry lookup and stores with almost no overhead. This
8266 is mainly used to store client source IP addresses.
8267
David du Colombier9a6d3c92011-03-17 10:40:24 +01008268 ipv6 a table declared with "type ipv6" will only store IPv6 addresses.
8269 This form is very compact (about 60 bytes per entry) and allows
8270 very fast entry lookup and stores with almost no overhead. This
8271 is mainly used to store client source IP addresses.
8272
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008273 integer a table declared with "type integer" will store 32bit integers
8274 which can represent a client identifier found in a request for
8275 instance.
8276
8277 string a table declared with "type string" will store substrings of up
8278 to <len> characters. If the string provided by the pattern
8279 extractor is larger than <len>, it will be truncated before
8280 being stored. During matching, at most <len> characters will be
8281 compared between the string in the table and the extracted
8282 pattern. When not specified, the string is automatically limited
Emeric Brun7c6b82e2010-09-24 16:34:28 +02008283 to 32 characters.
8284
8285 binary a table declared with "type binary" will store binary blocks
8286 of <len> bytes. If the block provided by the pattern
8287 extractor is larger than <len>, it will be truncated before
Willy Tarreaube722a22014-06-13 16:31:59 +02008288 being stored. If the block provided by the sample expression
Emeric Brun7c6b82e2010-09-24 16:34:28 +02008289 is shorter than <len>, it will be padded by 0. When not
8290 specified, the block is automatically limited to 32 bytes.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008291
8292 <length> is the maximum number of characters that will be stored in a
Emeric Brun7c6b82e2010-09-24 16:34:28 +02008293 "string" type table (See type "string" above). Or the number
8294 of bytes of the block in "binary" type table. Be careful when
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008295 changing this parameter as memory usage will proportionally
8296 increase.
8297
8298 <size> is the maximum number of entries that can fit in the table. This
Cyril Bonté78caf842010-03-10 22:41:43 +01008299 value directly impacts memory usage. Count approximately
8300 50 bytes per entry, plus the size of a string if any. The size
8301 supports suffixes "k", "m", "g" for 2^10, 2^20 and 2^30 factors.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008302
8303 [nopurge] indicates that we refuse to purge older entries when the table
8304 is full. When not specified and the table is full when haproxy
8305 wants to store an entry in it, it will flush a few of the oldest
8306 entries in order to release some space for the new ones. This is
8307 most often the desired behaviour. In some specific cases, it
8308 be desirable to refuse new entries instead of purging the older
8309 ones. That may be the case when the amount of data to store is
8310 far above the hardware limits and we prefer not to offer access
8311 to new clients than to reject the ones already connected. When
8312 using this parameter, be sure to properly set the "expire"
8313 parameter (see below).
8314
Emeric Brunf099e792010-09-27 12:05:28 +02008315 <peersect> is the name of the peers section to use for replication. Entries
8316 which associate keys to server IDs are kept synchronized with
8317 the remote peers declared in this section. All entries are also
8318 automatically learned from the local peer (old process) during a
8319 soft restart.
8320
Willy Tarreau1abc6732015-05-01 19:21:02 +02008321 NOTE : each peers section may be referenced only by tables
8322 belonging to the same unique process.
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008323
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008324 <expire> defines the maximum duration of an entry in the table since it
8325 was last created, refreshed or matched. The expiration delay is
8326 defined using the standard time format, similarly as the various
8327 timeouts. The maximum duration is slightly above 24 days. See
8328 section 2.2 for more information. If this delay is not specified,
Cyril Bontédc4d9032012-04-08 21:57:39 +02008329 the session won't automatically expire, but older entries will
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008330 be removed once full. Be sure not to use the "nopurge" parameter
8331 if not expiration delay is specified.
8332
Willy Tarreau08d5f982010-06-06 13:34:54 +02008333 <data_type> is used to store additional information in the stick-table. This
8334 may be used by ACLs in order to control various criteria related
8335 to the activity of the client matching the stick-table. For each
8336 item specified here, the size of each entry will be inflated so
Willy Tarreauc9705a12010-07-27 20:05:50 +02008337 that the additional data can fit. Several data types may be
8338 stored with an entry. Multiple data types may be specified after
8339 the "store" keyword, as a comma-separated list. Alternatively,
8340 it is possible to repeat the "store" keyword followed by one or
8341 several data types. Except for the "server_id" type which is
8342 automatically detected and enabled, all data types must be
8343 explicitly declared to be stored. If an ACL references a data
8344 type which is not stored, the ACL will simply not match. Some
8345 data types require an argument which must be passed just after
8346 the type between parenthesis. See below for the supported data
8347 types and their arguments.
8348
8349 The data types that can be stored with an entry are the following :
8350 - server_id : this is an integer which holds the numeric ID of the server a
8351 request was assigned to. It is used by the "stick match", "stick store",
8352 and "stick on" rules. It is automatically enabled when referenced.
8353
8354 - gpc0 : first General Purpose Counter. It is a positive 32-bit integer
8355 integer which may be used for anything. Most of the time it will be used
8356 to put a special tag on some entries, for instance to note that a
8357 specific behaviour was detected and must be known for future matches.
8358
Willy Tarreauba2ffd12013-05-29 15:54:14 +02008359 - gpc0_rate(<period>) : increment rate of the first General Purpose Counter
8360 over a period. It is a positive 32-bit integer integer which may be used
8361 for anything. Just like <gpc0>, it counts events, but instead of keeping
8362 a cumulative count, it maintains the rate at which the counter is
8363 incremented. Most of the time it will be used to measure the frequency of
8364 occurrence of certain events (eg: requests to a specific URL).
8365
Willy Tarreauc9705a12010-07-27 20:05:50 +02008366 - conn_cnt : Connection Count. It is a positive 32-bit integer which counts
8367 the absolute number of connections received from clients which matched
8368 this entry. It does not mean the connections were accepted, just that
8369 they were received.
8370
8371 - conn_cur : Current Connections. It is a positive 32-bit integer which
8372 stores the concurrent connection counts for the entry. It is incremented
8373 once an incoming connection matches the entry, and decremented once the
8374 connection leaves. That way it is possible to know at any time the exact
8375 number of concurrent connections for an entry.
8376
8377 - conn_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8378 integer parameter <period> which indicates in milliseconds the length
8379 of the period over which the average is measured. It reports the average
8380 incoming connection rate over that period, in connections per period. The
8381 result is an integer which can be matched using ACLs.
8382
8383 - sess_cnt : Session Count. It is a positive 32-bit integer which counts
8384 the absolute number of sessions received from clients which matched this
8385 entry. A session is a connection that was accepted by the layer 4 rules.
8386
8387 - sess_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8388 integer parameter <period> which indicates in milliseconds the length
8389 of the period over which the average is measured. It reports the average
8390 incoming session rate over that period, in sessions per period. The
8391 result is an integer which can be matched using ACLs.
8392
8393 - http_req_cnt : HTTP request Count. It is a positive 32-bit integer which
8394 counts the absolute number of HTTP requests received from clients which
8395 matched this entry. It does not matter whether they are valid requests or
8396 not. Note that this is different from sessions when keep-alive is used on
8397 the client side.
8398
8399 - http_req_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8400 integer parameter <period> which indicates in milliseconds the length
8401 of the period over which the average is measured. It reports the average
8402 HTTP request rate over that period, in requests per period. The result is
8403 an integer which can be matched using ACLs. It does not matter whether
8404 they are valid requests or not. Note that this is different from sessions
8405 when keep-alive is used on the client side.
8406
8407 - http_err_cnt : HTTP Error Count. It is a positive 32-bit integer which
8408 counts the absolute number of HTTP requests errors induced by clients
8409 which matched this entry. Errors are counted on invalid and truncated
8410 requests, as well as on denied or tarpitted requests, and on failed
8411 authentications. If the server responds with 4xx, then the request is
8412 also counted as an error since it's an error triggered by the client
8413 (eg: vulnerability scan).
8414
8415 - http_err_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8416 integer parameter <period> which indicates in milliseconds the length
8417 of the period over which the average is measured. It reports the average
8418 HTTP request error rate over that period, in requests per period (see
8419 http_err_cnt above for what is accounted as an error). The result is an
8420 integer which can be matched using ACLs.
8421
8422 - bytes_in_cnt : client to server byte count. It is a positive 64-bit
8423 integer which counts the cumulated amount of bytes received from clients
8424 which matched this entry. Headers are included in the count. This may be
8425 used to limit abuse of upload features on photo or video servers.
8426
8427 - bytes_in_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8428 integer parameter <period> which indicates in milliseconds the length
8429 of the period over which the average is measured. It reports the average
8430 incoming bytes rate over that period, in bytes per period. It may be used
8431 to detect users which upload too much and too fast. Warning: with large
8432 uploads, it is possible that the amount of uploaded data will be counted
8433 once upon termination, thus causing spikes in the average transfer speed
8434 instead of having a smooth one. This may partially be smoothed with
8435 "option contstats" though this is not perfect yet. Use of byte_in_cnt is
8436 recommended for better fairness.
8437
8438 - bytes_out_cnt : server to client byte count. It is a positive 64-bit
8439 integer which counts the cumulated amount of bytes sent to clients which
8440 matched this entry. Headers are included in the count. This may be used
8441 to limit abuse of bots sucking the whole site.
8442
8443 - bytes_out_rate(<period>) : frequency counter (takes 12 bytes). It takes
8444 an integer parameter <period> which indicates in milliseconds the length
8445 of the period over which the average is measured. It reports the average
8446 outgoing bytes rate over that period, in bytes per period. It may be used
8447 to detect users which download too much and too fast. Warning: with large
8448 transfers, it is possible that the amount of transferred data will be
8449 counted once upon termination, thus causing spikes in the average
8450 transfer speed instead of having a smooth one. This may partially be
8451 smoothed with "option contstats" though this is not perfect yet. Use of
8452 byte_out_cnt is recommended for better fairness.
Willy Tarreau08d5f982010-06-06 13:34:54 +02008453
Willy Tarreauc00cdc22010-06-06 16:48:26 +02008454 There is only one stick-table per proxy. At the moment of writing this doc,
8455 it does not seem useful to have multiple tables per proxy. If this happens
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008456 to be required, simply create a dummy backend with a stick-table in it and
8457 reference it.
8458
8459 It is important to understand that stickiness based on learning information
8460 has some limitations, including the fact that all learned associations are
Baptiste Assmann123ff042016-03-06 23:29:28 +01008461 lost upon restart unless peers are properly configured to transfer such
8462 information upon restart (recommended). In general it can be good as a
8463 complement but not always as an exclusive stickiness.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008464
Willy Tarreauc9705a12010-07-27 20:05:50 +02008465 Last, memory requirements may be important when storing many data types.
8466 Indeed, storing all indicators above at once in each entry requires 116 bytes
8467 per entry, or 116 MB for a 1-million entries table. This is definitely not
8468 something that can be ignored.
8469
8470 Example:
8471 # Keep track of counters of up to 1 million IP addresses over 5 minutes
8472 # and store a general purpose counter and the average connection rate
8473 # computed over a sliding window of 30 seconds.
8474 stick-table type ip size 1m expire 5m store gpc0,conn_rate(30s)
8475
8476 See also : "stick match", "stick on", "stick store-request", section 2.2
David du Colombiera13d1b92011-03-17 10:40:22 +01008477 about time format and section 7 about ACLs.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008478
8479
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008480stick store-response <pattern> [table <table>] [{if | unless} <condition>]
Baptiste Assmann2f2d2ec2016-03-06 23:27:24 +01008481 Define a response pattern used to create an entry in a stickiness table
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008482 May be used in sections : defaults | frontend | listen | backend
8483 no | no | yes | yes
8484
8485 Arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02008486 <pattern> is a sample expression rule as described in section 7.3. It
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008487 describes what elements of the response or connection will
8488 be analysed, extracted and stored in the table once a
8489 server is selected.
8490
8491 <table> is an optional stickiness table name. If unspecified, the same
8492 backend's table is used. A stickiness table is declared using
8493 the "stick-table" statement.
8494
8495 <cond> is an optional storage condition. It makes it possible to store
8496 certain criteria only when some conditions are met (or not met).
8497 For instance, it could be used to store the SSL session ID only
8498 when the response is a SSL server hello.
8499
8500 Some protocols or applications require complex stickiness rules and cannot
8501 always simply rely on cookies nor hashing. The "stick store-response"
8502 statement describes a rule to decide what to extract from the response and
8503 when to do it, in order to store it into a stickiness table for further
8504 requests to match it using the "stick match" statement. Obviously the
8505 extracted part must make sense and have a chance to be matched in a further
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008506 request. Storing an ID found in a header of a response makes sense.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008507 See section 7 for a complete list of possible patterns and transformation
8508 rules.
8509
8510 The table has to be declared using the "stick-table" statement. It must be of
8511 a type compatible with the pattern. By default it is the one which is present
8512 in the same backend. It is possible to share a table with other backends by
8513 referencing it using the "table" keyword. If another table is referenced,
8514 the server's ID inside the backends are used. By default, all server IDs
8515 start at 1 in each backend, so the server ordering is enough. But in case of
8516 doubt, it is highly recommended to force server IDs using their "id" setting.
8517
8518 It is possible to restrict the conditions where a "stick store-response"
8519 statement will apply, using "if" or "unless" followed by a condition. This
8520 condition will be evaluated while parsing the response, so any criteria can
8521 be used. See section 7 for ACL based conditions.
8522
8523 There is no limit on the number of "stick store-response" statements, but
8524 there is a limit of 8 simultaneous stores per request or response. This
8525 makes it possible to store up to 8 criteria, all extracted from either the
8526 request or the response, regardless of the number of rules. Only the 8 first
8527 ones which match will be kept. Using this, it is possible to feed multiple
8528 tables at once in the hope to increase the chance to recognize a user on
Willy Tarreau9667a802013-12-09 12:52:13 +01008529 another protocol or access method. Using multiple store-response rules with
8530 the same table is possible and may be used to find the best criterion to rely
8531 on, by arranging the rules by decreasing preference order. Only the first
8532 extracted criterion for a given table will be stored. All subsequent store-
8533 response rules referencing the same table will be skipped and their ACLs will
8534 not be evaluated. However, even if a store-request rule references a table, a
8535 store-response rule may also use the same table. This means that each table
8536 may learn exactly one element from the request and one element from the
8537 response at once.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008538
8539 The table will contain the real server that processed the request.
8540
8541 Example :
8542 # Learn SSL session ID from both request and response and create affinity.
8543 backend https
8544 mode tcp
8545 balance roundrobin
Cyril Bontédc4d9032012-04-08 21:57:39 +02008546 # maximum SSL session ID length is 32 bytes.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008547 stick-table type binary len 32 size 30k expire 30m
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008548
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008549 acl clienthello req_ssl_hello_type 1
8550 acl serverhello rep_ssl_hello_type 2
8551
8552 # use tcp content accepts to detects ssl client and server hello.
8553 tcp-request inspect-delay 5s
8554 tcp-request content accept if clienthello
8555
8556 # no timeout on response inspect delay by default.
8557 tcp-response content accept if serverhello
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008558
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008559 # SSL session ID (SSLID) may be present on a client or server hello.
8560 # Its length is coded on 1 byte at offset 43 and its value starts
8561 # at offset 44.
8562
8563 # Match and learn on request if client hello.
8564 stick on payload_lv(43,1) if clienthello
8565
8566 # Learn on response if server hello.
8567 stick store-response payload_lv(43,1) if serverhello
Cyril Bontédc4d9032012-04-08 21:57:39 +02008568
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008569 server s1 192.168.1.1:443
8570 server s2 192.168.1.1:443
8571
8572 See also : "stick-table", "stick on", and section 7 about ACLs and pattern
8573 extraction.
8574
8575
Willy Tarreau938c7fe2014-04-25 14:21:39 +02008576tcp-check connect [params*]
8577 Opens a new connection
8578 May be used in sections: defaults | frontend | listen | backend
8579 no | no | yes | yes
8580
8581 When an application lies on more than a single TCP port or when HAProxy
8582 load-balance many services in a single backend, it makes sense to probe all
8583 the services individually before considering a server as operational.
8584
8585 When there are no TCP port configured on the server line neither server port
8586 directive, then the 'tcp-check connect port <port>' must be the first step
8587 of the sequence.
8588
8589 In a tcp-check ruleset a 'connect' is required, it is also mandatory to start
8590 the ruleset with a 'connect' rule. Purpose is to ensure admin know what they
8591 do.
8592
8593 Parameters :
8594 They are optional and can be used to describe how HAProxy should open and
8595 use the TCP connection.
8596
8597 port if not set, check port or server port is used.
8598 It tells HAProxy where to open the connection to.
8599 <port> must be a valid TCP port source integer, from 1 to 65535.
8600
8601 send-proxy send a PROXY protocol string
8602
8603 ssl opens a ciphered connection
8604
8605 Examples:
8606 # check HTTP and HTTPs services on a server.
8607 # first open port 80 thanks to server line port directive, then
8608 # tcp-check opens port 443, ciphered and run a request on it:
8609 option tcp-check
8610 tcp-check connect
8611 tcp-check send GET\ /\ HTTP/1.0\r\n
8612 tcp-check send Host:\ haproxy.1wt.eu\r\n
8613 tcp-check send \r\n
8614 tcp-check expect rstring (2..|3..)
8615 tcp-check connect port 443 ssl
8616 tcp-check send GET\ /\ HTTP/1.0\r\n
8617 tcp-check send Host:\ haproxy.1wt.eu\r\n
8618 tcp-check send \r\n
8619 tcp-check expect rstring (2..|3..)
8620 server www 10.0.0.1 check port 80
8621
8622 # check both POP and IMAP from a single server:
8623 option tcp-check
8624 tcp-check connect port 110
8625 tcp-check expect string +OK\ POP3\ ready
8626 tcp-check connect port 143
8627 tcp-check expect string *\ OK\ IMAP4\ ready
8628 server mail 10.0.0.1 check
8629
8630 See also : "option tcp-check", "tcp-check send", "tcp-check expect"
8631
8632
8633tcp-check expect [!] <match> <pattern>
8634 Specify data to be collected and analysed during a generic health check
8635 May be used in sections: defaults | frontend | listen | backend
8636 no | no | yes | yes
8637
8638 Arguments :
8639 <match> is a keyword indicating how to look for a specific pattern in the
8640 response. The keyword may be one of "string", "rstring" or
8641 binary.
8642 The keyword may be preceded by an exclamation mark ("!") to negate
8643 the match. Spaces are allowed between the exclamation mark and the
8644 keyword. See below for more details on the supported keywords.
8645
8646 <pattern> is the pattern to look for. It may be a string or a regular
8647 expression. If the pattern contains spaces, they must be escaped
8648 with the usual backslash ('\').
8649 If the match is set to binary, then the pattern must be passed as
8650 a serie of hexadecimal digits in an even number. Each sequence of
8651 two digits will represent a byte. The hexadecimal digits may be
8652 used upper or lower case.
8653
8654
8655 The available matches are intentionally similar to their http-check cousins :
8656
8657 string <string> : test the exact string matches in the response buffer.
8658 A health check response will be considered valid if the
8659 response's buffer contains this exact string. If the
8660 "string" keyword is prefixed with "!", then the response
8661 will be considered invalid if the body contains this
8662 string. This can be used to look for a mandatory pattern
8663 in a protocol response, or to detect a failure when a
8664 specific error appears in a protocol banner.
8665
8666 rstring <regex> : test a regular expression on the response buffer.
8667 A health check response will be considered valid if the
8668 response's buffer matches this expression. If the
8669 "rstring" keyword is prefixed with "!", then the response
8670 will be considered invalid if the body matches the
8671 expression.
8672
8673 binary <hexstring> : test the exact string in its hexadecimal form matches
8674 in the response buffer. A health check response will
8675 be considered valid if the response's buffer contains
8676 this exact hexadecimal string.
8677 Purpose is to match data on binary protocols.
8678
8679 It is important to note that the responses will be limited to a certain size
8680 defined by the global "tune.chksize" option, which defaults to 16384 bytes.
8681 Thus, too large responses may not contain the mandatory pattern when using
8682 "string", "rstring" or binary. If a large response is absolutely required, it
8683 is possible to change the default max size by setting the global variable.
8684 However, it is worth keeping in mind that parsing very large responses can
8685 waste some CPU cycles, especially when regular expressions are used, and that
8686 it is always better to focus the checks on smaller resources. Also, in its
8687 current state, the check will not find any string nor regex past a null
8688 character in the response. Similarly it is not possible to request matching
8689 the null character.
8690
8691 Examples :
8692 # perform a POP check
8693 option tcp-check
8694 tcp-check expect string +OK\ POP3\ ready
8695
8696 # perform an IMAP check
8697 option tcp-check
8698 tcp-check expect string *\ OK\ IMAP4\ ready
8699
8700 # look for the redis master server
8701 option tcp-check
8702 tcp-check send PING\r\n
Baptiste Assmanna3322992015-08-04 10:12:18 +02008703 tcp-check expect string +PONG
Willy Tarreau938c7fe2014-04-25 14:21:39 +02008704 tcp-check send info\ replication\r\n
8705 tcp-check expect string role:master
8706 tcp-check send QUIT\r\n
8707 tcp-check expect string +OK
8708
8709
8710 See also : "option tcp-check", "tcp-check connect", "tcp-check send",
8711 "tcp-check send-binary", "http-check expect", tune.chksize
8712
8713
8714tcp-check send <data>
8715 Specify a string to be sent as a question during a generic health check
8716 May be used in sections: defaults | frontend | listen | backend
8717 no | no | yes | yes
8718
8719 <data> : the data to be sent as a question during a generic health check
8720 session. For now, <data> must be a string.
8721
8722 Examples :
8723 # look for the redis master server
8724 option tcp-check
8725 tcp-check send info\ replication\r\n
8726 tcp-check expect string role:master
8727
8728 See also : "option tcp-check", "tcp-check connect", "tcp-check expect",
8729 "tcp-check send-binary", tune.chksize
8730
8731
8732tcp-check send-binary <hexastring>
8733 Specify an hexa digits string to be sent as a binary question during a raw
8734 tcp health check
8735 May be used in sections: defaults | frontend | listen | backend
8736 no | no | yes | yes
8737
8738 <data> : the data to be sent as a question during a generic health check
8739 session. For now, <data> must be a string.
8740 <hexastring> : test the exact string in its hexadecimal form matches in the
8741 response buffer. A health check response will be considered
8742 valid if the response's buffer contains this exact
8743 hexadecimal string.
8744 Purpose is to send binary data to ask on binary protocols.
8745
8746 Examples :
8747 # redis check in binary
8748 option tcp-check
8749 tcp-check send-binary 50494e470d0a # PING\r\n
8750 tcp-check expect binary 2b504F4e47 # +PONG
8751
8752
8753 See also : "option tcp-check", "tcp-check connect", "tcp-check expect",
8754 "tcp-check send", tune.chksize
8755
8756
Willy Tarreaue9656522010-08-17 15:40:09 +02008757tcp-request connection <action> [{if | unless} <condition>]
8758 Perform an action on an incoming connection depending on a layer 4 condition
Willy Tarreau1a687942010-05-23 22:40:30 +02008759 May be used in sections : defaults | frontend | listen | backend
8760 no | yes | yes | no
Willy Tarreaue9656522010-08-17 15:40:09 +02008761 Arguments :
Willy Tarreauc870bfd2015-09-28 18:47:38 +02008762 <action> defines the action to perform if the condition applies. See
8763 below.
Willy Tarreau1a687942010-05-23 22:40:30 +02008764
Willy Tarreaue9656522010-08-17 15:40:09 +02008765 <condition> is a standard layer4-only ACL-based condition (see section 7).
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008766
8767 Immediately after acceptance of a new incoming connection, it is possible to
8768 evaluate some conditions to decide whether this connection must be accepted
Willy Tarreaue9656522010-08-17 15:40:09 +02008769 or dropped or have its counters tracked. Those conditions cannot make use of
8770 any data contents because the connection has not been read from yet, and the
8771 buffers are not yet allocated. This is used to selectively and very quickly
8772 accept or drop connections from various sources with a very low overhead. If
8773 some contents need to be inspected in order to take the decision, the
8774 "tcp-request content" statements must be used instead.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008775
Willy Tarreaue9656522010-08-17 15:40:09 +02008776 The "tcp-request connection" rules are evaluated in their exact declaration
8777 order. If no rule matches or if there is no rule, the default action is to
8778 accept the incoming connection. There is no specific limit to the number of
8779 rules which may be inserted.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008780
Willy Tarreaua9083d02015-05-08 15:27:59 +02008781 Four types of actions are supported :
Willy Tarreaue9656522010-08-17 15:40:09 +02008782 - accept :
8783 accepts the connection if the condition is true (when used with "if")
8784 or false (when used with "unless"). The first such rule executed ends
8785 the rules evaluation.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008786
Willy Tarreaue9656522010-08-17 15:40:09 +02008787 - reject :
8788 rejects the connection if the condition is true (when used with "if")
8789 or false (when used with "unless"). The first such rule executed ends
8790 the rules evaluation. Rejected connections do not even become a
8791 session, which is why they are accounted separately for in the stats,
8792 as "denied connections". They are not considered for the session
8793 rate-limit and are not logged either. The reason is that these rules
8794 should only be used to filter extremely high connection rates such as
8795 the ones encountered during a massive DDoS attack. Under these extreme
8796 conditions, the simple action of logging each event would make the
8797 system collapse and would considerably lower the filtering capacity. If
8798 logging is absolutely desired, then "tcp-request content" rules should
Willy Tarreau4f614292016-10-21 17:49:36 +02008799 be used instead, as "tcp-request session" rules will not log either.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008800
Willy Tarreau4f0d9192013-06-11 20:40:55 +02008801 - expect-proxy layer4 :
8802 configures the client-facing connection to receive a PROXY protocol
8803 header before any byte is read from the socket. This is equivalent to
8804 having the "accept-proxy" keyword on the "bind" line, except that using
8805 the TCP rule allows the PROXY protocol to be accepted only for certain
8806 IP address ranges using an ACL. This is convenient when multiple layers
8807 of load balancers are passed through by traffic coming from public
8808 hosts.
8809
Bertrand Jacquin90759682016-06-06 15:35:39 +01008810 - expect-netscaler-cip layer4 :
8811 configures the client-facing connection to receive a NetScaler Client
8812 IP insertion protocol header before any byte is read from the socket.
8813 This is equivalent to having the "accept-netscaler-cip" keyword on the
8814 "bind" line, except that using the TCP rule allows the PROXY protocol
8815 to be accepted only for certain IP address ranges using an ACL. This
8816 is convenient when multiple layers of load balancers are passed
8817 through by traffic coming from public hosts.
8818
Willy Tarreau18bf01e2014-06-13 16:18:52 +02008819 - capture <sample> len <length> :
8820 This only applies to "tcp-request content" rules. It captures sample
8821 expression <sample> from the request buffer, and converts it to a
8822 string of at most <len> characters. The resulting string is stored into
8823 the next request "capture" slot, so it will possibly appear next to
8824 some captured HTTP headers. It will then automatically appear in the
8825 logs, and it will be possible to extract it using sample fetch rules to
8826 feed it into headers or anything. The length should be limited given
8827 that this size will be allocated for each capture during the whole
Willy Tarreaua9083d02015-05-08 15:27:59 +02008828 session life. Please check section 7.3 (Fetching samples) and "capture
8829 request header" for more information.
Willy Tarreau18bf01e2014-06-13 16:18:52 +02008830
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02008831 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
Willy Tarreaue9656522010-08-17 15:40:09 +02008832 enables tracking of sticky counters from current connection. These
Willy Tarreau09448f72014-06-25 18:12:15 +02008833 rules do not stop evaluation and do not change default action. 3 sets
Willy Tarreaue9656522010-08-17 15:40:09 +02008834 of counters may be simultaneously tracked by the same connection. The
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02008835 first "track-sc0" rule executed enables tracking of the counters of the
8836 specified table as the first set. The first "track-sc1" rule executed
Willy Tarreaue9656522010-08-17 15:40:09 +02008837 enables tracking of the counters of the specified table as the second
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02008838 set. The first "track-sc2" rule executed enables tracking of the
8839 counters of the specified table as the third set. It is a recommended
8840 practice to use the first set of counters for the per-frontend counters
8841 and the second set for the per-backend ones. But this is just a
8842 guideline, all may be used everywhere.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008843
Willy Tarreaue9656522010-08-17 15:40:09 +02008844 These actions take one or two arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02008845 <key> is mandatory, and is a sample expression rule as described
Willy Tarreau74ca5042013-06-11 23:12:07 +02008846 in section 7.3. It describes what elements of the incoming
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01008847 request or connection will be analysed, extracted, combined,
8848 and used to select which table entry to update the counters.
8849 Note that "tcp-request connection" cannot use content-based
8850 fetches.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008851
Willy Tarreaue9656522010-08-17 15:40:09 +02008852 <table> is an optional table to be used instead of the default one,
8853 which is the stick-table declared in the current proxy. All
8854 the counters for the matches and updates for the key will
8855 then be performed in that table until the session ends.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008856
Willy Tarreaue9656522010-08-17 15:40:09 +02008857 Once a "track-sc*" rule is executed, the key is looked up in the table
8858 and if it is not found, an entry is allocated for it. Then a pointer to
8859 that entry is kept during all the session's life, and this entry's
8860 counters are updated as often as possible, every time the session's
8861 counters are updated, and also systematically when the session ends.
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01008862 Counters are only updated for events that happen after the tracking has
8863 been started. For example, connection counters will not be updated when
8864 tracking layer 7 information, since the connection event happens before
8865 layer7 information is extracted.
8866
Willy Tarreaue9656522010-08-17 15:40:09 +02008867 If the entry tracks concurrent connection counters, one connection is
8868 counted for as long as the entry is tracked, and the entry will not
8869 expire during that time. Tracking counters also provides a performance
8870 advantage over just checking the keys, because only one table lookup is
8871 performed for all ACL checks that make use of it.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008872
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02008873 - sc-inc-gpc0(<sc-id>):
8874 The "sc-inc-gpc0" increments the GPC0 counter according to the sticky
8875 counter designated by <sc-id>. If an error occurs, this action silently
8876 fails and the actions evaluation continues.
8877
Thierry FOURNIER236657b2015-08-19 08:25:14 +02008878 - sc-set-gpt0(<sc-id>) <int>:
8879 This action sets the GPT0 tag according to the sticky counter designated
8880 by <sc-id> and the value of <int>. The expected result is a boolean. If
8881 an error occurs, this action silently fails and the actions evaluation
8882 continues.
8883
William Lallemand2e785f22016-05-25 01:48:42 +02008884 - set-src <expr> :
8885 Is used to set the source IP address to the value of specified
8886 expression. Useful if you want to mask source IP for privacy.
8887 If you want to provide an IP from a HTTP header use "http-request
8888 set-src"
8889
8890 <expr> Is a standard HAProxy expression formed by a sample-fetch
8891 followed by some converters.
8892
8893 Example:
8894
8895 tcp-request connection set-src src,ipmask(24)
8896
Willy Tarreau0c630532016-10-21 17:52:58 +02008897 When possible, set-src preserves the original source port as long as the
8898 address family allows it, otherwise the source port is set to 0.
William Lallemand2e785f22016-05-25 01:48:42 +02008899
William Lallemand44be6402016-05-25 01:51:35 +02008900 - set-src-port <expr> :
8901 Is used to set the source port address to the value of specified
8902 expression.
8903
8904 <expr> Is a standard HAProxy expression formed by a sample-fetch
8905 followed by some converters.
8906
8907 Example:
8908
8909 tcp-request connection set-src-port int(4000)
8910
Willy Tarreau0c630532016-10-21 17:52:58 +02008911 When possible, set-src-port preserves the original source address as long
8912 as the address family supports a port, otherwise it forces the source
8913 address to IPv4 "0.0.0.0" before rewriting the port.
William Lallemand44be6402016-05-25 01:51:35 +02008914
William Lallemand13e9b0c2016-05-25 02:34:07 +02008915 - set-dst <expr> :
8916 Is used to set the destination IP address to the value of specified
8917 expression. Useful if you want to mask IP for privacy in log.
8918 If you want to provide an IP from a HTTP header use "http-request
8919 set-dst". If you want to connect to the new address/port, use
8920 '0.0.0.0:0' as a server address in the backend.
8921
8922 <expr> Is a standard HAProxy expression formed by a sample-fetch
8923 followed by some converters.
8924
8925 Example:
8926
8927 tcp-request connection set-dst dst,ipmask(24)
8928 tcp-request connection set-dst ipv4(10.0.0.1)
8929
Willy Tarreau0c630532016-10-21 17:52:58 +02008930 When possible, set-dst preserves the original destination port as long as
8931 the address family allows it, otherwise the destination port is set to 0.
8932
William Lallemand13e9b0c2016-05-25 02:34:07 +02008933 - set-dst-port <expr> :
8934 Is used to set the destination port address to the value of specified
8935 expression. If you want to connect to the new address/port, use
8936 '0.0.0.0:0' as a server address in the backend.
8937
8938
8939 <expr> Is a standard HAProxy expression formed by a sample-fetch
8940 followed by some converters.
8941
8942 Example:
8943
8944 tcp-request connection set-dst-port int(4000)
8945
Willy Tarreau0c630532016-10-21 17:52:58 +02008946 When possible, set-dst-port preserves the original destination address as
8947 long as the address family supports a port, otherwise it forces the
8948 destination address to IPv4 "0.0.0.0" before rewriting the port.
8949
Willy Tarreau2d392c22015-08-24 01:43:45 +02008950 - "silent-drop" :
8951 This stops the evaluation of the rules and makes the client-facing
8952 connection suddenly disappear using a system-dependant way that tries
8953 to prevent the client from being notified. The effect it then that the
8954 client still sees an established connection while there's none on
8955 HAProxy. The purpose is to achieve a comparable effect to "tarpit"
8956 except that it doesn't use any local resource at all on the machine
8957 running HAProxy. It can resist much higher loads than "tarpit", and
8958 slow down stronger attackers. It is important to undestand the impact
8959 of using this mechanism. All stateful equipments placed between the
8960 client and HAProxy (firewalls, proxies, load balancers) will also keep
8961 the established connection for a long time and may suffer from this
8962 action. On modern Linux systems running with enough privileges, the
8963 TCP_REPAIR socket option is used to block the emission of a TCP
8964 reset. On other systems, the socket's TTL is reduced to 1 so that the
8965 TCP reset doesn't pass the first router, though it's still delivered to
8966 local networks. Do not use it unless you fully understand how it works.
8967
Willy Tarreaue9656522010-08-17 15:40:09 +02008968 Note that the "if/unless" condition is optional. If no condition is set on
8969 the action, it is simply performed unconditionally. That can be useful for
8970 "track-sc*" actions as well as for changing the default action to a reject.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008971
Willy Tarreaue9656522010-08-17 15:40:09 +02008972 Example: accept all connections from white-listed hosts, reject too fast
8973 connection without counting them, and track accepted connections.
8974 This results in connection rate being capped from abusive sources.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008975
Willy Tarreaue9656522010-08-17 15:40:09 +02008976 tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008977 tcp-request connection reject if { src_conn_rate gt 10 }
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02008978 tcp-request connection track-sc0 src
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008979
Willy Tarreaue9656522010-08-17 15:40:09 +02008980 Example: accept all connections from white-listed hosts, count all other
8981 connections and reject too fast ones. This results in abusive ones
8982 being blocked as long as they don't slow down.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008983
Willy Tarreaue9656522010-08-17 15:40:09 +02008984 tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02008985 tcp-request connection track-sc0 src
8986 tcp-request connection reject if { sc0_conn_rate gt 10 }
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008987
Willy Tarreau4f0d9192013-06-11 20:40:55 +02008988 Example: enable the PROXY protocol for traffic coming from all known proxies.
8989
8990 tcp-request connection expect-proxy layer4 if { src -f proxies.lst }
8991
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008992 See section 7 about ACL usage.
8993
Willy Tarreau4f614292016-10-21 17:49:36 +02008994 See also : "tcp-request session", "tcp-request content", "stick-table"
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008995
8996
Willy Tarreaue9656522010-08-17 15:40:09 +02008997tcp-request content <action> [{if | unless} <condition>]
8998 Perform an action on a new session depending on a layer 4-7 condition
Willy Tarreau62644772008-07-16 18:36:06 +02008999 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaufb356202010-08-03 14:02:05 +02009000 no | yes | yes | yes
Willy Tarreaue9656522010-08-17 15:40:09 +02009001 Arguments :
Willy Tarreauc870bfd2015-09-28 18:47:38 +02009002 <action> defines the action to perform if the condition applies. See
9003 below.
Willy Tarreau62644772008-07-16 18:36:06 +02009004
Willy Tarreaue9656522010-08-17 15:40:09 +02009005 <condition> is a standard layer 4-7 ACL-based condition (see section 7).
Willy Tarreau62644772008-07-16 18:36:06 +02009006
Willy Tarreaue9656522010-08-17 15:40:09 +02009007 A request's contents can be analysed at an early stage of request processing
9008 called "TCP content inspection". During this stage, ACL-based rules are
9009 evaluated every time the request contents are updated, until either an
9010 "accept" or a "reject" rule matches, or the TCP request inspection delay
9011 expires with no matching rule.
Willy Tarreau62644772008-07-16 18:36:06 +02009012
Willy Tarreaue9656522010-08-17 15:40:09 +02009013 The first difference between these rules and "tcp-request connection" rules
9014 is that "tcp-request content" rules can make use of contents to take a
9015 decision. Most often, these decisions will consider a protocol recognition or
9016 validity. The second difference is that content-based rules can be used in
Willy Tarreauf3338342014-01-28 21:40:28 +01009017 both frontends and backends. In case of HTTP keep-alive with the client, all
9018 tcp-request content rules are evaluated again, so haproxy keeps a record of
9019 what sticky counters were assigned by a "tcp-request connection" versus a
9020 "tcp-request content" rule, and flushes all the content-related ones after
9021 processing an HTTP request, so that they may be evaluated again by the rules
9022 being evaluated again for the next request. This is of particular importance
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009023 when the rule tracks some L7 information or when it is conditioned by an
Willy Tarreauf3338342014-01-28 21:40:28 +01009024 L7-based ACL, since tracking may change between requests.
Willy Tarreau62644772008-07-16 18:36:06 +02009025
Willy Tarreaue9656522010-08-17 15:40:09 +02009026 Content-based rules are evaluated in their exact declaration order. If no
9027 rule matches or if there is no rule, the default action is to accept the
9028 contents. There is no specific limit to the number of rules which may be
9029 inserted.
Willy Tarreau62644772008-07-16 18:36:06 +02009030
Thierry FOURNIER236657b2015-08-19 08:25:14 +02009031 Several types of actions are supported :
Willy Tarreau18bf01e2014-06-13 16:18:52 +02009032 - accept : the request is accepted
9033 - reject : the request is rejected and the connection is closed
9034 - capture : the specified sample expression is captured
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009035 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>]
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02009036 - sc-inc-gpc0(<sc-id>)
Thierry Fournierb9125672016-03-29 19:34:37 +02009037 - sc-set-gpt0(<sc-id>) <int>
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009038 - set-var(<var-name>) <expr>
Willy Tarreau2d392c22015-08-24 01:43:45 +02009039 - silent-drop
Willy Tarreau62644772008-07-16 18:36:06 +02009040
Willy Tarreaue9656522010-08-17 15:40:09 +02009041 They have the same meaning as their counter-parts in "tcp-request connection"
9042 so please refer to that section for a complete description.
Willy Tarreau62644772008-07-16 18:36:06 +02009043
Willy Tarreauf3338342014-01-28 21:40:28 +01009044 While there is nothing mandatory about it, it is recommended to use the
9045 track-sc0 in "tcp-request connection" rules, track-sc1 for "tcp-request
9046 content" rules in the frontend, and track-sc2 for "tcp-request content"
9047 rules in the backend, because that makes the configuration more readable
9048 and easier to troubleshoot, but this is just a guideline and all counters
9049 may be used everywhere.
Willy Tarreau62644772008-07-16 18:36:06 +02009050
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01009051 Note that the "if/unless" condition is optional. If no condition is set on
Willy Tarreaue9656522010-08-17 15:40:09 +02009052 the action, it is simply performed unconditionally. That can be useful for
9053 "track-sc*" actions as well as for changing the default action to a reject.
Willy Tarreau62644772008-07-16 18:36:06 +02009054
Willy Tarreaue9656522010-08-17 15:40:09 +02009055 It is perfectly possible to match layer 7 contents with "tcp-request content"
Willy Tarreauc0239e02012-04-16 14:42:55 +02009056 rules, since HTTP-specific ACL matches are able to preliminarily parse the
9057 contents of a buffer before extracting the required data. If the buffered
9058 contents do not parse as a valid HTTP message, then the ACL does not match.
9059 The parser which is involved there is exactly the same as for all other HTTP
Willy Tarreauf3338342014-01-28 21:40:28 +01009060 processing, so there is no risk of parsing something differently. In an HTTP
9061 backend connected to from an HTTP frontend, it is guaranteed that HTTP
9062 contents will always be immediately present when the rule is evaluated first.
Willy Tarreau62644772008-07-16 18:36:06 +02009063
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009064 Tracking layer7 information is also possible provided that the information
Willy Tarreau4d54c7c2014-09-16 15:48:15 +02009065 are present when the rule is processed. The rule processing engine is able to
9066 wait until the inspect delay expires when the data to be tracked is not yet
9067 available.
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009068
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009069 The "set-var" is used to set the content of a variable. The variable is
Willy Tarreau4f614292016-10-21 17:49:36 +02009070 declared inline. For "tcp-request session" rules, only session-level
9071 variables can be used, without any layer7 contents.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009072
Daniel Schneller0b547052016-03-21 20:46:57 +01009073 <var-name> The name of the variable starts with an indication about
9074 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +01009075 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +01009076 "sess" : the variable is shared with the whole session
9077 "txn" : the variable is shared with the transaction
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009078 (request and response)
Daniel Schneller0b547052016-03-21 20:46:57 +01009079 "req" : the variable is shared only during request
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009080 processing
Daniel Schneller0b547052016-03-21 20:46:57 +01009081 "res" : the variable is shared only during response
9082 processing
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009083 This prefix is followed by a name. The separator is a '.'.
Christopher Fauletb71557a2016-10-31 10:49:03 +01009084 The name may only contain characters 'a-z', 'A-Z', '0-9',
9085 '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009086
9087 <expr> Is a standard HAProxy expression formed by a sample-fetch
9088 followed by some converters.
9089
9090 Example:
9091
9092 tcp-request content set-var(sess.my_var) src
9093
Willy Tarreau62644772008-07-16 18:36:06 +02009094 Example:
Willy Tarreaue9656522010-08-17 15:40:09 +02009095 # Accept HTTP requests containing a Host header saying "example.com"
9096 # and reject everything else.
9097 acl is_host_com hdr(Host) -i example.com
9098 tcp-request inspect-delay 30s
Willy Tarreauc0239e02012-04-16 14:42:55 +02009099 tcp-request content accept if is_host_com
Willy Tarreaue9656522010-08-17 15:40:09 +02009100 tcp-request content reject
9101
9102 Example:
Willy Tarreau62644772008-07-16 18:36:06 +02009103 # reject SMTP connection if client speaks first
9104 tcp-request inspect-delay 30s
9105 acl content_present req_len gt 0
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009106 tcp-request content reject if content_present
Willy Tarreau62644772008-07-16 18:36:06 +02009107
9108 # Forward HTTPS connection only if client speaks
9109 tcp-request inspect-delay 30s
9110 acl content_present req_len gt 0
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009111 tcp-request content accept if content_present
Willy Tarreaue9656522010-08-17 15:40:09 +02009112 tcp-request content reject
9113
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009114 Example:
9115 # Track the last IP from X-Forwarded-For
9116 tcp-request inspect-delay 10s
Willy Tarreau4d54c7c2014-09-16 15:48:15 +02009117 tcp-request content track-sc0 hdr(x-forwarded-for,-1)
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009118
9119 Example:
9120 # track request counts per "base" (concatenation of Host+URL)
9121 tcp-request inspect-delay 10s
Willy Tarreau4d54c7c2014-09-16 15:48:15 +02009122 tcp-request content track-sc0 base table req-rate
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009123
Willy Tarreaue9656522010-08-17 15:40:09 +02009124 Example: track per-frontend and per-backend counters, block abusers at the
9125 frontend when the backend detects abuse.
9126
9127 frontend http
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009128 # Use General Purpose Couter 0 in SC0 as a global abuse counter
Willy Tarreaue9656522010-08-17 15:40:09 +02009129 # protecting all our sites
9130 stick-table type ip size 1m expire 5m store gpc0
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009131 tcp-request connection track-sc0 src
9132 tcp-request connection reject if { sc0_get_gpc0 gt 0 }
Willy Tarreaue9656522010-08-17 15:40:09 +02009133 ...
9134 use_backend http_dynamic if { path_end .php }
9135
9136 backend http_dynamic
9137 # if a source makes too fast requests to this dynamic site (tracked
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009138 # by SC1), block it globally in the frontend.
Willy Tarreaue9656522010-08-17 15:40:09 +02009139 stick-table type ip size 1m expire 5m store http_req_rate(10s)
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009140 acl click_too_fast sc1_http_req_rate gt 10
9141 acl mark_as_abuser sc0_inc_gpc0 gt 0
9142 tcp-request content track-sc1 src
Willy Tarreaue9656522010-08-17 15:40:09 +02009143 tcp-request content reject if click_too_fast mark_as_abuser
Willy Tarreau62644772008-07-16 18:36:06 +02009144
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009145 See section 7 about ACL usage.
Willy Tarreau62644772008-07-16 18:36:06 +02009146
Willy Tarreau4f614292016-10-21 17:49:36 +02009147 See also : "tcp-request connection", "tcp-request session", and
9148 "tcp-request inspect-delay"
Willy Tarreau62644772008-07-16 18:36:06 +02009149
9150
9151tcp-request inspect-delay <timeout>
9152 Set the maximum allowed time to wait for data during content inspection
9153 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaufb356202010-08-03 14:02:05 +02009154 no | yes | yes | yes
Willy Tarreau62644772008-07-16 18:36:06 +02009155 Arguments :
9156 <timeout> is the timeout value specified in milliseconds by default, but
9157 can be in any other unit if the number is suffixed by the unit,
9158 as explained at the top of this document.
9159
9160 People using haproxy primarily as a TCP relay are often worried about the
9161 risk of passing any type of protocol to a server without any analysis. In
9162 order to be able to analyze the request contents, we must first withhold
9163 the data then analyze them. This statement simply enables withholding of
9164 data for at most the specified amount of time.
9165
Willy Tarreaufb356202010-08-03 14:02:05 +02009166 TCP content inspection applies very early when a connection reaches a
9167 frontend, then very early when the connection is forwarded to a backend. This
9168 means that a connection may experience a first delay in the frontend and a
9169 second delay in the backend if both have tcp-request rules.
9170
Willy Tarreau62644772008-07-16 18:36:06 +02009171 Note that when performing content inspection, haproxy will evaluate the whole
9172 rules for every new chunk which gets in, taking into account the fact that
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01009173 those data are partial. If no rule matches before the aforementioned delay,
Willy Tarreau62644772008-07-16 18:36:06 +02009174 a last check is performed upon expiration, this time considering that the
Willy Tarreaud869b242009-03-15 14:43:58 +01009175 contents are definitive. If no delay is set, haproxy will not wait at all
9176 and will immediately apply a verdict based on the available information.
9177 Obviously this is unlikely to be very useful and might even be racy, so such
9178 setups are not recommended.
Willy Tarreau62644772008-07-16 18:36:06 +02009179
9180 As soon as a rule matches, the request is released and continues as usual. If
9181 the timeout is reached and no rule matches, the default policy will be to let
9182 it pass through unaffected.
9183
9184 For most protocols, it is enough to set it to a few seconds, as most clients
9185 send the full request immediately upon connection. Add 3 or more seconds to
9186 cover TCP retransmits but that's all. For some protocols, it may make sense
Willy Tarreaud72758d2010-01-12 10:42:19 +01009187 to use large values, for instance to ensure that the client never talks
Willy Tarreau62644772008-07-16 18:36:06 +02009188 before the server (eg: SMTP), or to wait for a client to talk before passing
9189 data to the server (eg: SSL). Note that the client timeout must cover at
Willy Tarreaub824b002010-09-29 16:36:16 +02009190 least the inspection delay, otherwise it will expire first. If the client
9191 closes the connection or if the buffer is full, the delay immediately expires
9192 since the contents will not be able to change anymore.
Willy Tarreau62644772008-07-16 18:36:06 +02009193
Willy Tarreau55165fe2009-05-10 12:02:55 +02009194 See also : "tcp-request content accept", "tcp-request content reject",
Willy Tarreau62644772008-07-16 18:36:06 +02009195 "timeout client".
9196
9197
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009198tcp-response content <action> [{if | unless} <condition>]
9199 Perform an action on a session response depending on a layer 4-7 condition
9200 May be used in sections : defaults | frontend | listen | backend
9201 no | no | yes | yes
9202 Arguments :
Willy Tarreauc870bfd2015-09-28 18:47:38 +02009203 <action> defines the action to perform if the condition applies. See
9204 below.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009205
9206 <condition> is a standard layer 4-7 ACL-based condition (see section 7).
9207
9208 Response contents can be analysed at an early stage of response processing
9209 called "TCP content inspection". During this stage, ACL-based rules are
9210 evaluated every time the response contents are updated, until either an
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02009211 "accept", "close" or a "reject" rule matches, or a TCP response inspection
9212 delay is set and expires with no matching rule.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009213
9214 Most often, these decisions will consider a protocol recognition or validity.
9215
9216 Content-based rules are evaluated in their exact declaration order. If no
9217 rule matches or if there is no rule, the default action is to accept the
9218 contents. There is no specific limit to the number of rules which may be
9219 inserted.
9220
Thierry FOURNIER236657b2015-08-19 08:25:14 +02009221 Several types of actions are supported :
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009222 - accept :
9223 accepts the response if the condition is true (when used with "if")
9224 or false (when used with "unless"). The first such rule executed ends
9225 the rules evaluation.
9226
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02009227 - close :
9228 immediately closes the connection with the server if the condition is
9229 true (when used with "if"), or false (when used with "unless"). The
9230 first such rule executed ends the rules evaluation. The main purpose of
9231 this action is to force a connection to be finished between a client
9232 and a server after an exchange when the application protocol expects
9233 some long time outs to elapse first. The goal is to eliminate idle
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009234 connections which take significant resources on servers with certain
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02009235 protocols.
9236
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009237 - reject :
9238 rejects the response if the condition is true (when used with "if")
9239 or false (when used with "unless"). The first such rule executed ends
Jamie Gloudonaaa21002012-08-25 00:18:33 -04009240 the rules evaluation. Rejected session are immediately closed.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009241
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009242 - set-var(<var-name>) <expr>
9243 Sets a variable.
9244
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02009245 - sc-inc-gpc0(<sc-id>):
9246 This action increments the GPC0 counter according to the sticky
9247 counter designated by <sc-id>. If an error occurs, this action fails
9248 silently and the actions evaluation continues.
9249
Thierry FOURNIER236657b2015-08-19 08:25:14 +02009250 - sc-set-gpt0(<sc-id>) <int> :
9251 This action sets the GPT0 tag according to the sticky counter designated
9252 by <sc-id> and the value of <int>. The expected result is a boolean. If
9253 an error occurs, this action silently fails and the actions evaluation
9254 continues.
9255
Willy Tarreau2d392c22015-08-24 01:43:45 +02009256 - "silent-drop" :
9257 This stops the evaluation of the rules and makes the client-facing
9258 connection suddenly disappear using a system-dependant way that tries
9259 to prevent the client from being notified. The effect it then that the
9260 client still sees an established connection while there's none on
9261 HAProxy. The purpose is to achieve a comparable effect to "tarpit"
9262 except that it doesn't use any local resource at all on the machine
9263 running HAProxy. It can resist much higher loads than "tarpit", and
9264 slow down stronger attackers. It is important to undestand the impact
9265 of using this mechanism. All stateful equipments placed between the
9266 client and HAProxy (firewalls, proxies, load balancers) will also keep
9267 the established connection for a long time and may suffer from this
9268 action. On modern Linux systems running with enough privileges, the
9269 TCP_REPAIR socket option is used to block the emission of a TCP
9270 reset. On other systems, the socket's TTL is reduced to 1 so that the
9271 TCP reset doesn't pass the first router, though it's still delivered to
9272 local networks. Do not use it unless you fully understand how it works.
9273
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009274 Note that the "if/unless" condition is optional. If no condition is set on
9275 the action, it is simply performed unconditionally. That can be useful for
9276 for changing the default action to a reject.
9277
Jamie Gloudonaaa21002012-08-25 00:18:33 -04009278 It is perfectly possible to match layer 7 contents with "tcp-response
9279 content" rules, but then it is important to ensure that a full response has
9280 been buffered, otherwise no contents will match. In order to achieve this,
9281 the best solution involves detecting the HTTP protocol during the inspection
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009282 period.
9283
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009284 The "set-var" is used to set the content of a variable. The variable is
9285 declared inline.
9286
Daniel Schneller0b547052016-03-21 20:46:57 +01009287 <var-name> The name of the variable starts with an indication about
9288 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +01009289 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +01009290 "sess" : the variable is shared with the whole session
9291 "txn" : the variable is shared with the transaction
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009292 (request and response)
Daniel Schneller0b547052016-03-21 20:46:57 +01009293 "req" : the variable is shared only during request
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009294 processing
Daniel Schneller0b547052016-03-21 20:46:57 +01009295 "res" : the variable is shared only during response
9296 processing
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009297 This prefix is followed by a name. The separator is a '.'.
Christopher Fauletb71557a2016-10-31 10:49:03 +01009298 The name may only contain characters 'a-z', 'A-Z', '0-9',
9299 '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009300
9301 <expr> Is a standard HAProxy expression formed by a sample-fetch
9302 followed by some converters.
9303
9304 Example:
9305
9306 tcp-request content set-var(sess.my_var) src
9307
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009308 See section 7 about ACL usage.
9309
9310 See also : "tcp-request content", "tcp-response inspect-delay"
9311
9312
Willy Tarreau4f614292016-10-21 17:49:36 +02009313tcp-request session <action> [{if | unless} <condition>]
9314 Perform an action on a validated session depending on a layer 5 condition
9315 May be used in sections : defaults | frontend | listen | backend
9316 no | yes | yes | no
9317 Arguments :
9318 <action> defines the action to perform if the condition applies. See
9319 below.
9320
9321 <condition> is a standard layer5-only ACL-based condition (see section 7).
9322
9323 Once a session is validated, (ie. after all handshakes have been completed),
9324 it is possible to evaluate some conditions to decide whether this session
9325 must be accepted or dropped or have its counters tracked. Those conditions
9326 cannot make use of any data contents because no buffers are allocated yet and
9327 the processing cannot wait at this stage. The main use case it to copy some
9328 early information into variables (since variables are accessible in the
9329 session), or to keep track of some information collected after the handshake,
9330 such as SSL-level elements (SNI, ciphers, client cert's CN) or information
9331 from the PROXY protocol header (eg: track a source forwarded this way). The
9332 extracted information can thus be copied to a variable or tracked using
9333 "track-sc" rules. Of course it is also possible to decide to accept/reject as
9334 with other rulesets. Most operations performed here could also be performed
9335 in "tcp-request content" rules, except that in HTTP these rules are evaluated
9336 for each new request, and that might not always be acceptable. For example a
9337 rule might increment a counter on each evaluation. It would also be possible
9338 that a country is resolved by geolocation from the source IP address,
9339 assigned to a session-wide variable, then the source address rewritten from
9340 an HTTP header for all requests. If some contents need to be inspected in
9341 order to take the decision, the "tcp-request content" statements must be used
9342 instead.
9343
9344 The "tcp-request session" rules are evaluated in their exact declaration
9345 order. If no rule matches or if there is no rule, the default action is to
9346 accept the incoming session. There is no specific limit to the number of
9347 rules which may be inserted.
9348
9349 Several types of actions are supported :
9350 - accept : the request is accepted
9351 - reject : the request is rejected and the connection is closed
9352 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>]
9353 - sc-inc-gpc0(<sc-id>)
9354 - sc-set-gpt0(<sc-id>) <int>
9355 - set-var(<var-name>) <expr>
9356 - silent-drop
9357
9358 These actions have the same meaning as their respective counter-parts in
9359 "tcp-request connection" and "tcp-request content", so please refer to these
9360 sections for a complete description.
9361
9362 Note that the "if/unless" condition is optional. If no condition is set on
9363 the action, it is simply performed unconditionally. That can be useful for
9364 "track-sc*" actions as well as for changing the default action to a reject.
9365
9366 Example: track the original source address by default, or the one advertised
9367 in the PROXY protocol header for connection coming from the local
9368 proxies. The first connection-level rule enables receipt of the
9369 PROXY protocol for these ones, the second rule tracks whatever
9370 address we decide to keep after optional decoding.
9371
9372 tcp-request connection expect-proxy layer4 if { src -f proxies.lst }
9373 tcp-request session track-sc0 src
9374
9375 Example: accept all sessions from white-listed hosts, reject too fast
9376 sessions without counting them, and track accepted sessions.
9377 This results in session rate being capped from abusive sources.
9378
9379 tcp-request session accept if { src -f /etc/haproxy/whitelist.lst }
9380 tcp-request session reject if { src_sess_rate gt 10 }
9381 tcp-request session track-sc0 src
9382
9383 Example: accept all sessions from white-listed hosts, count all other
9384 sessions and reject too fast ones. This results in abusive ones
9385 being blocked as long as they don't slow down.
9386
9387 tcp-request session accept if { src -f /etc/haproxy/whitelist.lst }
9388 tcp-request session track-sc0 src
9389 tcp-request session reject if { sc0_sess_rate gt 10 }
9390
9391 See section 7 about ACL usage.
9392
9393 See also : "tcp-request connection", "tcp-request content", "stick-table"
9394
9395
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009396tcp-response inspect-delay <timeout>
9397 Set the maximum allowed time to wait for a response during content inspection
9398 May be used in sections : defaults | frontend | listen | backend
9399 no | no | yes | yes
9400 Arguments :
9401 <timeout> is the timeout value specified in milliseconds by default, but
9402 can be in any other unit if the number is suffixed by the unit,
9403 as explained at the top of this document.
9404
9405 See also : "tcp-response content", "tcp-request inspect-delay".
9406
9407
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009408timeout check <timeout>
9409 Set additional check timeout, but only after a connection has been already
9410 established.
9411
9412 May be used in sections: defaults | frontend | listen | backend
9413 yes | no | yes | yes
9414 Arguments:
9415 <timeout> is the timeout value specified in milliseconds by default, but
9416 can be in any other unit if the number is suffixed by the unit,
9417 as explained at the top of this document.
9418
9419 If set, haproxy uses min("timeout connect", "inter") as a connect timeout
9420 for check and "timeout check" as an additional read timeout. The "min" is
9421 used so that people running with *very* long "timeout connect" (eg. those
9422 who needed this due to the queue or tarpit) do not slow down their checks.
Willy Tarreaud7550a22010-02-10 05:10:19 +01009423 (Please also note that there is no valid reason to have such long connect
9424 timeouts, because "timeout queue" and "timeout tarpit" can always be used to
9425 avoid that).
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009426
9427 If "timeout check" is not set haproxy uses "inter" for complete check
9428 timeout (connect + read) exactly like all <1.3.15 version.
9429
9430 In most cases check request is much simpler and faster to handle than normal
9431 requests and people may want to kick out laggy servers so this timeout should
Willy Tarreau41a340d2008-01-22 12:25:31 +01009432 be smaller than "timeout server".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009433
9434 This parameter is specific to backends, but can be specified once for all in
9435 "defaults" sections. This is in fact one of the easiest solutions not to
9436 forget about it.
9437
Willy Tarreau41a340d2008-01-22 12:25:31 +01009438 See also: "timeout connect", "timeout queue", "timeout server",
9439 "timeout tarpit".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009440
9441
Willy Tarreau0ba27502007-12-24 16:55:16 +01009442timeout client <timeout>
9443timeout clitimeout <timeout> (deprecated)
9444 Set the maximum inactivity time on the client side.
9445 May be used in sections : defaults | frontend | listen | backend
9446 yes | yes | yes | no
9447 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01009448 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01009449 can be in any other unit if the number is suffixed by the unit,
9450 as explained at the top of this document.
9451
9452 The inactivity timeout applies when the client is expected to acknowledge or
9453 send data. In HTTP mode, this timeout is particularly important to consider
9454 during the first phase, when the client sends the request, and during the
Baptiste Assmann2e1941e2016-03-06 23:24:12 +01009455 response while it is reading data sent by the server. That said, for the
9456 first phase, it is preferable to set the "timeout http-request" to better
9457 protect HAProxy from Slowloris like attacks. The value is specified in
9458 milliseconds by default, but can be in any other unit if the number is
Willy Tarreau0ba27502007-12-24 16:55:16 +01009459 suffixed by the unit, as specified at the top of this document. In TCP mode
9460 (and to a lesser extent, in HTTP mode), it is highly recommended that the
9461 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01009462 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01009463 losses by specifying timeouts that are slightly above multiples of 3 seconds
Willy Tarreauce887fd2012-05-12 12:50:00 +02009464 (eg: 4 or 5 seconds). If some long-lived sessions are mixed with short-lived
9465 sessions (eg: WebSocket and HTTP), it's worth considering "timeout tunnel",
Willy Tarreau05cdd962014-05-10 14:30:07 +02009466 which overrides "timeout client" and "timeout server" for tunnels, as well as
9467 "timeout client-fin" for half-closed connections.
Willy Tarreau0ba27502007-12-24 16:55:16 +01009468
9469 This parameter is specific to frontends, but can be specified once for all in
9470 "defaults" sections. This is in fact one of the easiest solutions not to
9471 forget about it. An unspecified timeout results in an infinite timeout, which
9472 is not recommended. Such a usage is accepted and works but reports a warning
9473 during startup because it may results in accumulation of expired sessions in
9474 the system if the system's timeouts are not configured either.
9475
9476 This parameter replaces the old, deprecated "clitimeout". It is recommended
9477 to use it to write new configurations. The form "timeout clitimeout" is
9478 provided only by backwards compatibility but its use is strongly discouraged.
9479
Baptiste Assmann2e1941e2016-03-06 23:24:12 +01009480 See also : "clitimeout", "timeout server", "timeout tunnel",
9481 "timeout http-request".
Willy Tarreau0ba27502007-12-24 16:55:16 +01009482
9483
Willy Tarreau05cdd962014-05-10 14:30:07 +02009484timeout client-fin <timeout>
9485 Set the inactivity timeout on the client side for half-closed connections.
9486 May be used in sections : defaults | frontend | listen | backend
9487 yes | yes | yes | no
9488 Arguments :
9489 <timeout> is the timeout value specified in milliseconds by default, but
9490 can be in any other unit if the number is suffixed by the unit,
9491 as explained at the top of this document.
9492
9493 The inactivity timeout applies when the client is expected to acknowledge or
9494 send data while one direction is already shut down. This timeout is different
9495 from "timeout client" in that it only applies to connections which are closed
9496 in one direction. This is particularly useful to avoid keeping connections in
9497 FIN_WAIT state for too long when clients do not disconnect cleanly. This
9498 problem is particularly common long connections such as RDP or WebSocket.
9499 Note that this timeout can override "timeout tunnel" when a connection shuts
9500 down in one direction.
9501
9502 This parameter is specific to frontends, but can be specified once for all in
9503 "defaults" sections. By default it is not set, so half-closed connections
9504 will use the other timeouts (timeout.client or timeout.tunnel).
9505
9506 See also : "timeout client", "timeout server-fin", and "timeout tunnel".
9507
9508
Willy Tarreau0ba27502007-12-24 16:55:16 +01009509timeout connect <timeout>
9510timeout contimeout <timeout> (deprecated)
9511 Set the maximum time to wait for a connection attempt to a server to succeed.
9512 May be used in sections : defaults | frontend | listen | backend
9513 yes | no | yes | yes
9514 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01009515 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01009516 can be in any other unit if the number is suffixed by the unit,
9517 as explained at the top of this document.
9518
9519 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01009520 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreaud72758d2010-01-12 10:42:19 +01009521 cover one or several TCP packet losses by specifying timeouts that are
Willy Tarreau0ba27502007-12-24 16:55:16 +01009522 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009523 connect timeout also presets both queue and tarpit timeouts to the same value
9524 if these have not been specified.
Willy Tarreau0ba27502007-12-24 16:55:16 +01009525
9526 This parameter is specific to backends, but can be specified once for all in
9527 "defaults" sections. This is in fact one of the easiest solutions not to
9528 forget about it. An unspecified timeout results in an infinite timeout, which
9529 is not recommended. Such a usage is accepted and works but reports a warning
9530 during startup because it may results in accumulation of failed sessions in
9531 the system if the system's timeouts are not configured either.
9532
9533 This parameter replaces the old, deprecated "contimeout". It is recommended
9534 to use it to write new configurations. The form "timeout contimeout" is
9535 provided only by backwards compatibility but its use is strongly discouraged.
9536
Willy Tarreau41a340d2008-01-22 12:25:31 +01009537 See also: "timeout check", "timeout queue", "timeout server", "contimeout",
9538 "timeout tarpit".
Willy Tarreau0ba27502007-12-24 16:55:16 +01009539
9540
Willy Tarreaub16a5742010-01-10 14:46:16 +01009541timeout http-keep-alive <timeout>
9542 Set the maximum allowed time to wait for a new HTTP request to appear
9543 May be used in sections : defaults | frontend | listen | backend
9544 yes | yes | yes | yes
9545 Arguments :
9546 <timeout> is the timeout value specified in milliseconds by default, but
9547 can be in any other unit if the number is suffixed by the unit,
9548 as explained at the top of this document.
9549
9550 By default, the time to wait for a new request in case of keep-alive is set
9551 by "timeout http-request". However this is not always convenient because some
9552 people want very short keep-alive timeouts in order to release connections
9553 faster, and others prefer to have larger ones but still have short timeouts
9554 once the request has started to present itself.
9555
9556 The "http-keep-alive" timeout covers these needs. It will define how long to
9557 wait for a new HTTP request to start coming after a response was sent. Once
9558 the first byte of request has been seen, the "http-request" timeout is used
9559 to wait for the complete request to come. Note that empty lines prior to a
9560 new request do not refresh the timeout and are not counted as a new request.
9561
9562 There is also another difference between the two timeouts : when a connection
9563 expires during timeout http-keep-alive, no error is returned, the connection
9564 just closes. If the connection expires in "http-request" while waiting for a
9565 connection to complete, a HTTP 408 error is returned.
9566
9567 In general it is optimal to set this value to a few tens to hundreds of
9568 milliseconds, to allow users to fetch all objects of a page at once but
9569 without waiting for further clicks. Also, if set to a very small value (eg:
9570 1 millisecond) it will probably only accept pipelined requests but not the
9571 non-pipelined ones. It may be a nice trade-off for very large sites running
Patrick Mézard2382ad62010-05-09 10:43:32 +02009572 with tens to hundreds of thousands of clients.
Willy Tarreaub16a5742010-01-10 14:46:16 +01009573
9574 If this parameter is not set, the "http-request" timeout applies, and if both
9575 are not set, "timeout client" still applies at the lower level. It should be
9576 set in the frontend to take effect, unless the frontend is in TCP mode, in
9577 which case the HTTP backend's timeout will be used.
9578
9579 See also : "timeout http-request", "timeout client".
9580
9581
Willy Tarreau036fae02008-01-06 13:24:40 +01009582timeout http-request <timeout>
9583 Set the maximum allowed time to wait for a complete HTTP request
9584 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaucd7afc02009-07-12 10:03:17 +02009585 yes | yes | yes | yes
Willy Tarreau036fae02008-01-06 13:24:40 +01009586 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01009587 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau036fae02008-01-06 13:24:40 +01009588 can be in any other unit if the number is suffixed by the unit,
9589 as explained at the top of this document.
9590
9591 In order to offer DoS protection, it may be required to lower the maximum
9592 accepted time to receive a complete HTTP request without affecting the client
9593 timeout. This helps protecting against established connections on which
9594 nothing is sent. The client timeout cannot offer a good protection against
9595 this abuse because it is an inactivity timeout, which means that if the
9596 attacker sends one character every now and then, the timeout will not
9597 trigger. With the HTTP request timeout, no matter what speed the client
Willy Tarreau2705a612014-05-23 17:38:34 +02009598 types, the request will be aborted if it does not complete in time. When the
9599 timeout expires, an HTTP 408 response is sent to the client to inform it
9600 about the problem, and the connection is closed. The logs will report
9601 termination codes "cR". Some recent browsers are having problems with this
9602 standard, well-documented behaviour, so it might be needed to hide the 408
Willy Tarreau0f228a02015-05-01 15:37:53 +02009603 code using "option http-ignore-probes" or "errorfile 408 /dev/null". See
9604 more details in the explanations of the "cR" termination code in section 8.5.
Willy Tarreau036fae02008-01-06 13:24:40 +01009605
Baptiste Assmanneccdf432015-10-28 13:49:01 +01009606 By default, this timeout only applies to the header part of the request,
9607 and not to any data. As soon as the empty line is received, this timeout is
9608 not used anymore. When combined with "option http-buffer-request", this
9609 timeout also applies to the body of the request..
9610 It is used again on keep-alive connections to wait for a second
Willy Tarreaub16a5742010-01-10 14:46:16 +01009611 request if "timeout http-keep-alive" is not set.
Willy Tarreau036fae02008-01-06 13:24:40 +01009612
9613 Generally it is enough to set it to a few seconds, as most clients send the
9614 full request immediately upon connection. Add 3 or more seconds to cover TCP
9615 retransmits but that's all. Setting it to very low values (eg: 50 ms) will
9616 generally work on local networks as long as there are no packet losses. This
9617 will prevent people from sending bare HTTP requests using telnet.
9618
9619 If this parameter is not set, the client timeout still applies between each
Willy Tarreaucd7afc02009-07-12 10:03:17 +02009620 chunk of the incoming request. It should be set in the frontend to take
9621 effect, unless the frontend is in TCP mode, in which case the HTTP backend's
9622 timeout will be used.
Willy Tarreau036fae02008-01-06 13:24:40 +01009623
Willy Tarreau0f228a02015-05-01 15:37:53 +02009624 See also : "errorfile", "http-ignore-probes", "timeout http-keep-alive", and
Baptiste Assmanneccdf432015-10-28 13:49:01 +01009625 "timeout client", "option http-buffer-request".
Willy Tarreau036fae02008-01-06 13:24:40 +01009626
Willy Tarreau844e3c52008-01-11 16:28:18 +01009627
9628timeout queue <timeout>
9629 Set the maximum time to wait in the queue for a connection slot to be free
9630 May be used in sections : defaults | frontend | listen | backend
9631 yes | no | yes | yes
9632 Arguments :
9633 <timeout> is the timeout value specified in milliseconds by default, but
9634 can be in any other unit if the number is suffixed by the unit,
9635 as explained at the top of this document.
9636
9637 When a server's maxconn is reached, connections are left pending in a queue
9638 which may be server-specific or global to the backend. In order not to wait
9639 indefinitely, a timeout is applied to requests pending in the queue. If the
9640 timeout is reached, it is considered that the request will almost never be
9641 served, so it is dropped and a 503 error is returned to the client.
9642
9643 The "timeout queue" statement allows to fix the maximum time for a request to
9644 be left pending in a queue. If unspecified, the same value as the backend's
9645 connection timeout ("timeout connect") is used, for backwards compatibility
9646 with older versions with no "timeout queue" parameter.
9647
9648 See also : "timeout connect", "contimeout".
9649
9650
9651timeout server <timeout>
9652timeout srvtimeout <timeout> (deprecated)
9653 Set the maximum inactivity time on the server side.
9654 May be used in sections : defaults | frontend | listen | backend
9655 yes | no | yes | yes
9656 Arguments :
9657 <timeout> is the timeout value specified in milliseconds by default, but
9658 can be in any other unit if the number is suffixed by the unit,
9659 as explained at the top of this document.
9660
9661 The inactivity timeout applies when the server is expected to acknowledge or
9662 send data. In HTTP mode, this timeout is particularly important to consider
9663 during the first phase of the server's response, when it has to send the
9664 headers, as it directly represents the server's processing time for the
9665 request. To find out what value to put there, it's often good to start with
9666 what would be considered as unacceptable response times, then check the logs
9667 to observe the response time distribution, and adjust the value accordingly.
9668
9669 The value is specified in milliseconds by default, but can be in any other
9670 unit if the number is suffixed by the unit, as specified at the top of this
9671 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
9672 recommended that the client timeout remains equal to the server timeout in
9673 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01009674 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01009675 packet losses by specifying timeouts that are slightly above multiples of 3
Willy Tarreauce887fd2012-05-12 12:50:00 +02009676 seconds (eg: 4 or 5 seconds minimum). If some long-lived sessions are mixed
9677 with short-lived sessions (eg: WebSocket and HTTP), it's worth considering
9678 "timeout tunnel", which overrides "timeout client" and "timeout server" for
9679 tunnels.
Willy Tarreau844e3c52008-01-11 16:28:18 +01009680
9681 This parameter is specific to backends, but can be specified once for all in
9682 "defaults" sections. This is in fact one of the easiest solutions not to
9683 forget about it. An unspecified timeout results in an infinite timeout, which
9684 is not recommended. Such a usage is accepted and works but reports a warning
9685 during startup because it may results in accumulation of expired sessions in
9686 the system if the system's timeouts are not configured either.
9687
9688 This parameter replaces the old, deprecated "srvtimeout". It is recommended
9689 to use it to write new configurations. The form "timeout srvtimeout" is
9690 provided only by backwards compatibility but its use is strongly discouraged.
9691
Willy Tarreauce887fd2012-05-12 12:50:00 +02009692 See also : "srvtimeout", "timeout client" and "timeout tunnel".
Willy Tarreau844e3c52008-01-11 16:28:18 +01009693
Willy Tarreau05cdd962014-05-10 14:30:07 +02009694
9695timeout server-fin <timeout>
9696 Set the inactivity timeout on the server side for half-closed connections.
9697 May be used in sections : defaults | frontend | listen | backend
9698 yes | no | yes | yes
9699 Arguments :
9700 <timeout> is the timeout value specified in milliseconds by default, but
9701 can be in any other unit if the number is suffixed by the unit,
9702 as explained at the top of this document.
9703
9704 The inactivity timeout applies when the server is expected to acknowledge or
9705 send data while one direction is already shut down. This timeout is different
9706 from "timeout server" in that it only applies to connections which are closed
9707 in one direction. This is particularly useful to avoid keeping connections in
9708 FIN_WAIT state for too long when a remote server does not disconnect cleanly.
9709 This problem is particularly common long connections such as RDP or WebSocket.
9710 Note that this timeout can override "timeout tunnel" when a connection shuts
9711 down in one direction. This setting was provided for completeness, but in most
9712 situations, it should not be needed.
9713
9714 This parameter is specific to backends, but can be specified once for all in
9715 "defaults" sections. By default it is not set, so half-closed connections
9716 will use the other timeouts (timeout.server or timeout.tunnel).
9717
9718 See also : "timeout client-fin", "timeout server", and "timeout tunnel".
9719
Willy Tarreau844e3c52008-01-11 16:28:18 +01009720
9721timeout tarpit <timeout>
Cyril Bonté78caf842010-03-10 22:41:43 +01009722 Set the duration for which tarpitted connections will be maintained
Willy Tarreau844e3c52008-01-11 16:28:18 +01009723 May be used in sections : defaults | frontend | listen | backend
9724 yes | yes | yes | yes
9725 Arguments :
9726 <timeout> is the tarpit duration specified in milliseconds by default, but
9727 can be in any other unit if the number is suffixed by the unit,
9728 as explained at the top of this document.
9729
9730 When a connection is tarpitted using "reqtarpit", it is maintained open with
9731 no activity for a certain amount of time, then closed. "timeout tarpit"
9732 defines how long it will be maintained open.
9733
9734 The value is specified in milliseconds by default, but can be in any other
9735 unit if the number is suffixed by the unit, as specified at the top of this
9736 document. If unspecified, the same value as the backend's connection timeout
9737 ("timeout connect") is used, for backwards compatibility with older versions
Cyril Bonté78caf842010-03-10 22:41:43 +01009738 with no "timeout tarpit" parameter.
Willy Tarreau844e3c52008-01-11 16:28:18 +01009739
9740 See also : "timeout connect", "contimeout".
9741
9742
Willy Tarreauce887fd2012-05-12 12:50:00 +02009743timeout tunnel <timeout>
9744 Set the maximum inactivity time on the client and server side for tunnels.
9745 May be used in sections : defaults | frontend | listen | backend
9746 yes | no | yes | yes
9747 Arguments :
9748 <timeout> is the timeout value specified in milliseconds by default, but
9749 can be in any other unit if the number is suffixed by the unit,
9750 as explained at the top of this document.
9751
Jamie Gloudonaaa21002012-08-25 00:18:33 -04009752 The tunnel timeout applies when a bidirectional connection is established
Willy Tarreauce887fd2012-05-12 12:50:00 +02009753 between a client and a server, and the connection remains inactive in both
9754 directions. This timeout supersedes both the client and server timeouts once
9755 the connection becomes a tunnel. In TCP, this timeout is used as soon as no
9756 analyser remains attached to either connection (eg: tcp content rules are
9757 accepted). In HTTP, this timeout is used when a connection is upgraded (eg:
9758 when switching to the WebSocket protocol, or forwarding a CONNECT request
9759 to a proxy), or after the first response when no keepalive/close option is
9760 specified.
9761
Willy Tarreau05cdd962014-05-10 14:30:07 +02009762 Since this timeout is usually used in conjunction with long-lived connections,
9763 it usually is a good idea to also set "timeout client-fin" to handle the
9764 situation where a client suddenly disappears from the net and does not
9765 acknowledge a close, or sends a shutdown and does not acknowledge pending
9766 data anymore. This can happen in lossy networks where firewalls are present,
9767 and is detected by the presence of large amounts of sessions in a FIN_WAIT
9768 state.
9769
Willy Tarreauce887fd2012-05-12 12:50:00 +02009770 The value is specified in milliseconds by default, but can be in any other
9771 unit if the number is suffixed by the unit, as specified at the top of this
9772 document. Whatever the expected normal idle time, it is a good practice to
9773 cover at least one or several TCP packet losses by specifying timeouts that
9774 are slightly above multiples of 3 seconds (eg: 4 or 5 seconds minimum).
9775
9776 This parameter is specific to backends, but can be specified once for all in
9777 "defaults" sections. This is in fact one of the easiest solutions not to
9778 forget about it.
9779
9780 Example :
9781 defaults http
9782 option http-server-close
9783 timeout connect 5s
9784 timeout client 30s
Willy Tarreau05cdd962014-05-10 14:30:07 +02009785 timeout client-fin 30s
Willy Tarreauce887fd2012-05-12 12:50:00 +02009786 timeout server 30s
9787 timeout tunnel 1h # timeout to use with WebSocket and CONNECT
9788
Willy Tarreau05cdd962014-05-10 14:30:07 +02009789 See also : "timeout client", "timeout client-fin", "timeout server".
Willy Tarreauce887fd2012-05-12 12:50:00 +02009790
9791
Willy Tarreau844e3c52008-01-11 16:28:18 +01009792transparent (deprecated)
9793 Enable client-side transparent proxying
9794 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +01009795 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +01009796 Arguments : none
9797
9798 This keyword was introduced in order to provide layer 7 persistence to layer
9799 3 load balancers. The idea is to use the OS's ability to redirect an incoming
9800 connection for a remote address to a local process (here HAProxy), and let
9801 this process know what address was initially requested. When this option is
9802 used, sessions without cookies will be forwarded to the original destination
9803 IP address of the incoming request (which should match that of another
9804 equipment), while requests with cookies will still be forwarded to the
9805 appropriate server.
9806
9807 The "transparent" keyword is deprecated, use "option transparent" instead.
9808
9809 Note that contrary to a common belief, this option does NOT make HAProxy
9810 present the client's IP to the server when establishing the connection.
9811
Willy Tarreau844e3c52008-01-11 16:28:18 +01009812 See also: "option transparent"
9813
William Lallemanda73203e2012-03-12 12:48:57 +01009814unique-id-format <string>
9815 Generate a unique ID for each request.
9816 May be used in sections : defaults | frontend | listen | backend
9817 yes | yes | yes | no
9818 Arguments :
9819 <string> is a log-format string.
9820
Cyril Bonté108cf6e2012-04-21 23:30:29 +02009821 This keyword creates a ID for each request using the custom log format. A
9822 unique ID is useful to trace a request passing through many components of
9823 a complex infrastructure. The newly created ID may also be logged using the
9824 %ID tag the log-format string.
William Lallemanda73203e2012-03-12 12:48:57 +01009825
Cyril Bonté108cf6e2012-04-21 23:30:29 +02009826 The format should be composed from elements that are guaranteed to be
9827 unique when combined together. For instance, if multiple haproxy instances
9828 are involved, it might be important to include the node name. It is often
9829 needed to log the incoming connection's source and destination addresses
9830 and ports. Note that since multiple requests may be performed over the same
9831 connection, including a request counter may help differentiate them.
9832 Similarly, a timestamp may protect against a rollover of the counter.
9833 Logging the process ID will avoid collisions after a service restart.
William Lallemanda73203e2012-03-12 12:48:57 +01009834
Cyril Bonté108cf6e2012-04-21 23:30:29 +02009835 It is recommended to use hexadecimal notation for many fields since it
9836 makes them more compact and saves space in logs.
William Lallemanda73203e2012-03-12 12:48:57 +01009837
Cyril Bonté108cf6e2012-04-21 23:30:29 +02009838 Example:
William Lallemanda73203e2012-03-12 12:48:57 +01009839
Julien Vehentf21be322014-03-07 08:27:34 -05009840 unique-id-format %{+X}o\ %ci:%cp_%fi:%fp_%Ts_%rt:%pid
William Lallemanda73203e2012-03-12 12:48:57 +01009841
9842 will generate:
9843
9844 7F000001:8296_7F00001E:1F90_4F7B0A69_0003:790A
9845
9846 See also: "unique-id-header"
9847
9848unique-id-header <name>
9849 Add a unique ID header in the HTTP request.
9850 May be used in sections : defaults | frontend | listen | backend
9851 yes | yes | yes | no
9852 Arguments :
9853 <name> is the name of the header.
9854
Cyril Bonté108cf6e2012-04-21 23:30:29 +02009855 Add a unique-id header in the HTTP request sent to the server, using the
9856 unique-id-format. It can't work if the unique-id-format doesn't exist.
William Lallemanda73203e2012-03-12 12:48:57 +01009857
Cyril Bonté108cf6e2012-04-21 23:30:29 +02009858 Example:
William Lallemanda73203e2012-03-12 12:48:57 +01009859
Julien Vehentf21be322014-03-07 08:27:34 -05009860 unique-id-format %{+X}o\ %ci:%cp_%fi:%fp_%Ts_%rt:%pid
William Lallemanda73203e2012-03-12 12:48:57 +01009861 unique-id-header X-Unique-ID
9862
9863 will generate:
9864
9865 X-Unique-ID: 7F000001:8296_7F00001E:1F90_4F7B0A69_0003:790A
9866
9867 See also: "unique-id-format"
Willy Tarreau844e3c52008-01-11 16:28:18 +01009868
Willy Tarreauf51658d2014-04-23 01:21:56 +02009869use_backend <backend> [{if | unless} <condition>]
Willy Tarreau1d0dfb12009-07-07 15:10:31 +02009870 Switch to a specific backend if/unless an ACL-based condition is matched.
Willy Tarreau844e3c52008-01-11 16:28:18 +01009871 May be used in sections : defaults | frontend | listen | backend
9872 no | yes | yes | no
9873 Arguments :
Bertrand Jacquin702d44f2013-11-19 11:43:06 +01009874 <backend> is the name of a valid backend or "listen" section, or a
9875 "log-format" string resolving to a backend name.
Willy Tarreau844e3c52008-01-11 16:28:18 +01009876
Willy Tarreauf51658d2014-04-23 01:21:56 +02009877 <condition> is a condition composed of ACLs, as described in section 7. If
9878 it is omitted, the rule is unconditionally applied.
Willy Tarreau844e3c52008-01-11 16:28:18 +01009879
9880 When doing content-switching, connections arrive on a frontend and are then
9881 dispatched to various backends depending on a number of conditions. The
9882 relation between the conditions and the backends is described with the
Willy Tarreau1d0dfb12009-07-07 15:10:31 +02009883 "use_backend" keyword. While it is normally used with HTTP processing, it can
9884 also be used in pure TCP, either without content using stateless ACLs (eg:
9885 source address validation) or combined with a "tcp-request" rule to wait for
9886 some payload.
Willy Tarreau844e3c52008-01-11 16:28:18 +01009887
9888 There may be as many "use_backend" rules as desired. All of these rules are
9889 evaluated in their declaration order, and the first one which matches will
9890 assign the backend.
9891
9892 In the first form, the backend will be used if the condition is met. In the
9893 second form, the backend will be used if the condition is not met. If no
9894 condition is valid, the backend defined with "default_backend" will be used.
9895 If no default backend is defined, either the servers in the same section are
9896 used (in case of a "listen" section) or, in case of a frontend, no server is
9897 used and a 503 service unavailable response is returned.
9898
Willy Tarreau51aecc72009-07-12 09:47:04 +02009899 Note that it is possible to switch from a TCP frontend to an HTTP backend. In
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01009900 this case, either the frontend has already checked that the protocol is HTTP,
Willy Tarreau51aecc72009-07-12 09:47:04 +02009901 and backend processing will immediately follow, or the backend will wait for
9902 a complete HTTP request to get in. This feature is useful when a frontend
9903 must decode several protocols on a unique port, one of them being HTTP.
9904
Bertrand Jacquin702d44f2013-11-19 11:43:06 +01009905 When <backend> is a simple name, it is resolved at configuration time, and an
9906 error is reported if the specified backend does not exist. If <backend> is
9907 a log-format string instead, no check may be done at configuration time, so
9908 the backend name is resolved dynamically at run time. If the resulting
9909 backend name does not correspond to any valid backend, no other rule is
9910 evaluated, and the default_backend directive is applied instead. Note that
9911 when using dynamic backend names, it is highly recommended to use a prefix
9912 that no other backend uses in order to ensure that an unauthorized backend
9913 cannot be forced from the request.
9914
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009915 It is worth mentioning that "use_backend" rules with an explicit name are
Bertrand Jacquin702d44f2013-11-19 11:43:06 +01009916 used to detect the association between frontends and backends to compute the
9917 backend's "fullconn" setting. This cannot be done for dynamic names.
9918
9919 See also: "default_backend", "tcp-request", "fullconn", "log-format", and
9920 section 7 about ACLs.
Willy Tarreaud72758d2010-01-12 10:42:19 +01009921
Willy Tarreau036fae02008-01-06 13:24:40 +01009922
Willy Tarreau4a5cade2012-04-05 21:09:48 +02009923use-server <server> if <condition>
9924use-server <server> unless <condition>
9925 Only use a specific server if/unless an ACL-based condition is matched.
9926 May be used in sections : defaults | frontend | listen | backend
9927 no | no | yes | yes
9928 Arguments :
Cyril Bonté108cf6e2012-04-21 23:30:29 +02009929 <server> is the name of a valid server in the same backend section.
Willy Tarreau4a5cade2012-04-05 21:09:48 +02009930
9931 <condition> is a condition composed of ACLs, as described in section 7.
9932
9933 By default, connections which arrive to a backend are load-balanced across
9934 the available servers according to the configured algorithm, unless a
9935 persistence mechanism such as a cookie is used and found in the request.
9936
9937 Sometimes it is desirable to forward a particular request to a specific
9938 server without having to declare a dedicated backend for this server. This
9939 can be achieved using the "use-server" rules. These rules are evaluated after
9940 the "redirect" rules and before evaluating cookies, and they have precedence
9941 on them. There may be as many "use-server" rules as desired. All of these
9942 rules are evaluated in their declaration order, and the first one which
9943 matches will assign the server.
9944
9945 If a rule designates a server which is down, and "option persist" is not used
9946 and no force-persist rule was validated, it is ignored and evaluation goes on
9947 with the next rules until one matches.
9948
9949 In the first form, the server will be used if the condition is met. In the
9950 second form, the server will be used if the condition is not met. If no
9951 condition is valid, the processing continues and the server will be assigned
9952 according to other persistence mechanisms.
9953
9954 Note that even if a rule is matched, cookie processing is still performed but
9955 does not assign the server. This allows prefixed cookies to have their prefix
9956 stripped.
9957
9958 The "use-server" statement works both in HTTP and TCP mode. This makes it
9959 suitable for use with content-based inspection. For instance, a server could
9960 be selected in a farm according to the TLS SNI field. And if these servers
9961 have their weight set to zero, they will not be used for other traffic.
9962
9963 Example :
9964 # intercept incoming TLS requests based on the SNI field
9965 use-server www if { req_ssl_sni -i www.example.com }
9966 server www 192.168.0.1:443 weight 0
9967 use-server mail if { req_ssl_sni -i mail.example.com }
9968 server mail 192.168.0.1:587 weight 0
9969 use-server imap if { req_ssl_sni -i imap.example.com }
9970 server mail 192.168.0.1:993 weight 0
9971 # all the rest is forwarded to this server
9972 server default 192.168.0.2:443 check
9973
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009974 See also: "use_backend", section 5 about server and section 7 about ACLs.
Willy Tarreau4a5cade2012-04-05 21:09:48 +02009975
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009976
99775. Bind and Server options
9978--------------------------
9979
9980The "bind", "server" and "default-server" keywords support a number of settings
9981depending on some build options and on the system HAProxy was built on. These
9982settings generally each consist in one word sometimes followed by a value,
9983written on the same line as the "bind" or "server" line. All these options are
9984described in this section.
9985
9986
99875.1. Bind options
9988-----------------
9989
9990The "bind" keyword supports a certain number of settings which are all passed
9991as arguments on the same line. The order in which those arguments appear makes
9992no importance, provided that they appear after the bind address. All of these
9993parameters are optional. Some of them consist in a single words (booleans),
9994while other ones expect a value after them. In this case, the value must be
9995provided immediately after the setting name.
9996
9997The currently supported settings are the following ones.
9998
Bertrand Jacquin93b227d2016-06-04 15:11:10 +01009999accept-netscaler-cip <magic number>
10000 Enforces the use of the NetScaler Client IP insertion protocol over any
10001 connection accepted by any of the TCP sockets declared on the same line. The
10002 NetScaler Client IP insertion protocol dictates the layer 3/4 addresses of
10003 the incoming connection to be used everywhere an address is used, with the
10004 only exception of "tcp-request connection" rules which will only see the
10005 real connection address. Logs will reflect the addresses indicated in the
10006 protocol, unless it is violated, in which case the real address will still
10007 be used. This keyword combined with support from external components can be
10008 used as an efficient and reliable alternative to the X-Forwarded-For
Bertrand Jacquin90759682016-06-06 15:35:39 +010010009 mechanism which is not always reliable and not even always usable. See also
10010 "tcp-request connection expect-netscaler-cip" for a finer-grained setting of
10011 which client is allowed to use the protocol.
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010010012
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010013accept-proxy
10014 Enforces the use of the PROXY protocol over any connection accepted by any of
Willy Tarreau77992672014-06-14 11:06:17 +020010015 the sockets declared on the same line. Versions 1 and 2 of the PROXY protocol
10016 are supported and correctly detected. The PROXY protocol dictates the layer
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010017 3/4 addresses of the incoming connection to be used everywhere an address is
10018 used, with the only exception of "tcp-request connection" rules which will
10019 only see the real connection address. Logs will reflect the addresses
10020 indicated in the protocol, unless it is violated, in which case the real
10021 address will still be used. This keyword combined with support from external
10022 components can be used as an efficient and reliable alternative to the
10023 X-Forwarded-For mechanism which is not always reliable and not even always
Willy Tarreau4f0d9192013-06-11 20:40:55 +020010024 usable. See also "tcp-request connection expect-proxy" for a finer-grained
10025 setting of which client is allowed to use the protocol.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010026
Willy Tarreauab861d32013-04-02 02:30:41 +020010027alpn <protocols>
10028 This enables the TLS ALPN extension and advertises the specified protocol
10029 list as supported on top of ALPN. The protocol list consists in a comma-
10030 delimited list of protocol names, for instance: "http/1.1,http/1.0" (without
10031 quotes). This requires that the SSL library is build with support for TLS
10032 extensions enabled (check with haproxy -vv). The ALPN extension replaces the
10033 initial NPN extension.
10034
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010035backlog <backlog>
10036 Sets the socket's backlog to this value. If unspecified, the frontend's
10037 backlog is used instead, which generally defaults to the maxconn value.
10038
Emeric Brun7fb34422012-09-28 15:26:15 +020010039ecdhe <named curve>
10040 This setting is only available when support for OpenSSL was built in. It sets
Emeric Brun6924ef82013-03-06 14:08:53 +010010041 the named curve (RFC 4492) used to generate ECDH ephemeral keys. By default,
10042 used named curve is prime256v1.
Emeric Brun7fb34422012-09-28 15:26:15 +020010043
Emeric Brunfd33a262012-10-11 16:28:27 +020010044ca-file <cafile>
Emeric Brun1a073b42012-09-28 17:07:34 +020010045 This setting is only available when support for OpenSSL was built in. It
10046 designates a PEM file from which to load CA certificates used to verify
10047 client's certificate.
10048
Emeric Brunb6dc9342012-09-28 17:55:37 +020010049ca-ignore-err [all|<errorID>,...]
10050 This setting is only available when support for OpenSSL was built in.
10051 Sets a comma separated list of errorIDs to ignore during verify at depth > 0.
10052 If set to 'all', all errors are ignored. SSL handshake is not aborted if an
10053 error is ignored.
10054
Christopher Faulet31af49d2015-06-09 17:29:50 +020010055ca-sign-file <cafile>
10056 This setting is only available when support for OpenSSL was built in. It
10057 designates a PEM file containing both the CA certificate and the CA private
10058 key used to create and sign server's certificates. This is a mandatory
10059 setting when the dynamic generation of certificates is enabled. See
10060 'generate-certificates' for details.
10061
10062ca-sign-passphrase <passphrase>
10063 This setting is only available when support for OpenSSL was built in. It is
10064 the CA private key passphrase. This setting is optional and used only when
10065 the dynamic generation of certificates is enabled. See
10066 'generate-certificates' for details.
10067
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010068ciphers <ciphers>
10069 This setting is only available when support for OpenSSL was built in. It sets
10070 the string describing the list of cipher algorithms ("cipher suite") that are
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010071 negotiated during the SSL/TLS handshake. The format of the string is defined
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010072 in "man 1 ciphers" from OpenSSL man pages, and can be for instance a string
10073 such as "AES:ALL:!aNULL:!eNULL:+RC4:@STRENGTH" (without quotes).
10074
Emeric Brunfd33a262012-10-11 16:28:27 +020010075crl-file <crlfile>
Emeric Brun1a073b42012-09-28 17:07:34 +020010076 This setting is only available when support for OpenSSL was built in. It
10077 designates a PEM file from which to load certificate revocation list used
10078 to verify client's certificate.
10079
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010080crt <cert>
Alex Davies0fbf0162013-03-02 16:04:50 +000010081 This setting is only available when support for OpenSSL was built in. It
10082 designates a PEM file containing both the required certificates and any
10083 associated private keys. This file can be built by concatenating multiple
10084 PEM files into one (e.g. cat cert.pem key.pem > combined.pem). If your CA
10085 requires an intermediate certificate, this can also be concatenated into this
10086 file.
10087
10088 If the OpenSSL used supports Diffie-Hellman, parameters present in this file
10089 are loaded.
10090
10091 If a directory name is used instead of a PEM file, then all files found in
Cyril Bonté3180f7b2015-01-25 00:16:08 +010010092 that directory will be loaded in alphabetic order unless their name ends with
Janusz Dziemidowicz2c701b52015-03-07 23:03:59 +010010093 '.issuer', '.ocsp' or '.sctl' (reserved extensions). This directive may be
10094 specified multiple times in order to load certificates from multiple files or
10095 directories. The certificates will be presented to clients who provide a
10096 valid TLS Server Name Indication field matching one of their CN or alt
10097 subjects. Wildcards are supported, where a wildcard character '*' is used
10098 instead of the first hostname component (eg: *.example.org matches
10099 www.example.org but not www.sub.example.org).
Alex Davies0fbf0162013-03-02 16:04:50 +000010100
10101 If no SNI is provided by the client or if the SSL library does not support
10102 TLS extensions, or if the client provides an SNI hostname which does not
10103 match any certificate, then the first loaded certificate will be presented.
10104 This means that when loading certificates from a directory, it is highly
Cyril Bonté3180f7b2015-01-25 00:16:08 +010010105 recommended to load the default one first as a file or to ensure that it will
10106 always be the first one in the directory.
Alex Davies0fbf0162013-03-02 16:04:50 +000010107
Emeric Brune032bfa2012-09-28 13:01:45 +020010108 Note that the same cert may be loaded multiple times without side effects.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010109
Alex Davies0fbf0162013-03-02 16:04:50 +000010110 Some CAs (such as Godaddy) offer a drop down list of server types that do not
10111 include HAProxy when obtaining a certificate. If this happens be sure to
Godbach8bf60a12014-04-21 21:42:41 +080010112 choose a webserver that the CA believes requires an intermediate CA (for
Alex Davies0fbf0162013-03-02 16:04:50 +000010113 Godaddy, selection Apache Tomcat will get the correct bundle, but many
10114 others, e.g. nginx, result in a wrong bundle that will not work for some
10115 clients).
10116
Emeric Brun4147b2e2014-06-16 18:36:30 +020010117 For each PEM file, haproxy checks for the presence of file at the same path
10118 suffixed by ".ocsp". If such file is found, support for the TLS Certificate
10119 Status Request extension (also known as "OCSP stapling") is automatically
10120 enabled. The content of this file is optional. If not empty, it must contain
10121 a valid OCSP Response in DER format. In order to be valid an OCSP Response
10122 must comply with the following rules: it has to indicate a good status,
10123 it has to be a single response for the certificate of the PEM file, and it
10124 has to be valid at the moment of addition. If these rules are not respected
10125 the OCSP Response is ignored and a warning is emitted. In order to identify
10126 which certificate an OCSP Response applies to, the issuer's certificate is
10127 necessary. If the issuer's certificate is not found in the PEM file, it will
10128 be loaded from a file at the same path as the PEM file suffixed by ".issuer"
10129 if it exists otherwise it will fail with an error.
10130
Janusz Dziemidowicz2c701b52015-03-07 23:03:59 +010010131 For each PEM file, haproxy also checks for the presence of file at the same
10132 path suffixed by ".sctl". If such file is found, support for Certificate
10133 Transparency (RFC6962) TLS extension is enabled. The file must contain a
10134 valid Signed Certificate Timestamp List, as described in RFC. File is parsed
10135 to check basic syntax, but no signatures are verified.
10136
yanbzhu6c25e9e2016-01-05 12:52:02 -050010137 There are cases where it is desirable to support multiple key types, e.g. RSA
10138 and ECDSA in the cipher suites offered to the clients. This allows clients
10139 that support EC certificates to be able to use EC ciphers, while
10140 simultaneously supporting older, RSA only clients.
yanbzhud19630c2015-12-14 15:10:25 -050010141
10142 In order to provide this functionality, multiple PEM files, each with a
10143 different key type, are required. To associate these PEM files into a
10144 "cert bundle" that is recognized by haproxy, they must be named in the
10145 following way: All PEM files that are to be bundled must have the same base
10146 name, with a suffix indicating the key type. Currently, three suffixes are
10147 supported: rsa, dsa and ecdsa. For example, if www.example.com has two PEM
10148 files, an RSA file and an ECDSA file, they must be named: "example.pem.rsa"
10149 and "example.pem.ecdsa". The first part of the filename is arbitrary; only the
10150 suffix matters. To load this bundle into haproxy, specify the base name only:
10151
10152 Example : bind :8443 ssl crt example.pem
10153
yanbzhu6c25e9e2016-01-05 12:52:02 -050010154 Note that the suffix is not given to haproxy; this tells haproxy to look for
yanbzhud19630c2015-12-14 15:10:25 -050010155 a cert bundle.
10156
10157 Haproxy will load all PEM files in the bundle at the same time to try to
10158 support multiple key types. PEM files are combined based on Common Name
10159 (CN) and Subject Alternative Name (SAN) to support SNI lookups. This means
10160 that even if you give haproxy a cert bundle, if there are no shared CN/SAN
10161 entries in the certificates in that bundle, haproxy will not be able to
10162 provide multi-cert support.
10163
10164 Assuming bundle in the example above contained the following:
10165
10166 Filename | CN | SAN
10167 -------------------+-----------------+-------------------
10168 example.pem.rsa | www.example.com | rsa.example.com
yanbzhu6c25e9e2016-01-05 12:52:02 -050010169 -------------------+-----------------+-------------------
yanbzhud19630c2015-12-14 15:10:25 -050010170 example.pem.ecdsa | www.example.com | ecdsa.example.com
10171 -------------------+-----------------+-------------------
10172
10173 Users connecting with an SNI of "www.example.com" will be able
10174 to use both RSA and ECDSA cipher suites. Users connecting with an SNI of
10175 "rsa.example.com" will only be able to use RSA cipher suites, and users
10176 connecting with "ecdsa.example.com" will only be able to use ECDSA cipher
10177 suites.
10178
10179 If a directory name is given as the <cert> argument, haproxy will
10180 automatically search and load bundled files in that directory.
10181
10182 OSCP files (.ocsp) and issuer files (.issuer) are supported with multi-cert
10183 bundling. Each certificate can have its own .ocsp and .issuer file. At this
10184 time, sctl is not supported in multi-certificate bundling.
10185
Emeric Brunb6dc9342012-09-28 17:55:37 +020010186crt-ignore-err <errors>
Alex Davies0fbf0162013-03-02 16:04:50 +000010187 This setting is only available when support for OpenSSL was built in. Sets a
10188 comma separated list of errorIDs to ignore during verify at depth == 0. If
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010189 set to 'all', all errors are ignored. SSL handshake is not aborted if an error
Alex Davies0fbf0162013-03-02 16:04:50 +000010190 is ignored.
Emeric Brunb6dc9342012-09-28 17:55:37 +020010191
Emmanuel Hocdetfe616562013-01-22 15:31:15 +010010192crt-list <file>
10193 This setting is only available when support for OpenSSL was built in. It
Emmanuel Hocdet7c41a1b2013-05-07 20:20:06 +020010194 designates a list of PEM file with an optional list of SNI filter per
10195 certificate, with the following format for each line :
Emmanuel Hocdetfe616562013-01-22 15:31:15 +010010196
Emmanuel Hocdet7c41a1b2013-05-07 20:20:06 +020010197 <crtfile> [[!]<snifilter> ...]
Emmanuel Hocdetfe616562013-01-22 15:31:15 +010010198
Emmanuel Hocdet7c41a1b2013-05-07 20:20:06 +020010199 Wildcards are supported in the SNI filter. Negative filter are also supported,
10200 only useful in combination with a wildcard filter to exclude a particular SNI.
10201 The certificates will be presented to clients who provide a valid TLS Server
10202 Name Indication field matching one of the SNI filters. If no SNI filter is
10203 specified, the CN and alt subjects are used. This directive may be specified
10204 multiple times. See the "crt" option for more information. The default
10205 certificate is still needed to meet OpenSSL expectations. If it is not used,
10206 the 'strict-sni' option may be used.
Emmanuel Hocdetfe616562013-01-22 15:31:15 +010010207
yanbzhu6c25e9e2016-01-05 12:52:02 -050010208 Multi-cert bundling (see "crt") is supported with crt-list, as long as only
Emmanuel Hocdetd294aea2016-05-13 11:14:06 +020010209 the base name is given in the crt-list. SNI filter will do the same work on
10210 all bundled certificates.
yanbzhud19630c2015-12-14 15:10:25 -050010211
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010212defer-accept
10213 Is an optional keyword which is supported only on certain Linux kernels. It
10214 states that a connection will only be accepted once some data arrive on it,
10215 or at worst after the first retransmit. This should be used only on protocols
10216 for which the client talks first (eg: HTTP). It can slightly improve
10217 performance by ensuring that most of the request is already available when
10218 the connection is accepted. On the other hand, it will not be able to detect
10219 connections which don't talk. It is important to note that this option is
10220 broken in all kernels up to 2.6.31, as the connection is never accepted until
10221 the client talks. This can cause issues with front firewalls which would see
10222 an established connection while the proxy will only see it in SYN_RECV. This
10223 option is only supported on TCPv4/TCPv6 sockets and ignored by other ones.
10224
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010225force-sslv3
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010226 This option enforces use of SSLv3 only on SSL connections instantiated from
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010227 this listener. SSLv3 is generally less expensive than the TLS counterparts
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010228 for high connection rates. This option is also available on global statement
10229 "ssl-default-bind-options". See also "no-tlsv*" and "no-sslv3".
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010230
10231force-tlsv10
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010232 This option enforces use of TLSv1.0 only on SSL connections instantiated from
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010233 this listener. This option is also available on global statement
10234 "ssl-default-bind-options". See also "no-tlsv*" and "no-sslv3".
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010235
10236force-tlsv11
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010237 This option enforces use of TLSv1.1 only on SSL connections instantiated from
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010238 this listener. This option is also available on global statement
10239 "ssl-default-bind-options". See also "no-tlsv*", and "no-sslv3".
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010240
10241force-tlsv12
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010242 This option enforces use of TLSv1.2 only on SSL connections instantiated from
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010243 this listener. This option is also available on global statement
10244 "ssl-default-bind-options". See also "no-tlsv*", and "no-sslv3".
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010245
Christopher Faulet31af49d2015-06-09 17:29:50 +020010246generate-certificates
10247 This setting is only available when support for OpenSSL was built in. It
10248 enables the dynamic SSL certificates generation. A CA certificate and its
10249 private key are necessary (see 'ca-sign-file'). When HAProxy is configured as
10250 a transparent forward proxy, SSL requests generate errors because of a common
10251 name mismatch on the certificate presented to the client. With this option
10252 enabled, HAProxy will try to forge a certificate using the SNI hostname
10253 indicated by the client. This is done only if no certificate matches the SNI
10254 hostname (see 'crt-list'). If an error occurs, the default certificate is
10255 used, else the 'strict-sni' option is set.
10256 It can also be used when HAProxy is configured as a reverse proxy to ease the
10257 deployment of an architecture with many backends.
10258
10259 Creating a SSL certificate is an expensive operation, so a LRU cache is used
10260 to store forged certificates (see 'tune.ssl.ssl-ctx-cache-size'). It
10261 increases the HAProxy's memroy footprint to reduce latency when the same
10262 certificate is used many times.
10263
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010264gid <gid>
10265 Sets the group of the UNIX sockets to the designated system gid. It can also
10266 be set by default in the global section's "unix-bind" statement. Note that
10267 some platforms simply ignore this. This setting is equivalent to the "group"
10268 setting except that the group ID is used instead of its name. This setting is
10269 ignored by non UNIX sockets.
10270
10271group <group>
10272 Sets the group of the UNIX sockets to the designated system group. It can
10273 also be set by default in the global section's "unix-bind" statement. Note
10274 that some platforms simply ignore this. This setting is equivalent to the
10275 "gid" setting except that the group name is used instead of its gid. This
10276 setting is ignored by non UNIX sockets.
10277
10278id <id>
10279 Fixes the socket ID. By default, socket IDs are automatically assigned, but
10280 sometimes it is more convenient to fix them to ease monitoring. This value
10281 must be strictly positive and unique within the listener/frontend. This
10282 option can only be used when defining only a single socket.
10283
10284interface <interface>
Lukas Tribusfce2e962013-02-12 22:13:19 +010010285 Restricts the socket to a specific interface. When specified, only packets
10286 received from that particular interface are processed by the socket. This is
10287 currently only supported on Linux. The interface must be a primary system
10288 interface, not an aliased interface. It is also possible to bind multiple
10289 frontends to the same address if they are bound to different interfaces. Note
10290 that binding to a network interface requires root privileges. This parameter
10291 is only compatible with TCPv4/TCPv6 sockets.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010292
Willy Tarreauabb175f2012-09-24 12:43:26 +020010293level <level>
10294 This setting is used with the stats sockets only to restrict the nature of
10295 the commands that can be issued on the socket. It is ignored by other
10296 sockets. <level> can be one of :
10297 - "user" is the least privileged level ; only non-sensitive stats can be
10298 read, and no change is allowed. It would make sense on systems where it
10299 is not easy to restrict access to the socket.
10300 - "operator" is the default level and fits most common uses. All data can
10301 be read, and only non-sensitive changes are permitted (eg: clear max
10302 counters).
10303 - "admin" should be used with care, as everything is permitted (eg: clear
10304 all counters).
10305
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010306maxconn <maxconn>
10307 Limits the sockets to this number of concurrent connections. Extraneous
10308 connections will remain in the system's backlog until a connection is
10309 released. If unspecified, the limit will be the same as the frontend's
10310 maxconn. Note that in case of port ranges or multiple addresses, the same
10311 value will be applied to each socket. This setting enables different
10312 limitations on expensive sockets, for instance SSL entries which may easily
10313 eat all memory.
10314
10315mode <mode>
10316 Sets the octal mode used to define access permissions on the UNIX socket. It
10317 can also be set by default in the global section's "unix-bind" statement.
10318 Note that some platforms simply ignore this. This setting is ignored by non
10319 UNIX sockets.
10320
10321mss <maxseg>
10322 Sets the TCP Maximum Segment Size (MSS) value to be advertised on incoming
10323 connections. This can be used to force a lower MSS for certain specific
10324 ports, for instance for connections passing through a VPN. Note that this
10325 relies on a kernel feature which is theoretically supported under Linux but
10326 was buggy in all versions prior to 2.6.28. It may or may not work on other
10327 operating systems. It may also not change the advertised value but change the
10328 effective size of outgoing segments. The commonly advertised value for TCPv4
10329 over Ethernet networks is 1460 = 1500(MTU) - 40(IP+TCP). If this value is
10330 positive, it will be used as the advertised MSS. If it is negative, it will
10331 indicate by how much to reduce the incoming connection's advertised MSS for
10332 outgoing segments. This parameter is only compatible with TCP v4/v6 sockets.
10333
10334name <name>
10335 Sets an optional name for these sockets, which will be reported on the stats
10336 page.
10337
Willy Tarreaud72f0f32015-10-13 14:50:22 +020010338namespace <name>
10339 On Linux, it is possible to specify which network namespace a socket will
10340 belong to. This directive makes it possible to explicitly bind a listener to
10341 a namespace different from the default one. Please refer to your operating
10342 system's documentation to find more details about network namespaces.
10343
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010344nice <nice>
10345 Sets the 'niceness' of connections initiated from the socket. Value must be
10346 in the range -1024..1024 inclusive, and defaults to zero. Positive values
10347 means that such connections are more friendly to others and easily offer
10348 their place in the scheduler. On the opposite, negative values mean that
10349 connections want to run with a higher priority than others. The difference
10350 only happens under high loads when the system is close to saturation.
10351 Negative values are appropriate for low-latency or administration services,
10352 and high values are generally recommended for CPU intensive tasks such as SSL
10353 processing or bulk transfers which are less sensible to latency. For example,
10354 it may make sense to use a positive value for an SMTP socket and a negative
10355 one for an RDP socket.
10356
Emeric Brun9b3009b2012-10-05 11:55:06 +020010357no-sslv3
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010358 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010359 disables support for SSLv3 on any sockets instantiated from the listener when
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010360 SSL is supported. Note that SSLv2 is forced disabled in the code and cannot
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010361 be enabled using any configuration option. This option is also available on
10362 global statement "ssl-default-bind-options". See also "force-tls*",
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010363 and "force-sslv3".
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010364
Emeric Brun90ad8722012-10-02 14:00:59 +020010365no-tls-tickets
10366 This setting is only available when support for OpenSSL was built in. It
10367 disables the stateless session resumption (RFC 5077 TLS Ticket
10368 extension) and force to use stateful session resumption. Stateless
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010369 session resumption is more expensive in CPU usage. This option is also
10370 available on global statement "ssl-default-bind-options".
Emeric Brun90ad8722012-10-02 14:00:59 +020010371
Emeric Brun9b3009b2012-10-05 11:55:06 +020010372no-tlsv10
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010373 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010374 disables support for TLSv1.0 on any sockets instantiated from the listener
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010375 when SSL is supported. Note that SSLv2 is forced disabled in the code and
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010376 cannot be enabled using any configuration option. This option is also
10377 available on global statement "ssl-default-bind-options". See also
10378 "force-tlsv*", and "force-sslv3".
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010379
Emeric Brun9b3009b2012-10-05 11:55:06 +020010380no-tlsv11
Emeric Brunf5da4932012-09-28 19:42:54 +020010381 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010382 disables support for TLSv1.1 on any sockets instantiated from the listener
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010383 when SSL is supported. Note that SSLv2 is forced disabled in the code and
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010384 cannot be enabled using any configuration option. This option is also
10385 available on global statement "ssl-default-bind-options". See also
10386 "force-tlsv*", and "force-sslv3".
Emeric Brunf5da4932012-09-28 19:42:54 +020010387
Emeric Brun9b3009b2012-10-05 11:55:06 +020010388no-tlsv12
Emeric Brunf5da4932012-09-28 19:42:54 +020010389 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010390 disables support for TLSv1.2 on any sockets instantiated from the listener
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010391 when SSL is supported. Note that SSLv2 is forced disabled in the code and
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010392 cannot be enabled using any configuration option. This option is also
10393 available on global statement "ssl-default-bind-options". See also
10394 "force-tlsv*", and "force-sslv3".
Emeric Brunf5da4932012-09-28 19:42:54 +020010395
Willy Tarreau6c9a3d52012-10-18 18:57:14 +020010396npn <protocols>
10397 This enables the NPN TLS extension and advertises the specified protocol list
10398 as supported on top of NPN. The protocol list consists in a comma-delimited
10399 list of protocol names, for instance: "http/1.1,http/1.0" (without quotes).
10400 This requires that the SSL library is build with support for TLS extensions
Willy Tarreauab861d32013-04-02 02:30:41 +020010401 enabled (check with haproxy -vv). Note that the NPN extension has been
10402 replaced with the ALPN extension (see the "alpn" keyword).
Willy Tarreau6c9a3d52012-10-18 18:57:14 +020010403
Willy Tarreau6ae1ba62014-05-07 19:01:58 +020010404process [ all | odd | even | <number 1-64>[-<number 1-64>] ]
10405 This restricts the list of processes on which this listener is allowed to
10406 run. It does not enforce any process but eliminates those which do not match.
10407 If the frontend uses a "bind-process" setting, the intersection between the
10408 two is applied. If in the end the listener is not allowed to run on any
10409 remaining process, a warning is emitted, and the listener will either run on
10410 the first process of the listener if a single process was specified, or on
10411 all of its processes if multiple processes were specified. For the unlikely
Willy Tarreauae302532014-05-07 19:22:24 +020010412 case where several ranges are needed, this directive may be repeated. The
10413 main purpose of this directive is to be used with the stats sockets and have
10414 one different socket per process. The second purpose is to have multiple bind
10415 lines sharing the same IP:port but not the same process in a listener, so
10416 that the system can distribute the incoming connections into multiple queues
10417 and allow a smoother inter-process load balancing. Currently Linux 3.9 and
10418 above is known for supporting this. See also "bind-process" and "nbproc".
Willy Tarreau6ae1ba62014-05-07 19:01:58 +020010419
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010420ssl
10421 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010422 enables SSL deciphering on connections instantiated from this listener. A
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010423 certificate is necessary (see "crt" above). All contents in the buffers will
10424 appear in clear text, so that ACLs and HTTP processing will only have access
10425 to deciphered contents.
10426
Emmanuel Hocdet65623372013-01-24 17:17:15 +010010427strict-sni
10428 This setting is only available when support for OpenSSL was built in. The
10429 SSL/TLS negotiation is allow only if the client provided an SNI which match
10430 a certificate. The default certificate is not used.
10431 See the "crt" option for more information.
10432
Willy Tarreau2af207a2015-02-04 00:45:58 +010010433tcp-ut <delay>
10434 Sets the TCP User Timeout for all incoming connections instanciated from this
10435 listening socket. This option is available on Linux since version 2.6.37. It
10436 allows haproxy to configure a timeout for sockets which contain data not
10437 receiving an acknoledgement for the configured delay. This is especially
10438 useful on long-lived connections experiencing long idle periods such as
10439 remote terminals or database connection pools, where the client and server
10440 timeouts must remain high to allow a long period of idle, but where it is
10441 important to detect that the client has disappeared in order to release all
10442 resources associated with its connection (and the server's session). The
10443 argument is a delay expressed in milliseconds by default. This only works
10444 for regular TCP connections, and is ignored for other protocols.
10445
Willy Tarreau1c862c52012-10-05 16:21:00 +020010446tfo
Lukas Tribus0defb902013-02-13 23:35:39 +010010447 Is an optional keyword which is supported only on Linux kernels >= 3.7. It
Willy Tarreau1c862c52012-10-05 16:21:00 +020010448 enables TCP Fast Open on the listening socket, which means that clients which
10449 support this feature will be able to send a request and receive a response
10450 during the 3-way handshake starting from second connection, thus saving one
10451 round-trip after the first connection. This only makes sense with protocols
10452 that use high connection rates and where each round trip matters. This can
10453 possibly cause issues with many firewalls which do not accept data on SYN
10454 packets, so this option should only be enabled once well tested. This option
Lukas Tribus0999f762013-04-02 16:43:24 +020010455 is only supported on TCPv4/TCPv6 sockets and ignored by other ones. You may
10456 need to build HAProxy with USE_TFO=1 if your libc doesn't define
10457 TCP_FASTOPEN.
Willy Tarreau1c862c52012-10-05 16:21:00 +020010458
Nenad Merdanovic188ad3e2015-02-27 19:56:50 +010010459tls-ticket-keys <keyfile>
10460 Sets the TLS ticket keys file to load the keys from. The keys need to be 48
10461 bytes long, encoded with base64 (ex. openssl rand -base64 48). Number of keys
10462 is specified by the TLS_TICKETS_NO build option (default 3) and at least as
10463 many keys need to be present in the file. Last TLS_TICKETS_NO keys will be
10464 used for decryption and the penultimate one for encryption. This enables easy
10465 key rotation by just appending new key to the file and reloading the process.
10466 Keys must be periodically rotated (ex. every 12h) or Perfect Forward Secrecy
10467 is compromised. It is also a good idea to keep the keys off any permanent
10468 storage such as hard drives (hint: use tmpfs and don't swap those files).
10469 Lifetime hint can be changed using tune.ssl.timeout.
10470
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010471transparent
10472 Is an optional keyword which is supported only on certain Linux kernels. It
10473 indicates that the addresses will be bound even if they do not belong to the
10474 local machine, and that packets targeting any of these addresses will be
10475 intercepted just as if the addresses were locally configured. This normally
10476 requires that IP forwarding is enabled. Caution! do not use this with the
10477 default address '*', as it would redirect any traffic for the specified port.
10478 This keyword is available only when HAProxy is built with USE_LINUX_TPROXY=1.
10479 This parameter is only compatible with TCPv4 and TCPv6 sockets, depending on
10480 kernel version. Some distribution kernels include backports of the feature,
10481 so check for support with your vendor.
10482
Willy Tarreau77e3af92012-11-24 15:07:23 +010010483v4v6
10484 Is an optional keyword which is supported only on most recent systems
10485 including Linux kernels >= 2.4.21. It is used to bind a socket to both IPv4
10486 and IPv6 when it uses the default address. Doing so is sometimes necessary
10487 on systems which bind to IPv6 only by default. It has no effect on non-IPv6
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010488 sockets, and is overridden by the "v6only" option.
Willy Tarreau77e3af92012-11-24 15:07:23 +010010489
Willy Tarreau9b6700f2012-11-24 11:55:28 +010010490v6only
10491 Is an optional keyword which is supported only on most recent systems
10492 including Linux kernels >= 2.4.21. It is used to bind a socket to IPv6 only
10493 when it uses the default address. Doing so is sometimes preferred to doing it
Willy Tarreau77e3af92012-11-24 15:07:23 +010010494 system-wide as it is per-listener. It has no effect on non-IPv6 sockets and
10495 has precedence over the "v4v6" option.
Willy Tarreau9b6700f2012-11-24 11:55:28 +010010496
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010497uid <uid>
10498 Sets the owner of the UNIX sockets to the designated system uid. It can also
10499 be set by default in the global section's "unix-bind" statement. Note that
10500 some platforms simply ignore this. This setting is equivalent to the "user"
10501 setting except that the user numeric ID is used instead of its name. This
10502 setting is ignored by non UNIX sockets.
10503
10504user <user>
10505 Sets the owner of the UNIX sockets to the designated system user. It can also
10506 be set by default in the global section's "unix-bind" statement. Note that
10507 some platforms simply ignore this. This setting is equivalent to the "uid"
10508 setting except that the user name is used instead of its uid. This setting is
10509 ignored by non UNIX sockets.
10510
Emeric Brun1a073b42012-09-28 17:07:34 +020010511verify [none|optional|required]
10512 This setting is only available when support for OpenSSL was built in. If set
10513 to 'none', client certificate is not requested. This is the default. In other
10514 cases, a client certificate is requested. If the client does not provide a
10515 certificate after the request and if 'verify' is set to 'required', then the
10516 handshake is aborted, while it would have succeeded if set to 'optional'. The
Emeric Brunfd33a262012-10-11 16:28:27 +020010517 certificate provided by the client is always verified using CAs from
10518 'ca-file' and optional CRLs from 'crl-file'. On verify failure the handshake
10519 is aborted, regardless of the 'verify' option, unless the error code exactly
10520 matches one of those listed with 'ca-ignore-err' or 'crt-ignore-err'.
Willy Tarreau4a5cade2012-04-05 21:09:48 +020010521
Willy Tarreaub6205fd2012-09-24 12:27:33 +0200105225.2. Server and default-server options
Cyril Bontéf0c60612010-02-06 14:44:47 +010010523------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +020010524
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +010010525The "server" and "default-server" keywords support a certain number of settings
10526which are all passed as arguments on the server line. The order in which those
10527arguments appear does not count, and they are all optional. Some of those
10528settings are single words (booleans) while others expect one or several values
10529after them. In this case, the values must immediately follow the setting name.
10530Except default-server, all those settings must be specified after the server's
10531address if they are used:
Willy Tarreau6a06a402007-07-15 20:15:28 +020010532
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010533 server <name> <address>[:port] [settings ...]
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +010010534 default-server [settings ...]
Willy Tarreau6a06a402007-07-15 20:15:28 +020010535
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010536The currently supported settings are the following ones.
Willy Tarreau0ba27502007-12-24 16:55:16 +010010537
Willy Tarreauceb4ac92012-04-28 00:41:46 +020010538addr <ipv4|ipv6>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010539 Using the "addr" parameter, it becomes possible to use a different IP address
Baptiste Assmann13f83532016-03-06 23:14:36 +010010540 to send health-checks or to probe the agent-check. On some servers, it may be
10541 desirable to dedicate an IP address to specific component able to perform
10542 complex tests which are more suitable to health-checks than the application.
10543 This parameter is ignored if the "check" parameter is not set. See also the
10544 "port" parameter.
Willy Tarreau6a06a402007-07-15 20:15:28 +020010545
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010546 Supported in default-server: No
10547
Simon Hormand60d6912013-11-25 10:46:36 +090010548agent-check
10549 Enable an auxiliary agent check which is run independently of a regular
Willy Tarreau81f5d942013-12-09 20:51:51 +010010550 health check. An agent health check is performed by making a TCP connection
10551 to the port set by the "agent-port" parameter and reading an ASCII string.
10552 The string is made of a series of words delimited by spaces, tabs or commas
10553 in any order, optionally terminated by '\r' and/or '\n', each consisting of :
Simon Hormand60d6912013-11-25 10:46:36 +090010554
Willy Tarreau81f5d942013-12-09 20:51:51 +010010555 - An ASCII representation of a positive integer percentage, e.g. "75%".
Simon Hormand60d6912013-11-25 10:46:36 +090010556 Values in this format will set the weight proportional to the initial
Willy Tarreauc5af3a62014-10-07 15:27:33 +020010557 weight of a server as configured when haproxy starts. Note that a zero
10558 weight is reported on the stats page as "DRAIN" since it has the same
10559 effect on the server (it's removed from the LB farm).
Simon Hormand60d6912013-11-25 10:46:36 +090010560
Nenad Merdanovic174dd372016-04-24 23:10:06 +020010561 - The string "maxconn:" followed by an integer (no space between). Values in
10562 this format will set the maxconn of a server. The maximum number of
10563 connections advertised needs to be multipled by the number of load balancers
10564 and different backends that use this health check to get the total number
10565 of connections the server might receive. Example: maxconn:30
10566
Willy Tarreau81f5d942013-12-09 20:51:51 +010010567 - The word "ready". This will turn the server's administrative state to the
10568 READY mode, thus cancelling any DRAIN or MAINT state
Simon Hormand60d6912013-11-25 10:46:36 +090010569
Willy Tarreau81f5d942013-12-09 20:51:51 +010010570 - The word "drain". This will turn the server's administrative state to the
10571 DRAIN mode, thus it will not accept any new connections other than those
10572 that are accepted via persistence.
Simon Hormand60d6912013-11-25 10:46:36 +090010573
Willy Tarreau81f5d942013-12-09 20:51:51 +010010574 - The word "maint". This will turn the server's administrative state to the
10575 MAINT mode, thus it will not accept any new connections at all, and health
10576 checks will be stopped.
Simon Hormand60d6912013-11-25 10:46:36 +090010577
Willy Tarreau81f5d942013-12-09 20:51:51 +010010578 - The words "down", "failed", or "stopped", optionally followed by a
10579 description string after a sharp ('#'). All of these mark the server's
10580 operating state as DOWN, but since the word itself is reported on the stats
10581 page, the difference allows an administrator to know if the situation was
10582 expected or not : the service may intentionally be stopped, may appear up
10583 but fail some validity tests, or may be seen as down (eg: missing process,
10584 or port not responding).
Simon Hormand60d6912013-11-25 10:46:36 +090010585
Willy Tarreau81f5d942013-12-09 20:51:51 +010010586 - The word "up" sets back the server's operating state as UP if health checks
10587 also report that the service is accessible.
Simon Hormand60d6912013-11-25 10:46:36 +090010588
Willy Tarreau81f5d942013-12-09 20:51:51 +010010589 Parameters which are not advertised by the agent are not changed. For
10590 example, an agent might be designed to monitor CPU usage and only report a
10591 relative weight and never interact with the operating status. Similarly, an
10592 agent could be designed as an end-user interface with 3 radio buttons
10593 allowing an administrator to change only the administrative state. However,
10594 it is important to consider that only the agent may revert its own actions,
10595 so if a server is set to DRAIN mode or to DOWN state using the agent, the
10596 agent must implement the other equivalent actions to bring the service into
10597 operations again.
Simon Hormand60d6912013-11-25 10:46:36 +090010598
Simon Horman2f1f9552013-11-25 10:46:37 +090010599 Failure to connect to the agent is not considered an error as connectivity
10600 is tested by the regular health check which is enabled by the "check"
Willy Tarreau81f5d942013-12-09 20:51:51 +010010601 parameter. Warning though, it is not a good idea to stop an agent after it
10602 reports "down", since only an agent reporting "up" will be able to turn the
10603 server up again. Note that the CLI on the Unix stats socket is also able to
Willy Tarreau989222a2016-01-15 10:26:26 +010010604 force an agent's result in order to work around a bogus agent if needed.
Simon Horman2f1f9552013-11-25 10:46:37 +090010605
Willy Tarreau81f5d942013-12-09 20:51:51 +010010606 Requires the "agent-port" parameter to be set. See also the "agent-inter"
10607 parameter.
Simon Hormand60d6912013-11-25 10:46:36 +090010608
10609 Supported in default-server: No
10610
James Brown55f9ff12015-10-21 18:19:05 -070010611agent-send <string>
10612 If this option is specified, haproxy will send the given string (verbatim)
10613 to the agent server upon connection. You could, for example, encode
10614 the backend name into this string, which would enable your agent to send
10615 different responses based on the backend. Make sure to include a '\n' if
10616 you want to terminate your request with a newline.
10617
Simon Hormand60d6912013-11-25 10:46:36 +090010618agent-inter <delay>
10619 The "agent-inter" parameter sets the interval between two agent checks
10620 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
10621
10622 Just as with every other time-based parameter, it may be entered in any
10623 other explicit unit among { us, ms, s, m, h, d }. The "agent-inter"
10624 parameter also serves as a timeout for agent checks "timeout check" is
10625 not set. In order to reduce "resonance" effects when multiple servers are
10626 hosted on the same hardware, the agent and health checks of all servers
10627 are started with a small time offset between them. It is also possible to
10628 add some random noise in the agent and health checks interval using the
10629 global "spread-checks" keyword. This makes sense for instance when a lot
10630 of backends use the same servers.
10631
10632 See also the "agent-check" and "agent-port" parameters.
10633
10634 Supported in default-server: Yes
10635
10636agent-port <port>
10637 The "agent-port" parameter sets the TCP port used for agent checks.
10638
10639 See also the "agent-check" and "agent-inter" parameters.
10640
10641 Supported in default-server: Yes
10642
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010643backup
10644 When "backup" is present on a server line, the server is only used in load
10645 balancing when all other non-backup servers are unavailable. Requests coming
10646 with a persistence cookie referencing the server will always be served
10647 though. By default, only the first operational backup server is used, unless
10648 the "allbackups" option is set in the backend. See also the "allbackups"
10649 option.
Willy Tarreau6a06a402007-07-15 20:15:28 +020010650
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010651 Supported in default-server: No
10652
Emeric Brunef42d922012-10-11 16:11:36 +020010653ca-file <cafile>
10654 This setting is only available when support for OpenSSL was built in. It
10655 designates a PEM file from which to load CA certificates used to verify
10656 server's certificate.
10657
10658 Supported in default-server: No
10659
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010660check
10661 This option enables health checks on the server. By default, a server is
Patrick Mézardb7aeec62012-01-22 16:01:22 +010010662 always considered available. If "check" is set, the server is available when
10663 accepting periodic TCP connections, to ensure that it is really able to serve
10664 requests. The default address and port to send the tests to are those of the
10665 server, and the default source is the same as the one defined in the
10666 backend. It is possible to change the address using the "addr" parameter, the
10667 port using the "port" parameter, the source address using the "source"
10668 address, and the interval and timers using the "inter", "rise" and "fall"
Simon Hormanafc47ee2013-11-25 10:46:35 +090010669 parameters. The request method is define in the backend using the "httpchk",
10670 "smtpchk", "mysql-check", "pgsql-check" and "ssl-hello-chk" options. Please
10671 refer to those options and parameters for more information.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010672
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010673 Supported in default-server: No
10674
Willy Tarreau6c16adc2012-10-05 00:04:16 +020010675check-send-proxy
10676 This option forces emission of a PROXY protocol line with outgoing health
10677 checks, regardless of whether the server uses send-proxy or not for the
10678 normal traffic. By default, the PROXY protocol is enabled for health checks
10679 if it is already enabled for normal traffic and if no "port" nor "addr"
10680 directive is present. However, if such a directive is present, the
10681 "check-send-proxy" option needs to be used to force the use of the
10682 protocol. See also the "send-proxy" option for more information.
10683
10684 Supported in default-server: No
10685
Willy Tarreau763a95b2012-10-04 23:15:39 +020010686check-ssl
10687 This option forces encryption of all health checks over SSL, regardless of
10688 whether the server uses SSL or not for the normal traffic. This is generally
10689 used when an explicit "port" or "addr" directive is specified and SSL health
10690 checks are not inherited. It is important to understand that this option
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010691 inserts an SSL transport layer below the checks, so that a simple TCP connect
Willy Tarreau763a95b2012-10-04 23:15:39 +020010692 check becomes an SSL connect, which replaces the old ssl-hello-chk. The most
10693 common use is to send HTTPS checks by combining "httpchk" with SSL checks.
10694 All SSL settings are common to health checks and traffic (eg: ciphers).
10695 See the "ssl" option for more information.
10696
10697 Supported in default-server: No
10698
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020010699ciphers <ciphers>
10700 This option sets the string describing the list of cipher algorithms that is
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010701 is negotiated during the SSL/TLS handshake with the server. The format of the
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020010702 string is defined in "man 1 ciphers". When SSL is used to communicate with
10703 servers on the local network, it is common to see a weaker set of algorithms
10704 than what is used over the internet. Doing so reduces CPU usage on both the
10705 server and haproxy while still keeping it compatible with deployed software.
10706 Some algorithms such as RC4-SHA1 are reasonably cheap. If no security at all
10707 is needed and just connectivity, using DES can be appropriate.
10708
Willy Tarreau763a95b2012-10-04 23:15:39 +020010709 Supported in default-server: No
10710
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010711cookie <value>
10712 The "cookie" parameter sets the cookie value assigned to the server to
10713 <value>. This value will be checked in incoming requests, and the first
10714 operational server possessing the same value will be selected. In return, in
10715 cookie insertion or rewrite modes, this value will be assigned to the cookie
10716 sent to the client. There is nothing wrong in having several servers sharing
10717 the same cookie value, and it is in fact somewhat common between normal and
10718 backup servers. See also the "cookie" keyword in backend section.
10719
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010720 Supported in default-server: No
10721
Emeric Brunef42d922012-10-11 16:11:36 +020010722crl-file <crlfile>
10723 This setting is only available when support for OpenSSL was built in. It
10724 designates a PEM file from which to load certificate revocation list used
10725 to verify server's certificate.
10726
10727 Supported in default-server: No
10728
Emeric Bruna7aa3092012-10-26 12:58:00 +020010729crt <cert>
10730 This setting is only available when support for OpenSSL was built in.
10731 It designates a PEM file from which to load both a certificate and the
10732 associated private key. This file can be built by concatenating both PEM
10733 files into one. This certificate will be sent if the server send a client
10734 certificate request.
10735
10736 Supported in default-server: No
10737
Willy Tarreau96839092010-03-29 10:02:24 +020010738disabled
10739 The "disabled" keyword starts the server in the "disabled" state. That means
10740 that it is marked down in maintenance mode, and no connection other than the
10741 ones allowed by persist mode will reach it. It is very well suited to setup
10742 new servers, because normal traffic will never reach them, while it is still
10743 possible to test the service by making use of the force-persist mechanism.
10744
10745 Supported in default-server: No
10746
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010747error-limit <count>
Willy Tarreau983e01e2010-01-11 18:42:06 +010010748 If health observing is enabled, the "error-limit" parameter specifies the
10749 number of consecutive errors that triggers event selected by the "on-error"
10750 option. By default it is set to 10 consecutive errors.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010010751
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010752 Supported in default-server: Yes
10753
10754 See also the "check", "error-limit" and "on-error".
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010010755
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010756fall <count>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010757 The "fall" parameter states that a server will be considered as dead after
10758 <count> consecutive unsuccessful health checks. This value defaults to 3 if
10759 unspecified. See also the "check", "inter" and "rise" parameters.
10760
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010761 Supported in default-server: Yes
10762
Emeric Brun8694b9a2012-10-05 14:39:07 +020010763force-sslv3
10764 This option enforces use of SSLv3 only when SSL is used to communicate with
10765 the server. SSLv3 is generally less expensive than the TLS counterparts for
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010766 high connection rates. This option is also available on global statement
10767 "ssl-default-server-options". See also "no-tlsv*", "no-sslv3".
Emeric Brun8694b9a2012-10-05 14:39:07 +020010768
10769 Supported in default-server: No
10770
10771force-tlsv10
10772 This option enforces use of TLSv1.0 only when SSL is used to communicate with
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010773 the server. This option is also available on global statement
10774 "ssl-default-server-options". See also "no-tlsv*", "no-sslv3".
Emeric Brun8694b9a2012-10-05 14:39:07 +020010775
10776 Supported in default-server: No
10777
10778force-tlsv11
10779 This option enforces use of TLSv1.1 only when SSL is used to communicate with
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010780 the server. This option is also available on global statement
10781 "ssl-default-server-options". See also "no-tlsv*", "no-sslv3".
Emeric Brun8694b9a2012-10-05 14:39:07 +020010782
10783 Supported in default-server: No
10784
10785force-tlsv12
10786 This option enforces use of TLSv1.2 only when SSL is used to communicate with
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010787 the server. This option is also available on global statement
10788 "ssl-default-server-options". See also "no-tlsv*", "no-sslv3".
Emeric Brun8694b9a2012-10-05 14:39:07 +020010789
10790 Supported in default-server: No
10791
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010792id <value>
Willy Tarreau53fb4ae2009-10-04 23:04:08 +020010793 Set a persistent ID for the server. This ID must be positive and unique for
10794 the proxy. An unused ID will automatically be assigned if unset. The first
10795 assigned value will be 1. This ID is currently only returned in statistics.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010796
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010797 Supported in default-server: No
10798
Willy Tarreau6a031d12016-11-07 19:42:35 +010010799init-addr {last | libc | none | <ip>},[...]*
10800 Indicate in what order the server's address should be resolved upon startup
10801 if it uses an FQDN. Attempts are made to resolve the address by applying in
10802 turn each of the methods mentionned in the comma-delimited list. The first
10803 method which succeeds is used. If the end of the list is reached without
10804 finding a working method, an error is thrown. Method "last" suggests to pick
10805 the address which appears in the state file (see "server-state-file"). Method
10806 "libc" uses the libc's internal resolver (gethostbyname() or getaddrinfo()
10807 depending on the operating system and build options). Method "none"
10808 specifically indicates that the server should start without any valid IP
10809 address in a down state. It can be useful to ignore some DNS issues upon
10810 startup, waiting for the situation to get fixed later. Finally, an IP address
10811 (IPv4 or IPv6) may be provided. It can be the currently known address of the
10812 server (eg: filled by a configuration generator), or the address of a dummy
10813 server used to catch old sessions and present them with a decent error
10814 message for example. When the "first" load balancing algorithm is used, this
10815 IP address could point to a fake server used to trigger the creation of new
10816 instances on the fly. This option defaults to "last,libc" indicating that the
10817 previous address found in the state file (if any) is used first, otherwise
10818 the libc's resolver is used. This ensures continued compatibility with the
10819 historic behaviour.
10820
10821 Example:
10822 defaults
10823 # never fail on address resolution
10824 default-server init-addr last,libc,none
10825
10826 Supported in default-server: Yes
10827
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010828inter <delay>
10829fastinter <delay>
10830downinter <delay>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010831 The "inter" parameter sets the interval between two consecutive health checks
10832 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
10833 It is also possible to use "fastinter" and "downinter" to optimize delays
10834 between checks depending on the server state :
10835
Pieter Baauw44fc9df2015-09-17 21:30:46 +020010836 Server state | Interval used
10837 ----------------------------------------+----------------------------------
10838 UP 100% (non-transitional) | "inter"
10839 ----------------------------------------+----------------------------------
10840 Transitionally UP (going down "fall"), | "fastinter" if set,
10841 Transitionally DOWN (going up "rise"), | "inter" otherwise.
10842 or yet unchecked. |
10843 ----------------------------------------+----------------------------------
10844 DOWN 100% (non-transitional) | "downinter" if set,
10845 | "inter" otherwise.
10846 ----------------------------------------+----------------------------------
Willy Tarreaud72758d2010-01-12 10:42:19 +010010847
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010848 Just as with every other time-based parameter, they can be entered in any
10849 other explicit unit among { us, ms, s, m, h, d }. The "inter" parameter also
10850 serves as a timeout for health checks sent to servers if "timeout check" is
10851 not set. In order to reduce "resonance" effects when multiple servers are
Simon Hormand60d6912013-11-25 10:46:36 +090010852 hosted on the same hardware, the agent and health checks of all servers
10853 are started with a small time offset between them. It is also possible to
10854 add some random noise in the agent and health checks interval using the
10855 global "spread-checks" keyword. This makes sense for instance when a lot
10856 of backends use the same servers.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010857
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010858 Supported in default-server: Yes
10859
10860maxconn <maxconn>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010861 The "maxconn" parameter specifies the maximal number of concurrent
10862 connections that will be sent to this server. If the number of incoming
10863 concurrent requests goes higher than this value, they will be queued, waiting
10864 for a connection to be released. This parameter is very important as it can
10865 save fragile servers from going down under extreme loads. If a "minconn"
10866 parameter is specified, the limit becomes dynamic. The default value is "0"
10867 which means unlimited. See also the "minconn" and "maxqueue" parameters, and
10868 the backend's "fullconn" keyword.
10869
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010870 Supported in default-server: Yes
10871
10872maxqueue <maxqueue>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010873 The "maxqueue" parameter specifies the maximal number of connections which
10874 will wait in the queue for this server. If this limit is reached, next
10875 requests will be redispatched to other servers instead of indefinitely
10876 waiting to be served. This will break persistence but may allow people to
10877 quickly re-log in when the server they try to connect to is dying. The
10878 default value is "0" which means the queue is unlimited. See also the
10879 "maxconn" and "minconn" parameters.
10880
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010881 Supported in default-server: Yes
10882
10883minconn <minconn>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010884 When the "minconn" parameter is set, the maxconn limit becomes a dynamic
10885 limit following the backend's load. The server will always accept at least
10886 <minconn> connections, never more than <maxconn>, and the limit will be on
10887 the ramp between both values when the backend has less than <fullconn>
10888 concurrent connections. This makes it possible to limit the load on the
10889 server during normal loads, but push it further for important loads without
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010010890 overloading the server during exceptional loads. See also the "maxconn"
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010891 and "maxqueue" parameters, as well as the "fullconn" backend keyword.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010010892
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010893 Supported in default-server: Yes
10894
Willy Tarreaud72f0f32015-10-13 14:50:22 +020010895namespace <name>
10896 On Linux, it is possible to specify which network namespace a socket will
10897 belong to. This directive makes it possible to explicitly bind a server to
10898 a namespace different from the default one. Please refer to your operating
10899 system's documentation to find more details about network namespaces.
10900
Willy Tarreau2a3fb1c2015-02-05 16:47:07 +010010901no-ssl-reuse
10902 This option disables SSL session reuse when SSL is used to communicate with
10903 the server. It will force the server to perform a full handshake for every
10904 new connection. It's probably only useful for benchmarking, troubleshooting,
10905 and for paranoid users.
10906
10907 Supported in default-server: No
10908
Emeric Brun9b3009b2012-10-05 11:55:06 +020010909no-sslv3
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020010910 This option disables support for SSLv3 when SSL is used to communicate with
10911 the server. Note that SSLv2 is disabled in the code and cannot be enabled
Emeric Brun8694b9a2012-10-05 14:39:07 +020010912 using any configuration option. See also "force-sslv3", "force-tlsv*".
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020010913
Willy Tarreau763a95b2012-10-04 23:15:39 +020010914 Supported in default-server: No
10915
Emeric Brunf9c5c472012-10-11 15:28:34 +020010916no-tls-tickets
10917 This setting is only available when support for OpenSSL was built in. It
10918 disables the stateless session resumption (RFC 5077 TLS Ticket
10919 extension) and force to use stateful session resumption. Stateless
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010920 session resumption is more expensive in CPU usage for servers. This option
10921 is also available on global statement "ssl-default-server-options".
Emeric Brunf9c5c472012-10-11 15:28:34 +020010922
10923 Supported in default-server: No
10924
Emeric Brun9b3009b2012-10-05 11:55:06 +020010925no-tlsv10
Emeric Brun8694b9a2012-10-05 14:39:07 +020010926 This option disables support for TLSv1.0 when SSL is used to communicate with
Emeric Brunf5da4932012-09-28 19:42:54 +020010927 the server. Note that SSLv2 is disabled in the code and cannot be enabled
10928 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010929 often makes sense to disable it when communicating with local servers. This
10930 option is also available on global statement "ssl-default-server-options".
10931 See also "force-sslv3", "force-tlsv*".
Emeric Brunf5da4932012-09-28 19:42:54 +020010932
Willy Tarreau763a95b2012-10-04 23:15:39 +020010933 Supported in default-server: No
10934
Emeric Brun9b3009b2012-10-05 11:55:06 +020010935no-tlsv11
Emeric Brun8694b9a2012-10-05 14:39:07 +020010936 This option disables support for TLSv1.1 when SSL is used to communicate with
Emeric Brunf5da4932012-09-28 19:42:54 +020010937 the server. Note that SSLv2 is disabled in the code and cannot be enabled
10938 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010939 often makes sense to disable it when communicating with local servers. This
10940 option is also available on global statement "ssl-default-server-options".
10941 See also "force-sslv3", "force-tlsv*".
Emeric Brunf5da4932012-09-28 19:42:54 +020010942
Willy Tarreau763a95b2012-10-04 23:15:39 +020010943 Supported in default-server: No
10944
Emeric Brun9b3009b2012-10-05 11:55:06 +020010945no-tlsv12
Emeric Brun8694b9a2012-10-05 14:39:07 +020010946 This option disables support for TLSv1.2 when SSL is used to communicate with
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020010947 the server. Note that SSLv2 is disabled in the code and cannot be enabled
10948 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010949 often makes sense to disable it when communicating with local servers. This
10950 option is also available on global statement "ssl-default-server-options".
10951 See also "force-sslv3", "force-tlsv*".
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020010952
Willy Tarreau763a95b2012-10-04 23:15:39 +020010953 Supported in default-server: No
10954
Simon Hormanfa461682011-06-25 09:39:49 +090010955non-stick
10956 Never add connections allocated to this sever to a stick-table.
10957 This may be used in conjunction with backup to ensure that
10958 stick-table persistence is disabled for backup servers.
10959
Willy Tarreau763a95b2012-10-04 23:15:39 +020010960 Supported in default-server: No
10961
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010010962observe <mode>
10963 This option enables health adjusting based on observing communication with
10964 the server. By default this functionality is disabled and enabling it also
10965 requires to enable health checks. There are two supported modes: "layer4" and
10966 "layer7". In layer4 mode, only successful/unsuccessful tcp connections are
10967 significant. In layer7, which is only allowed for http proxies, responses
10968 received from server are verified, like valid/wrong http code, unparsable
Willy Tarreau150d1462012-03-10 08:19:02 +010010969 headers, a timeout, etc. Valid status codes include 100 to 499, 501 and 505.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010010970
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010971 Supported in default-server: No
10972
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010010973 See also the "check", "on-error" and "error-limit".
10974
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010975on-error <mode>
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010010976 Select what should happen when enough consecutive errors are detected.
10977 Currently, four modes are available:
10978 - fastinter: force fastinter
10979 - fail-check: simulate a failed check, also forces fastinter (default)
10980 - sudden-death: simulate a pre-fatal failed health check, one more failed
10981 check will mark a server down, forces fastinter
10982 - mark-down: mark the server immediately down and force fastinter
10983
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010984 Supported in default-server: Yes
10985
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010010986 See also the "check", "observe" and "error-limit".
10987
Simon Hormane0d1bfb2011-06-21 14:34:58 +090010988on-marked-down <action>
10989 Modify what occurs when a server is marked down.
10990 Currently one action is available:
Justin Karnegeseb2c24a2012-05-24 15:28:52 -070010991 - shutdown-sessions: Shutdown peer sessions. When this setting is enabled,
10992 all connections to the server are immediately terminated when the server
10993 goes down. It might be used if the health check detects more complex cases
10994 than a simple connection status, and long timeouts would cause the service
10995 to remain unresponsive for too long a time. For instance, a health check
10996 might detect that a database is stuck and that there's no chance to reuse
10997 existing connections anymore. Connections killed this way are logged with
10998 a 'D' termination code (for "Down").
Simon Hormane0d1bfb2011-06-21 14:34:58 +090010999
11000 Actions are disabled by default
11001
11002 Supported in default-server: Yes
11003
Justin Karnegeseb2c24a2012-05-24 15:28:52 -070011004on-marked-up <action>
11005 Modify what occurs when a server is marked up.
11006 Currently one action is available:
11007 - shutdown-backup-sessions: Shutdown sessions on all backup servers. This is
11008 done only if the server is not in backup state and if it is not disabled
11009 (it must have an effective weight > 0). This can be used sometimes to force
11010 an active server to take all the traffic back after recovery when dealing
11011 with long sessions (eg: LDAP, SQL, ...). Doing this can cause more trouble
11012 than it tries to solve (eg: incomplete transactions), so use this feature
11013 with extreme care. Sessions killed because a server comes up are logged
11014 with an 'U' termination code (for "Up").
11015
11016 Actions are disabled by default
11017
11018 Supported in default-server: Yes
11019
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011020port <port>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011021 Using the "port" parameter, it becomes possible to use a different port to
11022 send health-checks. On some servers, it may be desirable to dedicate a port
11023 to a specific component able to perform complex tests which are more suitable
11024 to health-checks than the application. It is common to run a simple script in
11025 inetd for instance. This parameter is ignored if the "check" parameter is not
11026 set. See also the "addr" parameter.
11027
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011028 Supported in default-server: Yes
11029
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011030redir <prefix>
11031 The "redir" parameter enables the redirection mode for all GET and HEAD
11032 requests addressing this server. This means that instead of having HAProxy
11033 forward the request to the server, it will send an "HTTP 302" response with
11034 the "Location" header composed of this prefix immediately followed by the
11035 requested URI beginning at the leading '/' of the path component. That means
11036 that no trailing slash should be used after <prefix>. All invalid requests
11037 will be rejected, and all non-GET or HEAD requests will be normally served by
11038 the server. Note that since the response is completely forged, no header
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010011039 mangling nor cookie insertion is possible in the response. However, cookies in
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011040 requests are still analysed, making this solution completely usable to direct
11041 users to a remote location in case of local disaster. Main use consists in
11042 increasing bandwidth for static servers by having the clients directly
11043 connect to them. Note: never use a relative location here, it would cause a
11044 loop between the client and HAProxy!
11045
11046 Example : server srv1 192.168.1.1:80 redir http://image1.mydomain.com check
11047
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011048 Supported in default-server: No
11049
11050rise <count>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011051 The "rise" parameter states that a server will be considered as operational
11052 after <count> consecutive successful health checks. This value defaults to 2
11053 if unspecified. See also the "check", "inter" and "fall" parameters.
11054
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011055 Supported in default-server: Yes
11056
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011057resolve-prefer <family>
11058 When DNS resolution is enabled for a server and multiple IP addresses from
11059 different families are returned, HAProxy will prefer using an IP address
11060 from the family mentioned in the "resolve-prefer" parameter.
11061 Available families: "ipv4" and "ipv6"
11062
Baptiste Assmannc4aabae2015-08-04 22:43:06 +020011063 Default value: ipv6
11064
11065 Supported in default-server: Yes
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011066
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011067 Example:
11068
11069 server s1 app1.domain.com:80 resolvers mydns resolve-prefer ipv6
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011070
Thierry Fournierac88cfe2016-02-17 22:05:30 +010011071resolve-net <network>[,<network[,...]]
11072 This options prioritize th choice of an ip address matching a network. This is
11073 useful with clouds to prefer a local ip. In some cases, a cloud high
11074 avalailibility service can be announced with many ip addresses on many
11075 differents datacenters. The latency between datacenter is not negligible, so
11076 this patch permitsto prefers a local datacenter. If none address matchs the
11077 configured network, another address is selected.
11078
11079 Supported in default-server: Yes
11080
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011081 Example:
11082
11083 server s1 app1.domain.com:80 resolvers mydns resolve-net 10.0.0.0/8
Thierry Fournierac88cfe2016-02-17 22:05:30 +010011084
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011085resolvers <id>
11086 Points to an existing "resolvers" section to resolve current server's
11087 hostname.
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011088 In order to be operational, DNS resolution requires that health check is
11089 enabled on the server. Actually, health checks triggers the DNS resolution.
11090 You must precise one 'resolvers' parameter on each server line where DNS
11091 resolution is required.
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011092
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011093 Supported in default-server: No
11094
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011095 Example:
11096
11097 server s1 app1.domain.com:80 check resolvers mydns
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011098
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011099 See also section 5.3
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011100
Willy Tarreau5ab04ec2011-03-20 10:32:26 +010011101send-proxy
11102 The "send-proxy" parameter enforces use of the PROXY protocol over any
11103 connection established to this server. The PROXY protocol informs the other
11104 end about the layer 3/4 addresses of the incoming connection, so that it can
11105 know the client's address or the public address it accessed to, whatever the
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010011106 upper layer protocol. For connections accepted by an "accept-proxy" or
11107 "accept-netscaler-cip" listener, the advertised address will be used. Only
11108 TCPv4 and TCPv6 address families are supported. Other families such as
11109 Unix sockets, will report an UNKNOWN family. Servers using this option can
11110 fully be chained to another instance of haproxy listening with an
11111 "accept-proxy" setting. This setting must not be used if the server isn't
11112 aware of the protocol. When health checks are sent to the server, the PROXY
11113 protocol is automatically used when this option is set, unless there is an
11114 explicit "port" or "addr" directive, in which case an explicit
11115 "check-send-proxy" directive would also be needed to use the PROXY protocol.
11116 See also the "accept-proxy" and "accept-netscaler-cip" option of the "bind"
11117 keyword.
Willy Tarreau5ab04ec2011-03-20 10:32:26 +010011118
11119 Supported in default-server: No
11120
David Safb76832014-05-08 23:42:08 -040011121send-proxy-v2
11122 The "send-proxy-v2" parameter enforces use of the PROXY protocol version 2
11123 over any connection established to this server. The PROXY protocol informs
11124 the other end about the layer 3/4 addresses of the incoming connection, so
11125 that it can know the client's address or the public address it accessed to,
11126 whatever the upper layer protocol. This setting must not be used if the
11127 server isn't aware of this version of the protocol. See also the "send-proxy"
11128 option of the "bind" keyword.
11129
11130 Supported in default-server: No
11131
11132send-proxy-v2-ssl
11133 The "send-proxy-v2-ssl" parameter enforces use of the PROXY protocol version
11134 2 over any connection established to this server. The PROXY protocol informs
11135 the other end about the layer 3/4 addresses of the incoming connection, so
11136 that it can know the client's address or the public address it accessed to,
11137 whatever the upper layer protocol. In addition, the SSL information extension
11138 of the PROXY protocol is added to the PROXY protocol header. This setting
11139 must not be used if the server isn't aware of this version of the protocol.
11140 See also the "send-proxy-v2" option of the "bind" keyword.
11141
11142 Supported in default-server: No
11143
11144send-proxy-v2-ssl-cn
11145 The "send-proxy-v2-ssl" parameter enforces use of the PROXY protocol version
11146 2 over any connection established to this server. The PROXY protocol informs
11147 the other end about the layer 3/4 addresses of the incoming connection, so
11148 that it can know the client's address or the public address it accessed to,
11149 whatever the upper layer protocol. In addition, the SSL information extension
11150 of the PROXY protocol, along along with the Common Name from the subject of
11151 the client certificate (if any), is added to the PROXY protocol header. This
11152 setting must not be used if the server isn't aware of this version of the
11153 protocol. See also the "send-proxy-v2" option of the "bind" keyword.
11154
11155 Supported in default-server: No
11156
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011157slowstart <start_time_in_ms>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011158 The "slowstart" parameter for a server accepts a value in milliseconds which
11159 indicates after how long a server which has just come back up will run at
11160 full speed. Just as with every other time-based parameter, it can be entered
11161 in any other explicit unit among { us, ms, s, m, h, d }. The speed grows
11162 linearly from 0 to 100% during this time. The limitation applies to two
11163 parameters :
11164
11165 - maxconn: the number of connections accepted by the server will grow from 1
11166 to 100% of the usual dynamic limit defined by (minconn,maxconn,fullconn).
11167
11168 - weight: when the backend uses a dynamic weighted algorithm, the weight
11169 grows linearly from 1 to 100%. In this case, the weight is updated at every
11170 health-check. For this reason, it is important that the "inter" parameter
11171 is smaller than the "slowstart", in order to maximize the number of steps.
11172
11173 The slowstart never applies when haproxy starts, otherwise it would cause
11174 trouble to running servers. It only applies when a server has been previously
11175 seen as failed.
11176
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011177 Supported in default-server: Yes
11178
Willy Tarreau732eac42015-07-09 11:40:25 +020011179sni <expression>
11180 The "sni" parameter evaluates the sample fetch expression, converts it to a
11181 string and uses the result as the host name sent in the SNI TLS extension to
11182 the server. A typical use case is to send the SNI received from the client in
11183 a bridged HTTPS scenario, using the "ssl_fc_sni" sample fetch for the
11184 expression, though alternatives such as req.hdr(host) can also make sense.
11185
11186 Supported in default-server: no
11187
Willy Tarreauc6f4ce82009-06-10 11:09:37 +020011188source <addr>[:<pl>[-<ph>]] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreaubce70882009-09-07 11:51:47 +020011189source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
Willy Tarreauc6f4ce82009-06-10 11:09:37 +020011190source <addr>[:<pl>[-<ph>]] [interface <name>] ...
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011191 The "source" parameter sets the source address which will be used when
11192 connecting to the server. It follows the exact same parameters and principle
11193 as the backend "source" keyword, except that it only applies to the server
11194 referencing it. Please consult the "source" keyword for details.
11195
Willy Tarreauc6f4ce82009-06-10 11:09:37 +020011196 Additionally, the "source" statement on a server line allows one to specify a
11197 source port range by indicating the lower and higher bounds delimited by a
11198 dash ('-'). Some operating systems might require a valid IP address when a
11199 source port range is specified. It is permitted to have the same IP/range for
11200 several servers. Doing so makes it possible to bypass the maximum of 64k
11201 total concurrent connections. The limit will then reach 64k connections per
11202 server.
11203
Lukas Tribus7d56c6d2016-09-13 09:51:15 +000011204 Since Linux 4.2/libc 2.23 IP_BIND_ADDRESS_NO_PORT is set for connections
11205 specifying the source address without port(s).
11206
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011207 Supported in default-server: No
11208
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011209ssl
Willy Tarreau44f65392013-06-25 07:56:20 +020011210 This option enables SSL ciphering on outgoing connections to the server. It
11211 is critical to verify server certificates using "verify" when using SSL to
11212 connect to servers, otherwise the communication is prone to trivial man in
11213 the-middle attacks rendering SSL useless. When this option is used, health
11214 checks are automatically sent in SSL too unless there is a "port" or an
11215 "addr" directive indicating the check should be sent to a different location.
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030011216 See the "check-ssl" option to force SSL health checks.
Willy Tarreau763a95b2012-10-04 23:15:39 +020011217
11218 Supported in default-server: No
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011219
Willy Tarreau163d4622015-10-13 16:16:41 +020011220tcp-ut <delay>
11221 Sets the TCP User Timeout for all outgoing connections to this server. This
11222 option is available on Linux since version 2.6.37. It allows haproxy to
11223 configure a timeout for sockets which contain data not receiving an
11224 acknoledgement for the configured delay. This is especially useful on
11225 long-lived connections experiencing long idle periods such as remote
11226 terminals or database connection pools, where the client and server timeouts
11227 must remain high to allow a long period of idle, but where it is important to
11228 detect that the server has disappeared in order to release all resources
11229 associated with its connection (and the client's session). One typical use
11230 case is also to force dead server connections to die when health checks are
11231 too slow or during a soft reload since health checks are then disabled. The
11232 argument is a delay expressed in milliseconds by default. This only works for
11233 regular TCP connections, and is ignored for other protocols.
11234
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011235track [<proxy>/]<server>
Willy Tarreau32091232014-05-16 13:52:00 +020011236 This option enables ability to set the current state of the server by tracking
11237 another one. It is possible to track a server which itself tracks another
11238 server, provided that at the end of the chain, a server has health checks
11239 enabled. If <proxy> is omitted the current one is used. If disable-on-404 is
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011240 used, it has to be enabled on both proxies.
11241
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011242 Supported in default-server: No
11243
Emeric Brunef42d922012-10-11 16:11:36 +020011244verify [none|required]
11245 This setting is only available when support for OpenSSL was built in. If set
Emeric Brun850efd52014-01-29 12:24:34 +010011246 to 'none', server certificate is not verified. In the other case, The
11247 certificate provided by the server is verified using CAs from 'ca-file'
11248 and optional CRLs from 'crl-file'. If 'ssl_server_verify' is not specified
11249 in global section, this is the default. On verify failure the handshake
Willy Tarreau44f65392013-06-25 07:56:20 +020011250 is aborted. It is critically important to verify server certificates when
11251 using SSL to connect to servers, otherwise the communication is prone to
11252 trivial man-in-the-middle attacks rendering SSL totally useless.
Emeric Brunef42d922012-10-11 16:11:36 +020011253
11254 Supported in default-server: No
11255
Evan Broderbe554312013-06-27 00:05:25 -070011256verifyhost <hostname>
11257 This setting is only available when support for OpenSSL was built in, and
11258 only takes effect if 'verify required' is also specified. When set, the
11259 hostnames in the subject and subjectAlternateNames of the certificate
11260 provided by the server are checked. If none of the hostnames in the
11261 certificate match the specified hostname, the handshake is aborted. The
11262 hostnames in the server-provided certificate may include wildcards.
11263
11264 Supported in default-server: No
11265
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011266weight <weight>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011267 The "weight" parameter is used to adjust the server's weight relative to
11268 other servers. All servers will receive a load proportional to their weight
11269 relative to the sum of all weights, so the higher the weight, the higher the
Willy Tarreau6704d672009-06-15 10:56:05 +020011270 load. The default weight is 1, and the maximal value is 256. A value of 0
11271 means the server will not participate in load-balancing but will still accept
11272 persistent connections. If this parameter is used to distribute the load
11273 according to server's capacity, it is recommended to start with values which
11274 can both grow and shrink, for instance between 10 and 100 to leave enough
11275 room above and below for later adjustments.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011276
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011277 Supported in default-server: Yes
11278
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011279
Cyril Bonté46175dd2015-07-02 22:45:32 +0200112805.3. Server IP address resolution using DNS
11281-------------------------------------------
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011282
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011283HAProxy allows using a host name on the server line to retrieve its IP address
11284using name servers. By default, HAProxy resolves the name when parsing the
11285configuration file, at startup and cache the result for the process' life.
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011286This is not sufficient in some cases, such as in Amazon where a server's IP
11287can change after a reboot or an ELB Virtual IP can change based on current
11288workload.
11289This chapter describes how HAProxy can be configured to process server's name
11290resolution at run time.
11291Whether run time server name resolution has been enable or not, HAProxy will
11292carry on doing the first resolution when parsing the configuration.
11293
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011294Bear in mind that DNS resolution is triggered by health checks. This makes
11295health checks mandatory to allow DNS resolution.
11296
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011297
Cyril Bonté46175dd2015-07-02 22:45:32 +0200112985.3.1. Global overview
11299----------------------
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011300
11301As we've seen in introduction, name resolution in HAProxy occurs at two
11302different steps of the process life:
11303
11304 1. when starting up, HAProxy parses the server line definition and matches a
11305 host name. It uses libc functions to get the host name resolved. This
11306 resolution relies on /etc/resolv.conf file.
11307
11308 2. at run time, when HAProxy gets prepared to run a health check on a server,
11309 it verifies if the current name resolution is still considered as valid.
11310 If not, it processes a new resolution, in parallel of the health check.
11311
11312A few other events can trigger a name resolution at run time:
11313 - when a server's health check ends up in a connection timeout: this may be
11314 because the server has a new IP address. So we need to trigger a name
11315 resolution to know this new IP.
11316
11317A few things important to notice:
11318 - all the name servers are queried in the mean time. HAProxy will process the
11319 first valid response.
11320
11321 - a resolution is considered as invalid (NX, timeout, refused), when all the
11322 servers return an error.
11323
11324
Cyril Bonté46175dd2015-07-02 22:45:32 +0200113255.3.2. The resolvers section
11326----------------------------
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011327
11328This section is dedicated to host information related to name resolution in
11329HAProxy.
11330There can be as many as resolvers section as needed. Each section can contain
11331many name servers.
11332
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011333When multiple name servers are configured in a resolvers section, then HAProxy
11334uses the first valid response. In case of invalid responses, only the last one
11335is treated. Purpose is to give the chance to a slow server to deliver a valid
11336answer after a fast faulty or outdated server.
11337
11338When each server returns a different error type, then only the last error is
11339used by HAProxy to decide what type of behavior to apply.
11340
11341Two types of behavior can be applied:
11342 1. stop DNS resolution
11343 2. replay the DNS query with a new query type
11344 In such case, the following types are applied in this exact order:
11345 1. ANY query type
11346 2. query type corresponding to family pointed by resolve-prefer
11347 server's parameter
11348 3. remaining family type
11349
11350HAProxy stops DNS resolution when the following errors occur:
11351 - invalid DNS response packet
11352 - wrong name in the query section of the response
11353 - NX domain
11354 - Query refused by server
11355 - CNAME not pointing to an IP address
11356
11357HAProxy tries a new query type when the following errors occur:
11358 - no Answer records in the response
11359 - DNS response truncated
11360 - Error in DNS response
11361 - No expected DNS records found in the response
11362 - name server timeout
11363
11364For example, with 2 name servers configured in a resolvers section:
11365 - first response is valid and is applied directly, second response is ignored
11366 - first response is invalid and second one is valid, then second response is
11367 applied;
11368 - first response is a NX domain and second one a truncated response, then
11369 HAProxy replays the query with a new type;
11370 - first response is truncated and second one is a NX Domain, then HAProxy
11371 stops resolution.
11372
11373
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011374resolvers <resolvers id>
11375 Creates a new name server list labelled <resolvers id>
11376
11377A resolvers section accept the following parameters:
11378
11379nameserver <id> <ip>:<port>
11380 DNS server description:
11381 <id> : label of the server, should be unique
11382 <ip> : IP address of the server
11383 <port> : port where the DNS service actually runs
11384
11385hold <status> <period>
11386 Defines <period> during which the last name resolution should be kept based
11387 on last resolution <status>
Baptiste Assmann987e16d2016-11-02 22:23:31 +010011388 <status> : last name resolution status. Acceptable values are "nx",
11389 "other", "refused", "timeout", "valid".
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011390 <period> : interval between two successive name resolution when the last
11391 answer was in <status>. It follows the HAProxy time format.
11392 <period> is in milliseconds by default.
11393
Baptiste Assmann987e16d2016-11-02 22:23:31 +010011394 Default value is 10s for "valid" and 30s for others.
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011395
11396 Note: since the name resolution is triggered by the health checks, a new
11397 resolution is triggered after <period> modulo the <inter> parameter of
11398 the healch check.
11399
11400resolve_retries <nb>
11401 Defines the number <nb> of queries to send to resolve a server name before
11402 giving up.
11403 Default value: 3
11404
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011405 A retry occurs on name server timeout or when the full sequence of DNS query
11406 type failover is over and we need to start up from the default ANY query
11407 type.
11408
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011409timeout <event> <time>
11410 Defines timeouts related to name resolution
11411 <event> : the event on which the <time> timeout period applies to.
11412 events available are:
11413 - retry: time between two DNS queries, when no response have
11414 been received.
11415 Default value: 1s
11416 <time> : time related to the event. It follows the HAProxy time format.
11417 <time> is expressed in milliseconds.
11418
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011419 Example:
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011420
11421 resolvers mydns
11422 nameserver dns1 10.0.0.1:53
11423 nameserver dns2 10.0.0.2:53
11424 resolve_retries 3
11425 timeout retry 1s
Baptiste Assmann987e16d2016-11-02 22:23:31 +010011426 hold other 30s
11427 hold refused 30s
11428 hold nx 30s
11429 hold timeout 30s
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011430 hold valid 10s
11431
11432
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200114336. HTTP header manipulation
11434---------------------------
11435
11436In HTTP mode, it is possible to rewrite, add or delete some of the request and
11437response headers based on regular expressions. It is also possible to block a
11438request or a response if a particular header matches a regular expression,
11439which is enough to stop most elementary protocol attacks, and to protect
Willy Tarreau70dffda2014-01-30 03:07:23 +010011440against information leak from the internal network.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011441
Willy Tarreau70dffda2014-01-30 03:07:23 +010011442If HAProxy encounters an "Informational Response" (status code 1xx), it is able
11443to process all rsp* rules which can allow, deny, rewrite or delete a header,
11444but it will refuse to add a header to any such messages as this is not
11445HTTP-compliant. The reason for still processing headers in such responses is to
11446stop and/or fix any possible information leak which may happen, for instance
11447because another downstream equipment would unconditionally add a header, or if
11448a server name appears there. When such messages are seen, normal processing
11449still occurs on the next non-informational messages.
Willy Tarreau816b9792009-09-15 21:25:21 +020011450
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011451This section covers common usage of the following keywords, described in detail
11452in section 4.2 :
11453
11454 - reqadd <string>
11455 - reqallow <search>
11456 - reqiallow <search>
11457 - reqdel <search>
11458 - reqidel <search>
11459 - reqdeny <search>
11460 - reqideny <search>
11461 - reqpass <search>
11462 - reqipass <search>
11463 - reqrep <search> <replace>
11464 - reqirep <search> <replace>
11465 - reqtarpit <search>
11466 - reqitarpit <search>
11467 - rspadd <string>
11468 - rspdel <search>
11469 - rspidel <search>
11470 - rspdeny <search>
11471 - rspideny <search>
11472 - rsprep <search> <replace>
11473 - rspirep <search> <replace>
11474
11475With all these keywords, the same conventions are used. The <search> parameter
11476is a POSIX extended regular expression (regex) which supports grouping through
11477parenthesis (without the backslash). Spaces and other delimiters must be
11478prefixed with a backslash ('\') to avoid confusion with a field delimiter.
11479Other characters may be prefixed with a backslash to change their meaning :
11480
11481 \t for a tab
11482 \r for a carriage return (CR)
11483 \n for a new line (LF)
11484 \ to mark a space and differentiate it from a delimiter
11485 \# to mark a sharp and differentiate it from a comment
11486 \\ to use a backslash in a regex
11487 \\\\ to use a backslash in the text (*2 for regex, *2 for haproxy)
11488 \xXX to write the ASCII hex code XX as in the C language
11489
11490The <replace> parameter contains the string to be used to replace the largest
11491portion of text matching the regex. It can make use of the special characters
11492above, and can reference a substring which is delimited by parenthesis in the
11493regex, by writing a backslash ('\') immediately followed by one digit from 0 to
114949 indicating the group position (0 designating the entire line). This practice
11495is very common to users of the "sed" program.
11496
11497The <string> parameter represents the string which will systematically be added
11498after the last header line. It can also use special character sequences above.
11499
11500Notes related to these keywords :
11501---------------------------------
11502 - these keywords are not always convenient to allow/deny based on header
11503 contents. It is strongly recommended to use ACLs with the "block" keyword
11504 instead, resulting in far more flexible and manageable rules.
11505
11506 - lines are always considered as a whole. It is not possible to reference
11507 a header name only or a value only. This is important because of the way
11508 headers are written (notably the number of spaces after the colon).
11509
11510 - the first line is always considered as a header, which makes it possible to
11511 rewrite or filter HTTP requests URIs or response codes, but in turn makes
11512 it harder to distinguish between headers and request line. The regex prefix
11513 ^[^\ \t]*[\ \t] matches any HTTP method followed by a space, and the prefix
11514 ^[^ \t:]*: matches any header name followed by a colon.
11515
11516 - for performances reasons, the number of characters added to a request or to
11517 a response is limited at build time to values between 1 and 4 kB. This
11518 should normally be far more than enough for most usages. If it is too short
11519 on occasional usages, it is possible to gain some space by removing some
11520 useless headers before adding new ones.
11521
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010011522 - keywords beginning with "reqi" and "rspi" are the same as their counterpart
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011523 without the 'i' letter except that they ignore case when matching patterns.
11524
11525 - when a request passes through a frontend then a backend, all req* rules
11526 from the frontend will be evaluated, then all req* rules from the backend
11527 will be evaluated. The reverse path is applied to responses.
11528
11529 - req* statements are applied after "block" statements, so that "block" is
11530 always the first one, but before "use_backend" in order to permit rewriting
Willy Tarreaud72758d2010-01-12 10:42:19 +010011531 before switching.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011532
11533
Willy Tarreau74ca5042013-06-11 23:12:07 +0200115347. Using ACLs and fetching samples
11535----------------------------------
11536
11537Haproxy is capable of extracting data from request or response streams, from
11538client or server information, from tables, environmental information etc...
11539The action of extracting such data is called fetching a sample. Once retrieved,
11540these samples may be used for various purposes such as a key to a stick-table,
11541but most common usages consist in matching them against predefined constant
11542data called patterns.
11543
11544
115457.1. ACL basics
11546---------------
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011547
11548The use of Access Control Lists (ACL) provides a flexible solution to perform
11549content switching and generally to take decisions based on content extracted
11550from the request, the response or any environmental status. The principle is
11551simple :
11552
Willy Tarreau74ca5042013-06-11 23:12:07 +020011553 - extract a data sample from a stream, table or the environment
Willy Tarreaue6b11e42013-11-26 19:02:32 +010011554 - optionally apply some format conversion to the extracted sample
Willy Tarreau74ca5042013-06-11 23:12:07 +020011555 - apply one or multiple pattern matching methods on this sample
11556 - perform actions only when a pattern matches the sample
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011557
Willy Tarreau74ca5042013-06-11 23:12:07 +020011558The actions generally consist in blocking a request, selecting a backend, or
11559adding a header.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011560
11561In order to define a test, the "acl" keyword is used. The syntax is :
11562
Willy Tarreau74ca5042013-06-11 23:12:07 +020011563 acl <aclname> <criterion> [flags] [operator] [<value>] ...
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011564
11565This creates a new ACL <aclname> or completes an existing one with new tests.
11566Those tests apply to the portion of request/response specified in <criterion>
11567and may be adjusted with optional flags [flags]. Some criteria also support
Willy Tarreaue6b11e42013-11-26 19:02:32 +010011568an operator which may be specified before the set of values. Optionally some
11569conversion operators may be applied to the sample, and they will be specified
11570as a comma-delimited list of keywords just after the first keyword. The values
11571are of the type supported by the criterion, and are separated by spaces.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011572
11573ACL names must be formed from upper and lower case letters, digits, '-' (dash),
11574'_' (underscore) , '.' (dot) and ':' (colon). ACL names are case-sensitive,
11575which means that "my_acl" and "My_Acl" are two different ACLs.
11576
11577There is no enforced limit to the number of ACLs. The unused ones do not affect
11578performance, they just consume a small amount of memory.
11579
Willy Tarreau74ca5042013-06-11 23:12:07 +020011580The criterion generally is the name of a sample fetch method, or one of its ACL
11581specific declinations. The default test method is implied by the output type of
11582this sample fetch method. The ACL declinations can describe alternate matching
Willy Tarreaue6b11e42013-11-26 19:02:32 +010011583methods of a same sample fetch method. The sample fetch methods are the only
11584ones supporting a conversion.
Willy Tarreau74ca5042013-06-11 23:12:07 +020011585
11586Sample fetch methods return data which can be of the following types :
11587 - boolean
11588 - integer (signed or unsigned)
11589 - IPv4 or IPv6 address
11590 - string
11591 - data block
11592
Willy Tarreaue6b11e42013-11-26 19:02:32 +010011593Converters transform any of these data into any of these. For example, some
11594converters might convert a string to a lower-case string while other ones
11595would turn a string to an IPv4 address, or apply a netmask to an IP address.
11596The resulting sample is of the type of the last converter applied to the list,
11597which defaults to the type of the sample fetch method.
11598
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020011599Each sample or converter returns data of a specific type, specified with its
11600keyword in this documentation. When an ACL is declared using a standard sample
11601fetch method, certain types automatically involved a default matching method
11602which are summarized in the table below :
11603
11604 +---------------------+-----------------+
11605 | Sample or converter | Default |
11606 | output type | matching method |
11607 +---------------------+-----------------+
11608 | boolean | bool |
11609 +---------------------+-----------------+
11610 | integer | int |
11611 +---------------------+-----------------+
11612 | ip | ip |
11613 +---------------------+-----------------+
11614 | string | str |
11615 +---------------------+-----------------+
11616 | binary | none, use "-m" |
11617 +---------------------+-----------------+
11618
11619Note that in order to match a binary samples, it is mandatory to specify a
11620matching method, see below.
11621
Willy Tarreau74ca5042013-06-11 23:12:07 +020011622The ACL engine can match these types against patterns of the following types :
11623 - boolean
11624 - integer or integer range
11625 - IP address / network
11626 - string (exact, substring, suffix, prefix, subdir, domain)
11627 - regular expression
11628 - hex block
11629
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011630The following ACL flags are currently supported :
11631
Willy Tarreau2b5285d2010-05-09 23:45:24 +020011632 -i : ignore case during matching of all subsequent patterns.
11633 -f : load patterns from a file.
Willy Tarreau74ca5042013-06-11 23:12:07 +020011634 -m : use a specific pattern matching method
Thierry FOURNIERb7729c92014-02-11 16:24:41 +010011635 -n : forbid the DNS resolutions
Thierry FOURNIER9860c412014-01-29 14:23:29 +010011636 -M : load the file pointed by -f like a map file.
Thierry FOURNIER3534d882014-01-20 17:01:44 +010011637 -u : force the unique id of the ACL
Willy Tarreau6a06a402007-07-15 20:15:28 +020011638 -- : force end of flags. Useful when a string looks like one of the flags.
11639
Willy Tarreau74ca5042013-06-11 23:12:07 +020011640The "-f" flag is followed by the name of a file from which all lines will be
11641read as individual values. It is even possible to pass multiple "-f" arguments
11642if the patterns are to be loaded from multiple files. Empty lines as well as
11643lines beginning with a sharp ('#') will be ignored. All leading spaces and tabs
11644will be stripped. If it is absolutely necessary to insert a valid pattern
11645beginning with a sharp, just prefix it with a space so that it is not taken for
11646a comment. Depending on the data type and match method, haproxy may load the
11647lines into a binary tree, allowing very fast lookups. This is true for IPv4 and
11648exact string matching. In this case, duplicates will automatically be removed.
11649
Thierry FOURNIER9860c412014-01-29 14:23:29 +010011650The "-M" flag allows an ACL to use a map file. If this flag is set, the file is
11651parsed as two column file. The first column contains the patterns used by the
11652ACL, and the second column contain the samples. The sample can be used later by
11653a map. This can be useful in some rare cases where an ACL would just be used to
11654check for the existence of a pattern in a map before a mapping is applied.
11655
Thierry FOURNIER3534d882014-01-20 17:01:44 +010011656The "-u" flag forces the unique id of the ACL. This unique id is used with the
11657socket interface to identify ACL and dynamically change its values. Note that a
11658file is always identified by its name even if an id is set.
11659
Willy Tarreau74ca5042013-06-11 23:12:07 +020011660Also, note that the "-i" flag applies to subsequent entries and not to entries
11661loaded from files preceding it. For instance :
11662
11663 acl valid-ua hdr(user-agent) -f exact-ua.lst -i -f generic-ua.lst test
11664
11665In this example, each line of "exact-ua.lst" will be exactly matched against
11666the "user-agent" header of the request. Then each line of "generic-ua" will be
11667case-insensitively matched. Then the word "test" will be insensitively matched
11668as well.
11669
11670The "-m" flag is used to select a specific pattern matching method on the input
11671sample. All ACL-specific criteria imply a pattern matching method and generally
11672do not need this flag. However, this flag is useful with generic sample fetch
11673methods to describe how they're going to be matched against the patterns. This
11674is required for sample fetches which return data type for which there is no
11675obvious matching method (eg: string or binary). When "-m" is specified and
11676followed by a pattern matching method name, this method is used instead of the
11677default one for the criterion. This makes it possible to match contents in ways
11678that were not initially planned, or with sample fetch methods which return a
11679string. The matching method also affects the way the patterns are parsed.
11680
Thierry FOURNIERb7729c92014-02-11 16:24:41 +010011681The "-n" flag forbids the dns resolutions. It is used with the load of ip files.
11682By default, if the parser cannot parse ip address it considers that the parsed
11683string is maybe a domain name and try dns resolution. The flag "-n" disable this
11684resolution. It is useful for detecting malformed ip lists. Note that if the DNS
11685server is not reachable, the haproxy configuration parsing may last many minutes
11686waiting fir the timeout. During this time no error messages are displayed. The
11687flag "-n" disable this behavior. Note also that during the runtime, this
11688function is disabled for the dynamic acl modifications.
11689
Willy Tarreau74ca5042013-06-11 23:12:07 +020011690There are some restrictions however. Not all methods can be used with all
11691sample fetch methods. Also, if "-m" is used in conjunction with "-f", it must
11692be placed first. The pattern matching method must be one of the following :
Willy Tarreau5adeda12013-03-31 22:13:34 +020011693
11694 - "found" : only check if the requested sample could be found in the stream,
11695 but do not compare it against any pattern. It is recommended not
Willy Tarreau74ca5042013-06-11 23:12:07 +020011696 to pass any pattern to avoid confusion. This matching method is
11697 particularly useful to detect presence of certain contents such
11698 as headers, cookies, etc... even if they are empty and without
11699 comparing them to anything nor counting them.
Willy Tarreau5adeda12013-03-31 22:13:34 +020011700
11701 - "bool" : check the value as a boolean. It can only be applied to fetches
11702 which return a boolean or integer value, and takes no pattern.
Willy Tarreau74ca5042013-06-11 23:12:07 +020011703 Value zero or false does not match, all other values do match.
Willy Tarreau5adeda12013-03-31 22:13:34 +020011704
11705 - "int" : match the value as an integer. It can be used with integer and
Willy Tarreau74ca5042013-06-11 23:12:07 +020011706 boolean samples. Boolean false is integer 0, true is integer 1.
Willy Tarreau5adeda12013-03-31 22:13:34 +020011707
11708 - "ip" : match the value as an IPv4 or IPv6 address. It is compatible
Willy Tarreau74ca5042013-06-11 23:12:07 +020011709 with IP address samples only, so it is implied and never needed.
Willy Tarreau5adeda12013-03-31 22:13:34 +020011710
11711 - "bin" : match the contents against an hexadecimal string representing a
11712 binary sequence. This may be used with binary or string samples.
11713
11714 - "len" : match the sample's length as an integer. This may be used with
11715 binary or string samples.
11716
Willy Tarreau74ca5042013-06-11 23:12:07 +020011717 - "str" : exact match : match the contents against a string. This may be
11718 used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020011719
Willy Tarreau74ca5042013-06-11 23:12:07 +020011720 - "sub" : substring match : check that the contents contain at least one of
11721 the provided string patterns. This may be used with binary or
11722 string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020011723
Willy Tarreau74ca5042013-06-11 23:12:07 +020011724 - "reg" : regex match : match the contents against a list of regular
11725 expressions. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020011726
Willy Tarreau74ca5042013-06-11 23:12:07 +020011727 - "beg" : prefix match : check that the contents begin like the provided
11728 string patterns. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020011729
Willy Tarreau74ca5042013-06-11 23:12:07 +020011730 - "end" : suffix match : check that the contents end like the provided
11731 string patterns. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020011732
Willy Tarreau74ca5042013-06-11 23:12:07 +020011733 - "dir" : subdir match : check that a slash-delimited portion of the
11734 contents exactly matches one of the provided string patterns.
Willy Tarreau5adeda12013-03-31 22:13:34 +020011735 This may be used with binary or string samples.
11736
Willy Tarreau74ca5042013-06-11 23:12:07 +020011737 - "dom" : domain match : check that a dot-delimited portion of the contents
11738 exactly match one of the provided string patterns. This may be
11739 used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020011740
11741For example, to quickly detect the presence of cookie "JSESSIONID" in an HTTP
11742request, it is possible to do :
11743
11744 acl jsess_present cook(JSESSIONID) -m found
11745
11746In order to apply a regular expression on the 500 first bytes of data in the
11747buffer, one would use the following acl :
11748
11749 acl script_tag payload(0,500) -m reg -i <script>
11750
Willy Tarreaue6b11e42013-11-26 19:02:32 +010011751On systems where the regex library is much slower when using "-i", it is
11752possible to convert the sample to lowercase before matching, like this :
11753
11754 acl script_tag payload(0,500),lower -m reg <script>
11755
Willy Tarreau74ca5042013-06-11 23:12:07 +020011756All ACL-specific criteria imply a default matching method. Most often, these
11757criteria are composed by concatenating the name of the original sample fetch
11758method and the matching method. For example, "hdr_beg" applies the "beg" match
11759to samples retrieved using the "hdr" fetch method. Since all ACL-specific
11760criteria rely on a sample fetch method, it is always possible instead to use
11761the original sample fetch method and the explicit matching method using "-m".
Willy Tarreau2b5285d2010-05-09 23:45:24 +020011762
Willy Tarreau74ca5042013-06-11 23:12:07 +020011763If an alternate match is specified using "-m" on an ACL-specific criterion,
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030011764the matching method is simply applied to the underlying sample fetch method.
11765For example, all ACLs below are exact equivalent :
Willy Tarreau2b5285d2010-05-09 23:45:24 +020011766
Willy Tarreau74ca5042013-06-11 23:12:07 +020011767 acl short_form hdr_beg(host) www.
11768 acl alternate1 hdr_beg(host) -m beg www.
11769 acl alternate2 hdr_dom(host) -m beg www.
11770 acl alternate3 hdr(host) -m beg www.
Willy Tarreau2b5285d2010-05-09 23:45:24 +020011771
Willy Tarreau2b5285d2010-05-09 23:45:24 +020011772
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020011773The table below summarizes the compatibility matrix between sample or converter
11774types and the pattern types to fetch against. It indicates for each compatible
11775combination the name of the matching method to be used, surrounded with angle
11776brackets ">" and "<" when the method is the default one and will work by
11777default without "-m".
Willy Tarreau0ba27502007-12-24 16:55:16 +010011778
Willy Tarreau74ca5042013-06-11 23:12:07 +020011779 +-------------------------------------------------+
11780 | Input sample type |
11781 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020011782 | pattern type | boolean | integer | ip | string | binary |
Willy Tarreau74ca5042013-06-11 23:12:07 +020011783 +----------------------+---------+---------+---------+---------+---------+
11784 | none (presence only) | found | found | found | found | found |
11785 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020011786 | none (boolean value) |> bool <| bool | | bool | |
Willy Tarreau74ca5042013-06-11 23:12:07 +020011787 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020011788 | integer (value) | int |> int <| int | int | |
Willy Tarreau74ca5042013-06-11 23:12:07 +020011789 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010011790 | integer (length) | len | len | len | len | len |
Willy Tarreau74ca5042013-06-11 23:12:07 +020011791 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020011792 | IP address | | |> ip <| ip | ip |
Willy Tarreau74ca5042013-06-11 23:12:07 +020011793 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020011794 | exact string | str | str | str |> str <| str |
Willy Tarreau74ca5042013-06-11 23:12:07 +020011795 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010011796 | prefix | beg | beg | beg | beg | beg |
Willy Tarreau74ca5042013-06-11 23:12:07 +020011797 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010011798 | suffix | end | end | end | end | end |
Willy Tarreau74ca5042013-06-11 23:12:07 +020011799 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010011800 | substring | sub | sub | sub | sub | sub |
Willy Tarreau74ca5042013-06-11 23:12:07 +020011801 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010011802 | subdir | dir | dir | dir | dir | dir |
Willy Tarreau74ca5042013-06-11 23:12:07 +020011803 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010011804 | domain | dom | dom | dom | dom | dom |
Willy Tarreau74ca5042013-06-11 23:12:07 +020011805 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010011806 | regex | reg | reg | reg | reg | reg |
Willy Tarreau74ca5042013-06-11 23:12:07 +020011807 +----------------------+---------+---------+---------+---------+---------+
11808 | hex block | | | | bin | bin |
11809 +----------------------+---------+---------+---------+---------+---------+
Willy Tarreau6a06a402007-07-15 20:15:28 +020011810
11811
Willy Tarreau74ca5042013-06-11 23:12:07 +0200118127.1.1. Matching booleans
11813------------------------
11814
11815In order to match a boolean, no value is needed and all values are ignored.
11816Boolean matching is used by default for all fetch methods of type "boolean".
11817When boolean matching is used, the fetched value is returned as-is, which means
11818that a boolean "true" will always match and a boolean "false" will never match.
11819
11820Boolean matching may also be enforced using "-m bool" on fetch methods which
11821return an integer value. Then, integer value 0 is converted to the boolean
11822"false" and all other values are converted to "true".
11823
Willy Tarreau6a06a402007-07-15 20:15:28 +020011824
Willy Tarreau74ca5042013-06-11 23:12:07 +0200118257.1.2. Matching integers
11826------------------------
11827
11828Integer matching applies by default to integer fetch methods. It can also be
11829enforced on boolean fetches using "-m int". In this case, "false" is converted
11830to the integer 0, and "true" is converted to the integer 1.
11831
11832Integer matching also supports integer ranges and operators. Note that integer
11833matching only applies to positive values. A range is a value expressed with a
11834lower and an upper bound separated with a colon, both of which may be omitted.
Willy Tarreau6a06a402007-07-15 20:15:28 +020011835
11836For instance, "1024:65535" is a valid range to represent a range of
11837unprivileged ports, and "1024:" would also work. "0:1023" is a valid
11838representation of privileged ports, and ":1023" would also work.
11839
Willy Tarreau62644772008-07-16 18:36:06 +020011840As a special case, some ACL functions support decimal numbers which are in fact
11841two integers separated by a dot. This is used with some version checks for
11842instance. All integer properties apply to those decimal numbers, including
11843ranges and operators.
11844
Willy Tarreau6a06a402007-07-15 20:15:28 +020011845For an easier usage, comparison operators are also supported. Note that using
Willy Tarreau0ba27502007-12-24 16:55:16 +010011846operators with ranges does not make much sense and is strongly discouraged.
11847Similarly, it does not make much sense to perform order comparisons with a set
11848of values.
Willy Tarreau6a06a402007-07-15 20:15:28 +020011849
Willy Tarreau0ba27502007-12-24 16:55:16 +010011850Available operators for integer matching are :
Willy Tarreau6a06a402007-07-15 20:15:28 +020011851
11852 eq : true if the tested value equals at least one value
11853 ge : true if the tested value is greater than or equal to at least one value
11854 gt : true if the tested value is greater than at least one value
11855 le : true if the tested value is less than or equal to at least one value
11856 lt : true if the tested value is less than at least one value
11857
Willy Tarreau0ba27502007-12-24 16:55:16 +010011858For instance, the following ACL matches any negative Content-Length header :
Willy Tarreau6a06a402007-07-15 20:15:28 +020011859
11860 acl negative-length hdr_val(content-length) lt 0
11861
Willy Tarreau62644772008-07-16 18:36:06 +020011862This one matches SSL versions between 3.0 and 3.1 (inclusive) :
11863
11864 acl sslv3 req_ssl_ver 3:3.1
11865
Willy Tarreau6a06a402007-07-15 20:15:28 +020011866
Willy Tarreau74ca5042013-06-11 23:12:07 +0200118677.1.3. Matching strings
11868-----------------------
11869
11870String matching applies to string or binary fetch methods, and exists in 6
11871different forms :
11872
11873 - exact match (-m str) : the extracted string must exactly match the
11874 patterns ;
11875
11876 - substring match (-m sub) : the patterns are looked up inside the
11877 extracted string, and the ACL matches if any of them is found inside ;
11878
11879 - prefix match (-m beg) : the patterns are compared with the beginning of
11880 the extracted string, and the ACL matches if any of them matches.
11881
11882 - suffix match (-m end) : the patterns are compared with the end of the
11883 extracted string, and the ACL matches if any of them matches.
11884
Baptiste Assmann33db6002016-03-06 23:32:10 +010011885 - subdir match (-m dir) : the patterns are looked up inside the extracted
Willy Tarreau74ca5042013-06-11 23:12:07 +020011886 string, delimited with slashes ("/"), and the ACL matches if any of them
11887 matches.
11888
11889 - domain match (-m dom) : the patterns are looked up inside the extracted
11890 string, delimited with dots ("."), and the ACL matches if any of them
11891 matches.
Willy Tarreau6a06a402007-07-15 20:15:28 +020011892
11893String matching applies to verbatim strings as they are passed, with the
11894exception of the backslash ("\") which makes it possible to escape some
11895characters such as the space. If the "-i" flag is passed before the first
11896string, then the matching will be performed ignoring the case. In order
11897to match the string "-i", either set it second, or pass the "--" flag
Willy Tarreau0ba27502007-12-24 16:55:16 +010011898before the first string. Same applies of course to match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +020011899
11900
Willy Tarreau74ca5042013-06-11 23:12:07 +0200119017.1.4. Matching regular expressions (regexes)
11902---------------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +020011903
11904Just like with string matching, regex matching applies to verbatim strings as
11905they are passed, with the exception of the backslash ("\") which makes it
11906possible to escape some characters such as the space. If the "-i" flag is
11907passed before the first regex, then the matching will be performed ignoring
11908the case. In order to match the string "-i", either set it second, or pass
Willy Tarreau0ba27502007-12-24 16:55:16 +010011909the "--" flag before the first string. Same principle applies of course to
11910match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +020011911
11912
Willy Tarreau74ca5042013-06-11 23:12:07 +0200119137.1.5. Matching arbitrary data blocks
11914-------------------------------------
11915
11916It is possible to match some extracted samples against a binary block which may
11917not safely be represented as a string. For this, the patterns must be passed as
11918a series of hexadecimal digits in an even number, when the match method is set
11919to binary. Each sequence of two digits will represent a byte. The hexadecimal
11920digits may be used upper or lower case.
11921
11922Example :
11923 # match "Hello\n" in the input stream (\x48 \x65 \x6c \x6c \x6f \x0a)
11924 acl hello payload(0,6) -m bin 48656c6c6f0a
11925
11926
119277.1.6. Matching IPv4 and IPv6 addresses
11928---------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +020011929
11930IPv4 addresses values can be specified either as plain addresses or with a
11931netmask appended, in which case the IPv4 address matches whenever it is
11932within the network. Plain addresses may also be replaced with a resolvable
Willy Tarreaud2a4aa22008-01-31 15:28:22 +010011933host name, but this practice is generally discouraged as it makes it more
Willy Tarreau0ba27502007-12-24 16:55:16 +010011934difficult to read and debug configurations. If hostnames are used, you should
11935at least ensure that they are present in /etc/hosts so that the configuration
11936does not depend on any random DNS match at the moment the configuration is
11937parsed.
Willy Tarreau6a06a402007-07-15 20:15:28 +020011938
Daniel Schnellereba56342016-04-13 00:26:52 +020011939The dotted IPv4 address notation is supported in both regular as well as the
11940abbreviated form with all-0-octets omitted:
11941
11942 +------------------+------------------+------------------+
11943 | Example 1 | Example 2 | Example 3 |
11944 +------------------+------------------+------------------+
11945 | 192.168.0.1 | 10.0.0.12 | 127.0.0.1 |
11946 | 192.168.1 | 10.12 | 127.1 |
11947 | 192.168.0.1/22 | 10.0.0.12/8 | 127.0.0.1/8 |
11948 | 192.168.1/22 | 10.12/8 | 127.1/8 |
11949 +------------------+------------------+------------------+
11950
11951Notice that this is different from RFC 4632 CIDR address notation in which
11952192.168.42/24 would be equivalent to 192.168.42.0/24.
11953
Willy Tarreauceb4ac92012-04-28 00:41:46 +020011954IPv6 may be entered in their usual form, with or without a netmask appended.
11955Only bit counts are accepted for IPv6 netmasks. In order to avoid any risk of
11956trouble with randomly resolved IP addresses, host names are never allowed in
11957IPv6 patterns.
11958
11959HAProxy is also able to match IPv4 addresses with IPv6 addresses in the
11960following situations :
11961 - tested address is IPv4, pattern address is IPv4, the match applies
11962 in IPv4 using the supplied mask if any.
11963 - tested address is IPv6, pattern address is IPv6, the match applies
11964 in IPv6 using the supplied mask if any.
11965 - tested address is IPv6, pattern address is IPv4, the match applies in IPv4
11966 using the pattern's mask if the IPv6 address matches with 2002:IPV4::,
11967 ::IPV4 or ::ffff:IPV4, otherwise it fails.
11968 - tested address is IPv4, pattern address is IPv6, the IPv4 address is first
11969 converted to IPv6 by prefixing ::ffff: in front of it, then the match is
11970 applied in IPv6 using the supplied IPv6 mask.
11971
Willy Tarreau74ca5042013-06-11 23:12:07 +020011972
119737.2. Using ACLs to form conditions
11974----------------------------------
11975
11976Some actions are only performed upon a valid condition. A condition is a
11977combination of ACLs with operators. 3 operators are supported :
11978
11979 - AND (implicit)
11980 - OR (explicit with the "or" keyword or the "||" operator)
11981 - Negation with the exclamation mark ("!")
Willy Tarreau6a06a402007-07-15 20:15:28 +020011982
Willy Tarreau74ca5042013-06-11 23:12:07 +020011983A condition is formed as a disjunctive form:
Willy Tarreau6a06a402007-07-15 20:15:28 +020011984
Willy Tarreau74ca5042013-06-11 23:12:07 +020011985 [!]acl1 [!]acl2 ... [!]acln { or [!]acl1 [!]acl2 ... [!]acln } ...
Willy Tarreaubef91e72013-03-31 23:14:46 +020011986
Willy Tarreau74ca5042013-06-11 23:12:07 +020011987Such conditions are generally used after an "if" or "unless" statement,
11988indicating when the condition will trigger the action.
Willy Tarreaubef91e72013-03-31 23:14:46 +020011989
Willy Tarreau74ca5042013-06-11 23:12:07 +020011990For instance, to block HTTP requests to the "*" URL with methods other than
11991"OPTIONS", as well as POST requests without content-length, and GET or HEAD
11992requests with a content-length greater than 0, and finally every request which
11993is not either GET/HEAD/POST/OPTIONS !
11994
11995 acl missing_cl hdr_cnt(Content-length) eq 0
11996 block if HTTP_URL_STAR !METH_OPTIONS || METH_POST missing_cl
11997 block if METH_GET HTTP_CONTENT
11998 block unless METH_GET or METH_POST or METH_OPTIONS
11999
12000To select a different backend for requests to static contents on the "www" site
12001and to every request on the "img", "video", "download" and "ftp" hosts :
12002
12003 acl url_static path_beg /static /images /img /css
12004 acl url_static path_end .gif .png .jpg .css .js
12005 acl host_www hdr_beg(host) -i www
12006 acl host_static hdr_beg(host) -i img. video. download. ftp.
12007
12008 # now use backend "static" for all static-only hosts, and for static urls
12009 # of host "www". Use backend "www" for the rest.
12010 use_backend static if host_static or host_www url_static
12011 use_backend www if host_www
12012
12013It is also possible to form rules using "anonymous ACLs". Those are unnamed ACL
12014expressions that are built on the fly without needing to be declared. They must
12015be enclosed between braces, with a space before and after each brace (because
12016the braces must be seen as independent words). Example :
12017
12018 The following rule :
12019
12020 acl missing_cl hdr_cnt(Content-length) eq 0
12021 block if METH_POST missing_cl
12022
12023 Can also be written that way :
12024
12025 block if METH_POST { hdr_cnt(Content-length) eq 0 }
12026
12027It is generally not recommended to use this construct because it's a lot easier
12028to leave errors in the configuration when written that way. However, for very
12029simple rules matching only one source IP address for instance, it can make more
12030sense to use them than to declare ACLs with random names. Another example of
12031good use is the following :
12032
12033 With named ACLs :
12034
12035 acl site_dead nbsrv(dynamic) lt 2
12036 acl site_dead nbsrv(static) lt 2
12037 monitor fail if site_dead
12038
12039 With anonymous ACLs :
12040
12041 monitor fail if { nbsrv(dynamic) lt 2 } || { nbsrv(static) lt 2 }
12042
12043See section 4.2 for detailed help on the "block" and "use_backend" keywords.
12044
12045
120467.3. Fetching samples
12047---------------------
12048
12049Historically, sample fetch methods were only used to retrieve data to match
12050against patterns using ACLs. With the arrival of stick-tables, a new class of
12051sample fetch methods was created, most often sharing the same syntax as their
12052ACL counterpart. These sample fetch methods are also known as "fetches". As
12053of now, ACLs and fetches have converged. All ACL fetch methods have been made
12054available as fetch methods, and ACLs may use any sample fetch method as well.
12055
12056This section details all available sample fetch methods and their output type.
12057Some sample fetch methods have deprecated aliases that are used to maintain
12058compatibility with existing configurations. They are then explicitly marked as
12059deprecated and should not be used in new setups.
12060
12061The ACL derivatives are also indicated when available, with their respective
12062matching methods. These ones all have a well defined default pattern matching
12063method, so it is never necessary (though allowed) to pass the "-m" option to
12064indicate how the sample will be matched using ACLs.
12065
12066As indicated in the sample type versus matching compatibility matrix above,
12067when using a generic sample fetch method in an ACL, the "-m" option is
12068mandatory unless the sample type is one of boolean, integer, IPv4 or IPv6. When
12069the same keyword exists as an ACL keyword and as a standard fetch method, the
12070ACL engine will automatically pick the ACL-only one by default.
12071
12072Some of these keywords support one or multiple mandatory arguments, and one or
12073multiple optional arguments. These arguments are strongly typed and are checked
12074when the configuration is parsed so that there is no risk of running with an
12075incorrect argument (eg: an unresolved backend name). Fetch function arguments
12076are passed between parenthesis and are delimited by commas. When an argument
12077is optional, it will be indicated below between square brackets ('[ ]'). When
12078all arguments are optional, the parenthesis may be omitted.
12079
12080Thus, the syntax of a standard sample fetch method is one of the following :
12081 - name
12082 - name(arg1)
12083 - name(arg1,arg2)
12084
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012085
120867.3.1. Converters
12087-----------------
12088
Willy Tarreaue6b11e42013-11-26 19:02:32 +010012089Sample fetch methods may be combined with transformations to be applied on top
12090of the fetched sample (also called "converters"). These combinations form what
12091is called "sample expressions" and the result is a "sample". Initially this
12092was only supported by "stick on" and "stick store-request" directives but this
12093has now be extended to all places where samples may be used (acls, log-format,
12094unique-id-format, add-header, ...).
12095
12096These transformations are enumerated as a series of specific keywords after the
12097sample fetch method. These keywords may equally be appended immediately after
12098the fetch keyword's argument, delimited by a comma. These keywords can also
12099support some arguments (eg: a netmask) which must be passed in parenthesis.
Willy Tarreau0ba27502007-12-24 16:55:16 +010012100
Willy Tarreau97707872015-01-27 15:12:13 +010012101A certain category of converters are bitwise and arithmetic operators which
12102support performing basic operations on integers. Some bitwise operations are
12103supported (and, or, xor, cpl) and some arithmetic operations are supported
12104(add, sub, mul, div, mod, neg). Some comparators are provided (odd, even, not,
12105bool) which make it possible to report a match without having to write an ACL.
12106
Willy Tarreau74ca5042013-06-11 23:12:07 +020012107The currently available list of transformation keywords include :
Willy Tarreau0ba27502007-12-24 16:55:16 +010012108
Willy Tarreau97707872015-01-27 15:12:13 +010012109add(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012110 Adds <value> to the input value of type signed integer, and returns the
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012111 result as a signed integer. <value> can be a numeric value or a variable
Daniel Schneller0b547052016-03-21 20:46:57 +010012112 name. The name of the variable starts with an indication about its scope. The
12113 scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012114 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012115 "sess" : the variable is shared with the whole session
12116 "txn" : the variable is shared with the transaction (request and response)
12117 "req" : the variable is shared only during request processing
12118 "res" : the variable is shared only during response processing
12119 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012120 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012121
12122and(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012123 Performs a bitwise "AND" between <value> and the input value of type signed
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012124 integer, and returns the result as an signed integer. <value> can be a
Daniel Schneller0b547052016-03-21 20:46:57 +010012125 numeric value or a variable name. The name of the variable starts with an
12126 indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012127 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012128 "sess" : the variable is shared with the whole session
12129 "txn" : the variable is shared with the transaction (request and response)
12130 "req" : the variable is shared only during request processing
12131 "res" : the variable is shared only during response processing
12132 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012133 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012134
Emeric Brun53d1a982014-04-30 18:21:37 +020012135base64
12136 Converts a binary input sample to a base64 string. It is used to log or
12137 transfer binary content in a way that can be reliably transferred (eg:
12138 an SSL ID can be copied in a header).
12139
Willy Tarreau97707872015-01-27 15:12:13 +010012140bool
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012141 Returns a boolean TRUE if the input value of type signed integer is
Willy Tarreau97707872015-01-27 15:12:13 +010012142 non-null, otherwise returns FALSE. Used in conjunction with and(), it can be
12143 used to report true/false for bit testing on input values (eg: verify the
12144 presence of a flag).
12145
Emeric Brun54c4ac82014-11-03 15:32:43 +010012146bytes(<offset>[,<length>])
12147 Extracts some bytes from an input binary sample. The result is a binary
12148 sample starting at an offset (in bytes) of the original sample and
12149 optionnaly truncated at the given length.
12150
Willy Tarreau97707872015-01-27 15:12:13 +010012151cpl
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012152 Takes the input value of type signed integer, applies a ones-complement
12153 (flips all bits) and returns the result as an signed integer.
Willy Tarreau97707872015-01-27 15:12:13 +010012154
Willy Tarreau80599772015-01-20 19:35:24 +010012155crc32([<avalanche>])
12156 Hashes a binary input sample into an unsigned 32-bit quantity using the CRC32
12157 hash function. Optionally, it is possible to apply a full avalanche hash
12158 function to the output if the optional <avalanche> argument equals 1. This
12159 converter uses the same functions as used by the various hash-based load
12160 balancing algorithms, so it will provide exactly the same results. It is
12161 provided for compatibility with other software which want a CRC32 to be
12162 computed on some input keys, so it follows the most common implementation as
12163 found in Ethernet, Gzip, PNG, etc... It is slower than the other algorithms
12164 but may provide a better or at least less predictable distribution. It must
12165 not be used for security purposes as a 32-bit hash is trivial to break. See
12166 also "djb2", "sdbm", "wt6" and the "hash-type" directive.
12167
David Carlier29b3ca32015-09-25 14:09:21 +010012168da-csv-conv(<prop>[,<prop>*])
David Carlier4542b102015-06-01 13:54:29 +020012169 Asks the DeviceAtlas converter to identify the User Agent string passed on
12170 input, and to emit a string made of the concatenation of the properties
12171 enumerated in argument, delimited by the separator defined by the global
12172 keyword "deviceatlas-property-separator", or by default the pipe character
David Carlier840b0242016-03-16 10:09:55 +000012173 ('|'). There's a limit of 12 different properties imposed by the haproxy
David Carlier4542b102015-06-01 13:54:29 +020012174 configuration language.
12175
12176 Example:
12177 frontend www
Cyril Bonté307ee1e2015-09-28 23:16:06 +020012178 bind *:8881
12179 default_backend servers
David Carlier840b0242016-03-16 10:09:55 +000012180 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 +020012181
Thierry FOURNIER9687c772015-05-07 15:46:29 +020012182debug
12183 This converter is used as debug tool. It dumps on screen the content and the
12184 type of the input sample. The sample is returned as is on its output. This
12185 converter only exists when haproxy was built with debugging enabled.
12186
Willy Tarreau97707872015-01-27 15:12:13 +010012187div(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012188 Divides the input value of type signed integer by <value>, and returns the
12189 result as an signed integer. If <value> is null, the largest unsigned
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012190 integer is returned (typically 2^63-1). <value> can be a numeric value or a
Daniel Schneller0b547052016-03-21 20:46:57 +010012191 variable name. The name of the variable starts with an indication about its
12192 scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012193 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012194 "sess" : the variable is shared with the whole session
12195 "txn" : the variable is shared with the transaction (request and response)
12196 "req" : the variable is shared only during request processing
12197 "res" : the variable is shared only during response processing
12198 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012199 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012200
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020012201djb2([<avalanche>])
12202 Hashes a binary input sample into an unsigned 32-bit quantity using the DJB2
12203 hash function. Optionally, it is possible to apply a full avalanche hash
12204 function to the output if the optional <avalanche> argument equals 1. This
12205 converter uses the same functions as used by the various hash-based load
12206 balancing algorithms, so it will provide exactly the same results. It is
12207 mostly intended for debugging, but can be used as a stick-table entry to
12208 collect rough statistics. It must not be used for security purposes as a
Willy Tarreau80599772015-01-20 19:35:24 +010012209 32-bit hash is trivial to break. See also "crc32", "sdbm", "wt6" and the
12210 "hash-type" directive.
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020012211
Willy Tarreau97707872015-01-27 15:12:13 +010012212even
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012213 Returns a boolean TRUE if the input value of type signed integer is even
Willy Tarreau97707872015-01-27 15:12:13 +010012214 otherwise returns FALSE. It is functionally equivalent to "not,and(1),bool".
12215
Emeric Brunf399b0d2014-11-03 17:07:03 +010012216field(<index>,<delimiters>)
12217 Extracts the substring at the given index considering given delimiters from
12218 an input string. Indexes start at 1 and delimiters are a string formatted
12219 list of chars.
12220
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012221hex
12222 Converts a binary input sample to an hex string containing two hex digits per
12223 input byte. It is used to log or transfer hex dumps of some binary input data
12224 in a way that can be reliably transferred (eg: an SSL ID can be copied in a
12225 header).
Thierry FOURNIER2f49d6d2014-03-12 15:01:52 +010012226
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012227http_date([<offset>])
12228 Converts an integer supposed to contain a date since epoch to a string
12229 representing this date in a format suitable for use in HTTP header fields. If
12230 an offset value is specified, then it is a number of seconds that is added to
12231 the date before the conversion is operated. This is particularly useful to
12232 emit Date header fields, Expires values in responses when combined with a
12233 positive offset, or Last-Modified values when the offset is negative.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012234
Willy Tarreaud9f316a2014-07-10 14:03:38 +020012235in_table(<table>)
12236 Uses the string representation of the input sample to perform a look up in
12237 the specified table. If the key is not found in the table, a boolean false
12238 is returned. Otherwise a boolean true is returned. This can be used to verify
12239 the presence of a certain key in a table tracking some elements (eg: whether
12240 or not a source IP address or an Authorization header was already seen).
12241
Willy Tarreauffcb2e42014-07-10 16:29:08 +020012242ipmask(<mask>)
12243 Apply a mask to an IPv4 address, and use the result for lookups and storage.
12244 This can be used to make all hosts within a certain mask to share the same
12245 table entries and as such use the same server. The mask can be passed in
12246 dotted form (eg: 255.255.255.0) or in CIDR form (eg: 24).
12247
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020012248json([<input-code>])
12249 Escapes the input string and produces an ASCII ouput string ready to use as a
12250 JSON string. The converter tries to decode the input string according to the
Herve COMMOWICK8dfe8632016-08-05 12:01:20 +020012251 <input-code> parameter. It can be "ascii", "utf8", "utf8s", "utf8p" or
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020012252 "utf8ps". The "ascii" decoder never fails. The "utf8" decoder detects 3 types
12253 of errors:
12254 - bad UTF-8 sequence (lone continuation byte, bad number of continuation
12255 bytes, ...)
12256 - invalid range (the decoded value is within a UTF-8 prohibited range),
12257 - code overlong (the value is encoded with more bytes than necessary).
12258
12259 The UTF-8 JSON encoding can produce a "too long value" error when the UTF-8
12260 character is greater than 0xffff because the JSON string escape specification
12261 only authorizes 4 hex digits for the value encoding. The UTF-8 decoder exists
12262 in 4 variants designated by a combination of two suffix letters : "p" for
12263 "permissive" and "s" for "silently ignore". The behaviors of the decoders
12264 are :
12265 - "ascii" : never fails ;
12266 - "utf8" : fails on any detected errors ;
12267 - "utf8s" : never fails, but removes characters corresponding to errors ;
12268 - "utf8p" : accepts and fixes the overlong errors, but fails on any other
12269 error ;
12270 - "utf8ps" : never fails, accepts and fixes the overlong errors, but removes
12271 characters corresponding to the other errors.
12272
12273 This converter is particularly useful for building properly escaped JSON for
12274 logging to servers which consume JSON-formated traffic logs.
12275
12276 Example:
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020012277 capture request header Host len 15
Herve COMMOWICK8dfe8632016-08-05 12:01:20 +020012278 capture request header user-agent len 150
12279 log-format '{"ip":"%[src]","user-agent":"%[capture.req.hdr(1),json(utf8s)]"}'
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020012280
12281 Input request from client 127.0.0.1:
12282 GET / HTTP/1.0
12283 User-Agent: Very "Ugly" UA 1/2
12284
12285 Output log:
12286 {"ip":"127.0.0.1","user-agent":"Very \"Ugly\" UA 1\/2"}
12287
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012288language(<value>[,<default>])
12289 Returns the value with the highest q-factor from a list as extracted from the
12290 "accept-language" header using "req.fhdr". Values with no q-factor have a
12291 q-factor of 1. Values with a q-factor of 0 are dropped. Only values which
12292 belong to the list of semi-colon delimited <values> will be considered. The
12293 argument <value> syntax is "lang[;lang[;lang[;...]]]". If no value matches the
12294 given list and a default value is provided, it is returned. Note that language
12295 names may have a variant after a dash ('-'). If this variant is present in the
12296 list, it will be matched, but if it is not, only the base language is checked.
12297 The match is case-sensitive, and the output string is always one of those
12298 provided in arguments. The ordering of arguments is meaningless, only the
12299 ordering of the values in the request counts, as the first value among
12300 multiple sharing the same q-factor is used.
Thierry FOURNIERad903512014-04-11 17:51:01 +020012301
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012302 Example :
Thierry FOURNIERad903512014-04-11 17:51:01 +020012303
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012304 # this configuration switches to the backend matching a
12305 # given language based on the request :
Thierry FOURNIERad903512014-04-11 17:51:01 +020012306
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012307 acl es req.fhdr(accept-language),language(es;fr;en) -m str es
12308 acl fr req.fhdr(accept-language),language(es;fr;en) -m str fr
12309 acl en req.fhdr(accept-language),language(es;fr;en) -m str en
12310 use_backend spanish if es
12311 use_backend french if fr
12312 use_backend english if en
12313 default_backend choose_your_language
Thierry FOURNIERad903512014-04-11 17:51:01 +020012314
Willy Tarreauffcb2e42014-07-10 16:29:08 +020012315lower
12316 Convert a string sample to lower case. This can only be placed after a string
12317 sample fetch function or after a transformation keyword returning a string
12318 type. The result is of type string.
12319
Willy Tarreau0dbfdba2014-07-10 16:37:47 +020012320ltime(<format>[,<offset>])
12321 Converts an integer supposed to contain a date since epoch to a string
12322 representing this date in local time using a format defined by the <format>
12323 string using strftime(3). The purpose is to allow any date format to be used
12324 in logs. An optional <offset> in seconds may be applied to the input date
12325 (positive or negative). See the strftime() man page for the format supported
12326 by your operating system. See also the utime converter.
12327
12328 Example :
12329
12330 # Emit two colons, one with the local time and another with ip:port
12331 # Eg: 20140710162350 127.0.0.1:57325
12332 log-format %[date,ltime(%Y%m%d%H%M%S)]\ %ci:%cp
12333
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012334map(<map_file>[,<default_value>])
12335map_<match_type>(<map_file>[,<default_value>])
12336map_<match_type>_<output_type>(<map_file>[,<default_value>])
12337 Search the input value from <map_file> using the <match_type> matching method,
12338 and return the associated value converted to the type <output_type>. If the
12339 input value cannot be found in the <map_file>, the converter returns the
12340 <default_value>. If the <default_value> is not set, the converter fails and
12341 acts as if no input value could be fetched. If the <match_type> is not set, it
12342 defaults to "str". Likewise, if the <output_type> is not set, it defaults to
12343 "str". For convenience, the "map" keyword is an alias for "map_str" and maps a
12344 string to another string.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012345
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012346 It is important to avoid overlapping between the keys : IP addresses and
12347 strings are stored in trees, so the first of the finest match will be used.
12348 Other keys are stored in lists, so the first matching occurrence will be used.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012349
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012350 The following array contains the list of all map functions avalaible sorted by
12351 input type, match type and output type.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012352
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012353 input type | match method | output type str | output type int | output type ip
12354 -----------+--------------+-----------------+-----------------+---------------
12355 str | str | map_str | map_str_int | map_str_ip
12356 -----------+--------------+-----------------+-----------------+---------------
Willy Tarreau787a4c02014-05-10 07:55:30 +020012357 str | beg | map_beg | map_beg_int | map_end_ip
12358 -----------+--------------+-----------------+-----------------+---------------
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012359 str | sub | map_sub | map_sub_int | map_sub_ip
12360 -----------+--------------+-----------------+-----------------+---------------
12361 str | dir | map_dir | map_dir_int | map_dir_ip
12362 -----------+--------------+-----------------+-----------------+---------------
12363 str | dom | map_dom | map_dom_int | map_dom_ip
12364 -----------+--------------+-----------------+-----------------+---------------
12365 str | end | map_end | map_end_int | map_end_ip
12366 -----------+--------------+-----------------+-----------------+---------------
Thierry Fournier8feaa662016-02-10 22:55:20 +010012367 | | map_reg | |
12368 str | reg +-----------------+ map_reg_int | map_reg_ip
12369 | | map_regm | |
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012370 -----------+--------------+-----------------+-----------------+---------------
12371 int | int | map_int | map_int_int | map_int_ip
12372 -----------+--------------+-----------------+-----------------+---------------
12373 ip | ip | map_ip | map_ip_int | map_ip_ip
12374 -----------+--------------+-----------------+-----------------+---------------
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012375
Thierry Fournier8feaa662016-02-10 22:55:20 +010012376 The special map called "map_regm" expect matching zone in the regular
12377 expression and modify the output replacing back reference (like "\1") by
12378 the corresponding match text.
12379
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012380 The file contains one key + value per line. Lines which start with '#' are
12381 ignored, just like empty lines. Leading tabs and spaces are stripped. The key
12382 is then the first "word" (series of non-space/tabs characters), and the value
12383 is what follows this series of space/tab till the end of the line excluding
12384 trailing spaces/tabs.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012385
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012386 Example :
12387
12388 # this is a comment and is ignored
12389 2.22.246.0/23 United Kingdom \n
12390 <-><-----------><--><------------><---->
12391 | | | | `- trailing spaces ignored
12392 | | | `---------- value
12393 | | `-------------------- middle spaces ignored
12394 | `---------------------------- key
12395 `------------------------------------ leading spaces ignored
12396
Willy Tarreau97707872015-01-27 15:12:13 +010012397mod(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012398 Divides the input value of type signed integer by <value>, and returns the
12399 remainder as an signed integer. If <value> is null, then zero is returned.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012400 <value> can be a numeric value or a variable name. The name of the variable
Daniel Schneller0b547052016-03-21 20:46:57 +010012401 starts with an indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012402 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012403 "sess" : the variable is shared with the whole session
12404 "txn" : the variable is shared with the transaction (request and response)
12405 "req" : the variable is shared only during request processing
12406 "res" : the variable is shared only during response processing
12407 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012408 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012409
12410mul(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012411 Multiplies the input value of type signed integer by <value>, and returns
Thierry FOURNIER00c005c2015-07-08 01:10:21 +020012412 the product as an signed integer. In case of overflow, the largest possible
12413 value for the sign is returned so that the operation doesn't wrap around.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012414 <value> can be a numeric value or a variable name. The name of the variable
Daniel Schneller0b547052016-03-21 20:46:57 +010012415 starts with an indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012416 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012417 "sess" : the variable is shared with the whole session
12418 "txn" : the variable is shared with the transaction (request and response)
12419 "req" : the variable is shared only during request processing
12420 "res" : the variable is shared only during response processing
12421 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012422 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012423
12424neg
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012425 Takes the input value of type signed integer, computes the opposite value,
12426 and returns the remainder as an signed integer. 0 is identity. This operator
12427 is provided for reversed subtracts : in order to subtract the input from a
12428 constant, simply perform a "neg,add(value)".
Willy Tarreau97707872015-01-27 15:12:13 +010012429
12430not
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012431 Returns a boolean FALSE if the input value of type signed integer is
Willy Tarreau97707872015-01-27 15:12:13 +010012432 non-null, otherwise returns TRUE. Used in conjunction with and(), it can be
12433 used to report true/false for bit testing on input values (eg: verify the
12434 absence of a flag).
12435
12436odd
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012437 Returns a boolean TRUE if the input value of type signed integer is odd
Willy Tarreau97707872015-01-27 15:12:13 +010012438 otherwise returns FALSE. It is functionally equivalent to "and(1),bool".
12439
12440or(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012441 Performs a bitwise "OR" between <value> and the input value of type signed
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012442 integer, and returns the result as an signed integer. <value> can be a
Daniel Schneller0b547052016-03-21 20:46:57 +010012443 numeric value or a variable name. The name of the variable starts with an
12444 indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012445 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012446 "sess" : the variable is shared with the whole session
12447 "txn" : the variable is shared with the transaction (request and response)
12448 "req" : the variable is shared only during request processing
12449 "res" : the variable is shared only during response processing
12450 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012451 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012452
Willy Tarreauc4dc3502015-01-23 20:39:28 +010012453regsub(<regex>,<subst>[,<flags>])
Willy Tarreau7eda8492015-01-20 19:47:06 +010012454 Applies a regex-based substitution to the input string. It does the same
12455 operation as the well-known "sed" utility with "s/<regex>/<subst>/". By
12456 default it will replace in the input string the first occurrence of the
12457 largest part matching the regular expression <regex> with the substitution
12458 string <subst>. It is possible to replace all occurrences instead by adding
12459 the flag "g" in the third argument <flags>. It is also possible to make the
12460 regex case insensitive by adding the flag "i" in <flags>. Since <flags> is a
12461 string, it is made up from the concatenation of all desired flags. Thus if
12462 both "i" and "g" are desired, using "gi" or "ig" will have the same effect.
12463 It is important to note that due to the current limitations of the
Baptiste Assmann66025d82016-03-06 23:36:48 +010012464 configuration parser, some characters such as closing parenthesis, closing
12465 square brackets or comma are not possible to use in the arguments. The first
12466 use of this converter is to replace certain characters or sequence of
12467 characters with other ones.
Willy Tarreau7eda8492015-01-20 19:47:06 +010012468
12469 Example :
12470
12471 # de-duplicate "/" in header "x-path".
12472 # input: x-path: /////a///b/c/xzxyz/
12473 # output: x-path: /a/b/c/xzxyz/
12474 http-request set-header x-path %[hdr(x-path),regsub(/+,/,g)]
12475
Thierry FOURNIER35ab2752015-05-28 13:22:03 +020012476capture-req(<id>)
12477 Capture the string entry in the request slot <id> and returns the entry as
12478 is. If the slot doesn't exist, the capture fails silently.
12479
12480 See also: "declare capture", "http-request capture",
Baptiste Assmann5ac425c2015-10-21 23:13:46 +020012481 "http-response capture", "capture.req.hdr" and
12482 "capture.res.hdr" (sample fetches).
Thierry FOURNIER35ab2752015-05-28 13:22:03 +020012483
12484capture-res(<id>)
12485 Capture the string entry in the response slot <id> and returns the entry as
12486 is. If the slot doesn't exist, the capture fails silently.
12487
12488 See also: "declare capture", "http-request capture",
Baptiste Assmann5ac425c2015-10-21 23:13:46 +020012489 "http-response capture", "capture.req.hdr" and
12490 "capture.res.hdr" (sample fetches).
Thierry FOURNIER35ab2752015-05-28 13:22:03 +020012491
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020012492sdbm([<avalanche>])
12493 Hashes a binary input sample into an unsigned 32-bit quantity using the SDBM
12494 hash function. Optionally, it is possible to apply a full avalanche hash
12495 function to the output if the optional <avalanche> argument equals 1. This
12496 converter uses the same functions as used by the various hash-based load
12497 balancing algorithms, so it will provide exactly the same results. It is
12498 mostly intended for debugging, but can be used as a stick-table entry to
12499 collect rough statistics. It must not be used for security purposes as a
Willy Tarreau80599772015-01-20 19:35:24 +010012500 32-bit hash is trivial to break. See also "crc32", "djb2", "wt6" and the
12501 "hash-type" directive.
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020012502
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020012503set-var(<var name>)
Daniel Schneller0b547052016-03-21 20:46:57 +010012504 Sets a variable with the input content and returns the content on the output as
12505 is. The variable keeps the value and the associated input type. The name of the
12506 variable starts with an indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012507 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012508 "sess" : the variable is shared with the whole session
12509 "txn" : the variable is shared with the transaction (request and
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020012510 response),
Daniel Schneller0b547052016-03-21 20:46:57 +010012511 "req" : the variable is shared only during request processing,
12512 "res" : the variable is shared only during response processing.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020012513 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012514 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020012515
Willy Tarreau97707872015-01-27 15:12:13 +010012516sub(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012517 Subtracts <value> from the input value of type signed integer, and returns
12518 the result as an signed integer. Note: in order to subtract the input from
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012519 a constant, simply perform a "neg,add(value)". <value> can be a numeric value
Daniel Schneller0b547052016-03-21 20:46:57 +010012520 or a variable name. The name of the variable starts with an indication about
12521 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012522 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012523 "sess" : the variable is shared with the whole session
12524 "txn" : the variable is shared with the transaction (request and
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012525 response),
Daniel Schneller0b547052016-03-21 20:46:57 +010012526 "req" : the variable is shared only during request processing,
12527 "res" : the variable is shared only during response processing.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012528 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012529 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012530
Willy Tarreaud9f316a2014-07-10 14:03:38 +020012531table_bytes_in_rate(<table>)
12532 Uses the string representation of the input sample to perform a look up in
12533 the specified table. If the key is not found in the table, integer value zero
12534 is returned. Otherwise the converter returns the average client-to-server
12535 bytes rate associated with the input sample in the designated table, measured
12536 in amount of bytes over the period configured in the table. See also the
12537 sc_bytes_in_rate sample fetch keyword.
12538
12539
12540table_bytes_out_rate(<table>)
12541 Uses the string representation of the input sample to perform a look up in
12542 the specified table. If the key is not found in the table, integer value zero
12543 is returned. Otherwise the converter returns the average server-to-client
12544 bytes rate associated with the input sample in the designated table, measured
12545 in amount of bytes over the period configured in the table. See also the
12546 sc_bytes_out_rate sample fetch keyword.
12547
12548table_conn_cnt(<table>)
12549 Uses the string representation of the input sample to perform a look up in
12550 the specified table. If the key is not found in the table, integer value zero
12551 is returned. Otherwise the converter returns the cumulated amount of incoming
12552 connections associated with the input sample in the designated table. See
12553 also the sc_conn_cnt sample fetch keyword.
12554
12555table_conn_cur(<table>)
12556 Uses the string representation of the input sample to perform a look up in
12557 the specified table. If the key is not found in the table, integer value zero
12558 is returned. Otherwise the converter returns the current amount of concurrent
12559 tracked connections associated with the input sample in the designated table.
12560 See also the sc_conn_cur sample fetch keyword.
12561
12562table_conn_rate(<table>)
12563 Uses the string representation of the input sample to perform a look up in
12564 the specified table. If the key is not found in the table, integer value zero
12565 is returned. Otherwise the converter returns the average incoming connection
12566 rate associated with the input sample in the designated table. See also the
12567 sc_conn_rate sample fetch keyword.
12568
Thierry FOURNIER236657b2015-08-19 08:25:14 +020012569table_gpt0(<table>)
12570 Uses the string representation of the input sample to perform a look up in
12571 the specified table. If the key is not found in the table, boolean value zero
12572 is returned. Otherwise the converter returns the current value of the first
12573 general purpose tag associated with the input sample in the designated table.
12574 See also the sc_get_gpt0 sample fetch keyword.
12575
Willy Tarreaud9f316a2014-07-10 14:03:38 +020012576table_gpc0(<table>)
12577 Uses the string representation of the input sample to perform a look up in
12578 the specified table. If the key is not found in the table, integer value zero
12579 is returned. Otherwise the converter returns the current value of the first
12580 general purpose counter associated with the input sample in the designated
12581 table. See also the sc_get_gpc0 sample fetch keyword.
12582
12583table_gpc0_rate(<table>)
12584 Uses the string representation of the input sample to perform a look up in
12585 the specified table. If the key is not found in the table, integer value zero
12586 is returned. Otherwise the converter returns the frequency which the gpc0
12587 counter was incremented over the configured period in the table, associated
12588 with the input sample in the designated table. See also the sc_get_gpc0_rate
12589 sample fetch keyword.
12590
12591table_http_err_cnt(<table>)
12592 Uses the string representation of the input sample to perform a look up in
12593 the specified table. If the key is not found in the table, integer value zero
12594 is returned. Otherwise the converter returns the cumulated amount of HTTP
12595 errors associated with the input sample in the designated table. See also the
12596 sc_http_err_cnt sample fetch keyword.
12597
12598table_http_err_rate(<table>)
12599 Uses the string representation of the input sample to perform a look up in
12600 the specified table. If the key is not found in the table, integer value zero
12601 is returned. Otherwise the average rate of HTTP errors associated with the
12602 input sample in the designated table, measured in amount of errors over the
12603 period configured in the table. See also the sc_http_err_rate sample fetch
12604 keyword.
12605
12606table_http_req_cnt(<table>)
12607 Uses the string representation of the input sample to perform a look up in
12608 the specified table. If the key is not found in the table, integer value zero
12609 is returned. Otherwise the converter returns the cumulated amount of HTTP
12610 requests associated with the input sample in the designated table. See also
12611 the sc_http_req_cnt sample fetch keyword.
12612
12613table_http_req_rate(<table>)
12614 Uses the string representation of the input sample to perform a look up in
12615 the specified table. If the key is not found in the table, integer value zero
12616 is returned. Otherwise the average rate of HTTP requests associated with the
12617 input sample in the designated table, measured in amount of requests over the
12618 period configured in the table. See also the sc_http_req_rate sample fetch
12619 keyword.
12620
12621table_kbytes_in(<table>)
12622 Uses the string representation of the input sample to perform a look up in
12623 the specified table. If the key is not found in the table, integer value zero
12624 is returned. Otherwise the converter returns the cumulated amount of client-
12625 to-server data associated with the input sample in the designated table,
12626 measured in kilobytes. The test is currently performed on 32-bit integers,
12627 which limits values to 4 terabytes. See also the sc_kbytes_in sample fetch
12628 keyword.
12629
12630table_kbytes_out(<table>)
12631 Uses the string representation of the input sample to perform a look up in
12632 the specified table. If the key is not found in the table, integer value zero
12633 is returned. Otherwise the converter returns the cumulated amount of server-
12634 to-client data associated with the input sample in the designated table,
12635 measured in kilobytes. The test is currently performed on 32-bit integers,
12636 which limits values to 4 terabytes. See also the sc_kbytes_out sample fetch
12637 keyword.
12638
12639table_server_id(<table>)
12640 Uses the string representation of the input sample to perform a look up in
12641 the specified table. If the key is not found in the table, integer value zero
12642 is returned. Otherwise the converter returns the server ID associated with
12643 the input sample in the designated table. A server ID is associated to a
12644 sample by a "stick" rule when a connection to a server succeeds. A server ID
12645 zero means that no server is associated with this key.
12646
12647table_sess_cnt(<table>)
12648 Uses the string representation of the input sample to perform a look up in
12649 the specified table. If the key is not found in the table, integer value zero
12650 is returned. Otherwise the converter returns the cumulated amount of incoming
12651 sessions associated with the input sample in the designated table. Note that
12652 a session here refers to an incoming connection being accepted by the
12653 "tcp-request connection" rulesets. See also the sc_sess_cnt sample fetch
12654 keyword.
12655
12656table_sess_rate(<table>)
12657 Uses the string representation of the input sample to perform a look up in
12658 the specified table. If the key is not found in the table, integer value zero
12659 is returned. Otherwise the converter returns the average incoming session
12660 rate associated with the input sample in the designated table. Note that a
12661 session here refers to an incoming connection being accepted by the
12662 "tcp-request connection" rulesets. See also the sc_sess_rate sample fetch
12663 keyword.
12664
12665table_trackers(<table>)
12666 Uses the string representation of the input sample to perform a look up in
12667 the specified table. If the key is not found in the table, integer value zero
12668 is returned. Otherwise the converter returns the current amount of concurrent
12669 connections tracking the same key as the input sample in the designated
12670 table. It differs from table_conn_cur in that it does not rely on any stored
12671 information but on the table's reference count (the "use" value which is
12672 returned by "show table" on the CLI). This may sometimes be more suited for
12673 layer7 tracking. It can be used to tell a server how many concurrent
12674 connections there are from a given address for example. See also the
12675 sc_trackers sample fetch keyword.
12676
Willy Tarreauffcb2e42014-07-10 16:29:08 +020012677upper
12678 Convert a string sample to upper case. This can only be placed after a string
12679 sample fetch function or after a transformation keyword returning a string
12680 type. The result is of type string.
12681
Thierry FOURNIER82ff3c92015-05-07 15:46:20 +020012682url_dec
12683 Takes an url-encoded string provided as input and returns the decoded
12684 version as output. The input and the output are of type string.
12685
Willy Tarreau0dbfdba2014-07-10 16:37:47 +020012686utime(<format>[,<offset>])
12687 Converts an integer supposed to contain a date since epoch to a string
12688 representing this date in UTC time using a format defined by the <format>
12689 string using strftime(3). The purpose is to allow any date format to be used
12690 in logs. An optional <offset> in seconds may be applied to the input date
12691 (positive or negative). See the strftime() man page for the format supported
12692 by your operating system. See also the ltime converter.
12693
12694 Example :
12695
12696 # Emit two colons, one with the UTC time and another with ip:port
12697 # Eg: 20140710162350 127.0.0.1:57325
12698 log-format %[date,utime(%Y%m%d%H%M%S)]\ %ci:%cp
12699
Emeric Brunc9a0f6d2014-11-25 14:09:01 +010012700word(<index>,<delimiters>)
12701 Extracts the nth word considering given delimiters from an input string.
12702 Indexes start at 1 and delimiters are a string formatted list of chars.
12703
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020012704wt6([<avalanche>])
12705 Hashes a binary input sample into an unsigned 32-bit quantity using the WT6
12706 hash function. Optionally, it is possible to apply a full avalanche hash
12707 function to the output if the optional <avalanche> argument equals 1. This
12708 converter uses the same functions as used by the various hash-based load
12709 balancing algorithms, so it will provide exactly the same results. It is
12710 mostly intended for debugging, but can be used as a stick-table entry to
12711 collect rough statistics. It must not be used for security purposes as a
Willy Tarreau80599772015-01-20 19:35:24 +010012712 32-bit hash is trivial to break. See also "crc32", "djb2", "sdbm", and the
12713 "hash-type" directive.
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020012714
Willy Tarreau97707872015-01-27 15:12:13 +010012715xor(<value>)
12716 Performs a bitwise "XOR" (exclusive OR) between <value> and the input value
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012717 of type signed integer, and returns the result as an signed integer.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012718 <value> can be a numeric value or a variable name. The name of the variable
Daniel Schneller0b547052016-03-21 20:46:57 +010012719 starts with an indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012720 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012721 "sess" : the variable is shared with the whole session
12722 "txn" : the variable is shared with the transaction (request and
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012723 response),
Daniel Schneller0b547052016-03-21 20:46:57 +010012724 "req" : the variable is shared only during request processing,
12725 "res" : the variable is shared only during response processing.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012726 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012727 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012728
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012729
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200127307.3.2. Fetching samples from internal states
Willy Tarreau74ca5042013-06-11 23:12:07 +020012731--------------------------------------------
12732
12733A first set of sample fetch methods applies to internal information which does
12734not even relate to any client information. These ones are sometimes used with
12735"monitor-fail" directives to report an internal status to external watchers.
12736The sample fetch methods described in this section are usable anywhere.
12737
12738always_false : boolean
12739 Always returns the boolean "false" value. It may be used with ACLs as a
12740 temporary replacement for another one when adjusting configurations.
12741
12742always_true : boolean
12743 Always returns the boolean "true" value. It may be used with ACLs as a
12744 temporary replacement for another one when adjusting configurations.
12745
12746avg_queue([<backend>]) : integer
Willy Tarreaud63335a2010-02-26 12:56:52 +010012747 Returns the total number of queued connections of the designated backend
Willy Tarreau74ca5042013-06-11 23:12:07 +020012748 divided by the number of active servers. The current backend is used if no
12749 backend is specified. This is very similar to "queue" except that the size of
12750 the farm is considered, in order to give a more accurate measurement of the
12751 time it may take for a new connection to be processed. The main usage is with
12752 ACL to return a sorry page to new users when it becomes certain they will get
12753 a degraded service, or to pass to the backend servers in a header so that
12754 they decide to work in degraded mode or to disable some functions to speed up
12755 the processing a bit. Note that in the event there would not be any active
12756 server anymore, twice the number of queued connections would be considered as
12757 the measured value. This is a fair estimate, as we expect one server to get
12758 back soon anyway, but we still prefer to send new traffic to another backend
12759 if in better shape. See also the "queue", "be_conn", and "be_sess_rate"
12760 sample fetches.
Krzysztof Piotr Oledzki346f76d2010-01-12 21:59:30 +010012761
Willy Tarreau74ca5042013-06-11 23:12:07 +020012762be_conn([<backend>]) : integer
Willy Tarreaua36af912009-10-10 12:02:45 +020012763 Applies to the number of currently established connections on the backend,
12764 possibly including the connection being evaluated. If no backend name is
12765 specified, the current one is used. But it is also possible to check another
12766 backend. It can be used to use a specific farm when the nominal one is full.
12767 See also the "fe_conn", "queue" and "be_sess_rate" criteria.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012768
Willy Tarreau74ca5042013-06-11 23:12:07 +020012769be_sess_rate([<backend>]) : integer
12770 Returns an integer value corresponding to the sessions creation rate on the
12771 backend, in number of new sessions per second. This is used with ACLs to
12772 switch to an alternate backend when an expensive or fragile one reaches too
12773 high a session rate, or to limit abuse of service (eg. prevent sucking of an
12774 online dictionary). It can also be useful to add this element to logs using a
12775 log-format directive.
Willy Tarreaud63335a2010-02-26 12:56:52 +010012776
12777 Example :
12778 # Redirect to an error page if the dictionary is requested too often
12779 backend dynamic
12780 mode http
12781 acl being_scanned be_sess_rate gt 100
12782 redirect location /denied.html if being_scanned
Willy Tarreau0ba27502007-12-24 16:55:16 +010012783
Thierry FOURNIERcc103292015-06-06 19:30:17 +020012784bin(<hexa>) : bin
12785 Returns a binary chain. The input is the hexadecimal representation
12786 of the string.
12787
12788bool(<bool>) : bool
12789 Returns a boolean value. <bool> can be 'true', 'false', '1' or '0'.
12790 'false' and '0' are the same. 'true' and '1' are the same.
12791
Willy Tarreau74ca5042013-06-11 23:12:07 +020012792connslots([<backend>]) : integer
12793 Returns an integer value corresponding to the number of connection slots
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030012794 still available in the backend, by totaling the maximum amount of
Willy Tarreau74ca5042013-06-11 23:12:07 +020012795 connections on all servers and the maximum queue size. This is probably only
12796 used with ACLs.
Tait Clarridge7896d522012-12-05 21:39:31 -050012797
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080012798 The basic idea here is to be able to measure the number of connection "slots"
Willy Tarreau55165fe2009-05-10 12:02:55 +020012799 still available (connection + queue), so that anything beyond that (intended
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080012800 usage; see "use_backend" keyword) can be redirected to a different backend.
12801
Willy Tarreau55165fe2009-05-10 12:02:55 +020012802 'connslots' = number of available server connection slots, + number of
12803 available server queue slots.
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080012804
Willy Tarreaua36af912009-10-10 12:02:45 +020012805 Note that while "fe_conn" may be used, "connslots" comes in especially
Willy Tarreau55165fe2009-05-10 12:02:55 +020012806 useful when you have a case of traffic going to one single ip, splitting into
Willy Tarreau74ca5042013-06-11 23:12:07 +020012807 multiple backends (perhaps using ACLs to do name-based load balancing) and
Willy Tarreau55165fe2009-05-10 12:02:55 +020012808 you want to be able to differentiate between different backends, and their
12809 available "connslots". Also, whereas "nbsrv" only measures servers that are
Willy Tarreau74ca5042013-06-11 23:12:07 +020012810 actually *down*, this fetch is more fine-grained and looks into the number of
Willy Tarreaua36af912009-10-10 12:02:45 +020012811 available connection slots as well. See also "queue" and "avg_queue".
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080012812
Willy Tarreau55165fe2009-05-10 12:02:55 +020012813 OTHER CAVEATS AND NOTES: at this point in time, the code does not take care
12814 of dynamic connections. Also, if any of the server maxconn, or maxqueue is 0,
Willy Tarreau74ca5042013-06-11 23:12:07 +020012815 then this fetch clearly does not make sense, in which case the value returned
Willy Tarreau55165fe2009-05-10 12:02:55 +020012816 will be -1.
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080012817
Willy Tarreau6236d3a2013-07-25 14:28:25 +020012818date([<offset>]) : integer
12819 Returns the current date as the epoch (number of seconds since 01/01/1970).
12820 If an offset value is specified, then it is a number of seconds that is added
12821 to the current date before returning the value. This is particularly useful
12822 to compute relative dates, as both positive and negative offsets are allowed.
Willy Tarreau276fae92013-07-25 14:36:01 +020012823 It is useful combined with the http_date converter.
12824
12825 Example :
12826
12827 # set an expires header to now+1 hour in every response
12828 http-response set-header Expires %[date(3600),http_date]
Willy Tarreau6236d3a2013-07-25 14:28:25 +020012829
Willy Tarreau595ec542013-06-12 21:34:28 +020012830env(<name>) : string
12831 Returns a string containing the value of environment variable <name>. As a
12832 reminder, environment variables are per-process and are sampled when the
12833 process starts. This can be useful to pass some information to a next hop
12834 server, or with ACLs to take specific action when the process is started a
12835 certain way.
12836
12837 Examples :
12838 # Pass the Via header to next hop with the local hostname in it
12839 http-request add-header Via 1.1\ %[env(HOSTNAME)]
12840
12841 # reject cookie-less requests when the STOP environment variable is set
12842 http-request deny if !{ cook(SESSIONID) -m found } { env(STOP) -m found }
12843
Willy Tarreau74ca5042013-06-11 23:12:07 +020012844fe_conn([<frontend>]) : integer
12845 Returns the number of currently established connections on the frontend,
Willy Tarreaud63335a2010-02-26 12:56:52 +010012846 possibly including the connection being evaluated. If no frontend name is
12847 specified, the current one is used. But it is also possible to check another
Willy Tarreau74ca5042013-06-11 23:12:07 +020012848 frontend. It can be used to return a sorry page before hard-blocking, or to
12849 use a specific backend to drain new requests when the farm is considered
12850 full. This is mostly used with ACLs but can also be used to pass some
12851 statistics to servers in HTTP headers. See also the "dst_conn", "be_conn",
12852 "fe_sess_rate" fetches.
Willy Tarreaua36af912009-10-10 12:02:45 +020012853
Nenad Merdanovicad9a7e92016-10-03 04:57:37 +020012854fe_req_rate([<frontend>]) : integer
12855 Returns an integer value corresponding to the number of HTTP requests per
12856 second sent to a frontend. This number can differ from "fe_sess_rate" in
12857 situations where client-side keep-alive is enabled.
12858
Willy Tarreau74ca5042013-06-11 23:12:07 +020012859fe_sess_rate([<frontend>]) : integer
12860 Returns an integer value corresponding to the sessions creation rate on the
12861 frontend, in number of new sessions per second. This is used with ACLs to
12862 limit the incoming session rate to an acceptable range in order to prevent
12863 abuse of service at the earliest moment, for example when combined with other
12864 layer 4 ACLs in order to force the clients to wait a bit for the rate to go
12865 down below the limit. It can also be useful to add this element to logs using
12866 a log-format directive. See also the "rate-limit sessions" directive for use
12867 in frontends.
Willy Tarreau079ff0a2009-03-05 21:34:28 +010012868
12869 Example :
12870 # This frontend limits incoming mails to 10/s with a max of 100
12871 # concurrent connections. We accept any connection below 10/s, and
12872 # force excess clients to wait for 100 ms. Since clients are limited to
12873 # 100 max, there cannot be more than 10 incoming mails per second.
12874 frontend mail
12875 bind :25
12876 mode tcp
12877 maxconn 100
12878 acl too_fast fe_sess_rate ge 10
12879 tcp-request inspect-delay 100ms
12880 tcp-request content accept if ! too_fast
12881 tcp-request content accept if WAIT_END
Willy Tarreaud72758d2010-01-12 10:42:19 +010012882
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012883int(<integer>) : signed integer
12884 Returns a signed integer.
12885
Thierry FOURNIERcc103292015-06-06 19:30:17 +020012886ipv4(<ipv4>) : ipv4
12887 Returns an ipv4.
12888
12889ipv6(<ipv6>) : ipv6
12890 Returns an ipv6.
12891
12892meth(<method>) : method
12893 Returns a method.
12894
Willy Tarreau0f30d262014-11-24 16:02:05 +010012895nbproc : integer
12896 Returns an integer value corresponding to the number of processes that were
12897 started (it equals the global "nbproc" setting). This is useful for logging
12898 and debugging purposes.
12899
Willy Tarreau74ca5042013-06-11 23:12:07 +020012900nbsrv([<backend>]) : integer
12901 Returns an integer value corresponding to the number of usable servers of
12902 either the current backend or the named backend. This is mostly used with
12903 ACLs but can also be useful when added to logs. This is normally used to
Willy Tarreaud63335a2010-02-26 12:56:52 +010012904 switch to an alternate backend when the number of servers is too low to
12905 to handle some load. It is useful to report a failure when combined with
12906 "monitor fail".
Willy Tarreau079ff0a2009-03-05 21:34:28 +010012907
Willy Tarreau0f30d262014-11-24 16:02:05 +010012908proc : integer
12909 Returns an integer value corresponding to the position of the process calling
12910 the function, between 1 and global.nbproc. This is useful for logging and
12911 debugging purposes.
12912
Willy Tarreau74ca5042013-06-11 23:12:07 +020012913queue([<backend>]) : integer
Willy Tarreaud63335a2010-02-26 12:56:52 +010012914 Returns the total number of queued connections of the designated backend,
12915 including all the connections in server queues. If no backend name is
12916 specified, the current one is used, but it is also possible to check another
Willy Tarreau74ca5042013-06-11 23:12:07 +020012917 one. This is useful with ACLs or to pass statistics to backend servers. This
12918 can be used to take actions when queuing goes above a known level, generally
12919 indicating a surge of traffic or a massive slowdown on the servers. One
12920 possible action could be to reject new users but still accept old ones. See
12921 also the "avg_queue", "be_conn", and "be_sess_rate" fetches.
12922
Willy Tarreau84310e22014-02-14 11:59:04 +010012923rand([<range>]) : integer
12924 Returns a random integer value within a range of <range> possible values,
12925 starting at zero. If the range is not specified, it defaults to 2^32, which
12926 gives numbers between 0 and 4294967295. It can be useful to pass some values
12927 needed to take some routing decisions for example, or just for debugging
12928 purposes. This random must not be used for security purposes.
12929
Willy Tarreau74ca5042013-06-11 23:12:07 +020012930srv_conn([<backend>/]<server>) : integer
12931 Returns an integer value corresponding to the number of currently established
12932 connections on the designated server, possibly including the connection being
12933 evaluated. If <backend> is omitted, then the server is looked up in the
12934 current backend. It can be used to use a specific farm when one server is
12935 full, or to inform the server about our view of the number of active
12936 connections with it. See also the "fe_conn", "be_conn" and "queue" fetch
12937 methods.
12938
12939srv_is_up([<backend>/]<server>) : boolean
12940 Returns true when the designated server is UP, and false when it is either
12941 DOWN or in maintenance mode. If <backend> is omitted, then the server is
12942 looked up in the current backend. It is mainly used to take action based on
12943 an external status reported via a health check (eg: a geographical site's
12944 availability). Another possible use which is more of a hack consists in
12945 using dummy servers as boolean variables that can be enabled or disabled from
12946 the CLI, so that rules depending on those ACLs can be tweaked in realtime.
12947
12948srv_sess_rate([<backend>/]<server>) : integer
12949 Returns an integer corresponding to the sessions creation rate on the
12950 designated server, in number of new sessions per second. If <backend> is
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030012951 omitted, then the server is looked up in the current backend. This is mostly
Willy Tarreau74ca5042013-06-11 23:12:07 +020012952 used with ACLs but can make sense with logs too. This is used to switch to an
12953 alternate backend when an expensive or fragile one reaches too high a session
12954 rate, or to limit abuse of service (eg. prevent latent requests from
12955 overloading servers).
12956
12957 Example :
12958 # Redirect to a separate back
12959 acl srv1_full srv_sess_rate(be1/srv1) gt 50
12960 acl srv2_full srv_sess_rate(be1/srv2) gt 50
12961 use_backend be2 if srv1_full or srv2_full
12962
Willy Tarreau0f30d262014-11-24 16:02:05 +010012963stopping : boolean
12964 Returns TRUE if the process calling the function is currently stopping. This
12965 can be useful for logging, or for relaxing certain checks or helping close
12966 certain connections upon graceful shutdown.
12967
Thierry FOURNIERcc103292015-06-06 19:30:17 +020012968str(<string>) : string
12969 Returns a string.
12970
Willy Tarreau74ca5042013-06-11 23:12:07 +020012971table_avl([<table>]) : integer
12972 Returns the total number of available entries in the current proxy's
12973 stick-table or in the designated stick-table. See also table_cnt.
12974
12975table_cnt([<table>]) : integer
12976 Returns the total number of entries currently in use in the current proxy's
12977 stick-table or in the designated stick-table. See also src_conn_cnt and
12978 table_avl for other entry counting methods.
12979
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020012980var(<var-name>) : undefined
12981 Returns a variable with the stored type. If the variable is not set, the
Daniel Schneller0b547052016-03-21 20:46:57 +010012982 sample fetch fails. The name of the variable starts with an indication
12983 about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012984 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012985 "sess" : the variable is shared with the whole session
12986 "txn" : the variable is shared with the transaction (request and
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020012987 response),
Daniel Schneller0b547052016-03-21 20:46:57 +010012988 "req" : the variable is shared only during request processing,
12989 "res" : the variable is shared only during response processing.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020012990 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012991 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020012992
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200129937.3.3. Fetching samples at Layer 4
Willy Tarreau74ca5042013-06-11 23:12:07 +020012994----------------------------------
12995
12996The layer 4 usually describes just the transport layer which in haproxy is
12997closest to the connection, where no content is yet made available. The fetch
12998methods described here are usable as low as the "tcp-request connection" rule
12999sets unless they require some future information. Those generally include
13000TCP/IP addresses and ports, as well as elements from stick-tables related to
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013001the incoming connection. For retrieving a value from a sticky counters, the
13002counter number can be explicitly set as 0, 1, or 2 using the pre-defined
13003"sc0_", "sc1_", or "sc2_" prefix, or it can be specified as the first integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013004argument when using the "sc_" prefix. An optional table may be specified with
13005the "sc*" form, in which case the currently tracked key will be looked up into
13006this alternate table instead of the table currently being tracked.
Willy Tarreau74ca5042013-06-11 23:12:07 +020013007
13008be_id : integer
13009 Returns an integer containing the current backend's id. It can be used in
13010 frontends with responses to check which backend processed the request.
13011
13012dst : ip
13013 This is the destination IPv4 address of the connection on the client side,
13014 which is the address the client connected to. It can be useful when running
13015 in transparent mode. It is of type IP and works on both IPv4 and IPv6 tables.
13016 On IPv6 tables, IPv4 address is mapped to its IPv6 equivalent, according to
13017 RFC 4291.
13018
13019dst_conn : integer
13020 Returns an integer value corresponding to the number of currently established
13021 connections on the same socket including the one being evaluated. It is
13022 normally used with ACLs but can as well be used to pass the information to
13023 servers in an HTTP header or in logs. It can be used to either return a sorry
13024 page before hard-blocking, or to use a specific backend to drain new requests
13025 when the socket is considered saturated. This offers the ability to assign
13026 different limits to different listening ports or addresses. See also the
13027 "fe_conn" and "be_conn" fetches.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013028
Willy Tarreau16e01562016-08-09 16:46:18 +020013029dst_is_local : boolean
13030 Returns true if the destination address of the incoming connection is local
13031 to the system, or false if the address doesn't exist on the system, meaning
13032 that it was intercepted in transparent mode. It can be useful to apply
13033 certain rules by default to forwarded traffic and other rules to the traffic
13034 targetting the real address of the machine. For example the stats page could
13035 be delivered only on this address, or SSH access could be locally redirected.
13036 Please note that the check involves a few system calls, so it's better to do
13037 it only once per connection.
13038
Willy Tarreau74ca5042013-06-11 23:12:07 +020013039dst_port : integer
13040 Returns an integer value corresponding to the destination TCP port of the
13041 connection on the client side, which is the port the client connected to.
13042 This might be used when running in transparent mode, when assigning dynamic
13043 ports to some clients for a whole application session, to stick all users to
13044 a same server, or to pass the destination port information to a server using
13045 an HTTP header.
13046
Thierry Fournier / OZON.IO6310bef2016-07-24 20:16:50 +020013047fc_rtt(<unit>) : integer
13048 Returns the Round Trip Time (RTT) measured by the kernel for the client
13049 connection. <unit> is facultative, by default the unit is milliseconds. <unit>
13050 can be set to "ms" for milliseconds or "us" for microseconds. If the server
13051 connection is not established, if the connection is not TCP or if the
13052 operating system does not support TCP_INFO, for example Linux kernels before
13053 2.4, the sample fetch fails.
13054
13055fc_rttvar(<unit>) : integer
13056 Returns the Round Trip Time (RTT) variance measured by the kernel for the
13057 client connection. <unit> is facultative, by default the unit is milliseconds.
13058 <unit> can be set to "ms" for milliseconds or "us" for microseconds. If the
13059 server connection is not established, if the connection is not TCP or if the
13060 operating system does not support TCP_INFO, for example Linux kernels before
13061 2.4, the sample fetch fails.
13062
Joe Williams30fcd392016-08-10 07:06:44 -070013063fc_unacked(<unit>) : integer
13064 Returns the unacked counter measured by the kernel for the client connection.
13065 If the server connection is not established, if the connection is not TCP or
13066 if the operating system does not support TCP_INFO, for example Linux kernels
13067 before 2.4, the sample fetch fails.
13068
13069fc_sacked(<unit>) : integer
13070 Returns the sacked counter measured by the kernel for the client connection.
13071 If the server connection is not established, if the connection is not TCP or
13072 if the operating system does not support TCP_INFO, for example Linux kernels
13073 before 2.4, the sample fetch fails.
13074
13075fc_retrans(<unit>) : integer
13076 Returns the retransmits counter measured by the kernel for the client
13077 connection. If the server connection is not established, if the connection is
13078 not TCP or if the operating system does not support TCP_INFO, for example
13079 Linux kernels before 2.4, the sample fetch fails.
13080
13081fc_fackets(<unit>) : integer
13082 Returns the fack counter measured by the kernel for the client
13083 connection. If the server connection is not established, if the connection is
13084 not TCP or if the operating system does not support TCP_INFO, for example
13085 Linux kernels before 2.4, the sample fetch fails.
13086
13087fc_lost(<unit>) : integer
13088 Returns the lost counter measured by the kernel for the client
13089 connection. If the server connection is not established, if the connection is
13090 not TCP or if the operating system does not support TCP_INFO, for example
13091 Linux kernels before 2.4, the sample fetch fails.
13092
13093fc_reordering(<unit>) : integer
13094 Returns the reordering counter measured by the kernel for the client
13095 connection. If the server connection is not established, if the connection is
13096 not TCP or if the operating system does not support TCP_INFO, for example
13097 Linux kernels before 2.4, the sample fetch fails.
13098
Willy Tarreau74ca5042013-06-11 23:12:07 +020013099fe_id : integer
13100 Returns an integer containing the current frontend's id. It can be used in
13101 backends to check from which backend it was called, or to stick all users
13102 coming via a same frontend to the same server.
13103
Cyril Bonté62ba8702014-04-22 23:52:25 +020013104sc_bytes_in_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013105sc0_bytes_in_rate([<table>]) : integer
13106sc1_bytes_in_rate([<table>]) : integer
13107sc2_bytes_in_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013108 Returns the average client-to-server bytes rate from the currently tracked
13109 counters, measured in amount of bytes over the period configured in the
13110 table. See also src_bytes_in_rate.
13111
Cyril Bonté62ba8702014-04-22 23:52:25 +020013112sc_bytes_out_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013113sc0_bytes_out_rate([<table>]) : integer
13114sc1_bytes_out_rate([<table>]) : integer
13115sc2_bytes_out_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013116 Returns the average server-to-client bytes rate from the currently tracked
13117 counters, measured in amount of bytes over the period configured in the
13118 table. See also src_bytes_out_rate.
13119
Cyril Bonté62ba8702014-04-22 23:52:25 +020013120sc_clr_gpc0(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013121sc0_clr_gpc0([<table>]) : integer
13122sc1_clr_gpc0([<table>]) : integer
13123sc2_clr_gpc0([<table>]) : integer
Willy Tarreauf73cd112011-08-13 01:45:16 +020013124 Clears the first General Purpose Counter associated to the currently tracked
13125 counters, and returns its previous value. Before the first invocation, the
Willy Tarreau869948b2013-01-04 14:14:57 +010013126 stored value is zero, so first invocation will always return zero. This is
13127 typically used as a second ACL in an expression in order to mark a connection
13128 when a first ACL was verified :
Willy Tarreauf73cd112011-08-13 01:45:16 +020013129
13130 # block if 5 consecutive requests continue to come faster than 10 sess
13131 # per second, and reset the counter as soon as the traffic slows down.
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020013132 acl abuse sc0_http_req_rate gt 10
13133 acl kill sc0_inc_gpc0 gt 5
13134 acl save sc0_clr_gpc0 ge 0
Willy Tarreauf73cd112011-08-13 01:45:16 +020013135 tcp-request connection accept if !abuse save
13136 tcp-request connection reject if abuse kill
13137
Cyril Bonté62ba8702014-04-22 23:52:25 +020013138sc_conn_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013139sc0_conn_cnt([<table>]) : integer
13140sc1_conn_cnt([<table>]) : integer
13141sc2_conn_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013142 Returns the cumulated number of incoming connections from currently tracked
13143 counters. See also src_conn_cnt.
13144
Cyril Bonté62ba8702014-04-22 23:52:25 +020013145sc_conn_cur(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013146sc0_conn_cur([<table>]) : integer
13147sc1_conn_cur([<table>]) : integer
13148sc2_conn_cur([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013149 Returns the current amount of concurrent connections tracking the same
13150 tracked counters. This number is automatically incremented when tracking
13151 begins and decremented when tracking stops. See also src_conn_cur.
13152
Cyril Bonté62ba8702014-04-22 23:52:25 +020013153sc_conn_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013154sc0_conn_rate([<table>]) : integer
13155sc1_conn_rate([<table>]) : integer
13156sc2_conn_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013157 Returns the average connection rate from the currently tracked counters,
13158 measured in amount of connections over the period configured in the table.
13159 See also src_conn_rate.
13160
Cyril Bonté62ba8702014-04-22 23:52:25 +020013161sc_get_gpc0(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013162sc0_get_gpc0([<table>]) : integer
13163sc1_get_gpc0([<table>]) : integer
13164sc2_get_gpc0([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013165 Returns the value of the first General Purpose Counter associated to the
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013166 currently tracked counters. See also src_get_gpc0 and sc/sc0/sc1/sc2_inc_gpc0.
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013167
Thierry FOURNIER236657b2015-08-19 08:25:14 +020013168sc_get_gpt0(<ctr>[,<table>]) : integer
13169sc0_get_gpt0([<table>]) : integer
13170sc1_get_gpt0([<table>]) : integer
13171sc2_get_gpt0([<table>]) : integer
13172 Returns the value of the first General Purpose Tag associated to the
13173 currently tracked counters. See also src_get_gpt0.
13174
Cyril Bonté62ba8702014-04-22 23:52:25 +020013175sc_gpc0_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013176sc0_gpc0_rate([<table>]) : integer
13177sc1_gpc0_rate([<table>]) : integer
13178sc2_gpc0_rate([<table>]) : integer
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013179 Returns the average increment rate of the first General Purpose Counter
13180 associated to the currently tracked counters. It reports the frequency
13181 which the gpc0 counter was incremented over the configured period. See also
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013182 src_gpc0_rate, sc/sc0/sc1/sc2_get_gpc0, and sc/sc0/sc1/sc2_inc_gpc0. Note
13183 that the "gpc0_rate" counter must be stored in the stick-table for a value to
13184 be returned, as "gpc0" only holds the event count.
Willy Tarreaue9656522010-08-17 15:40:09 +020013185
Cyril Bonté62ba8702014-04-22 23:52:25 +020013186sc_http_err_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013187sc0_http_err_cnt([<table>]) : integer
13188sc1_http_err_cnt([<table>]) : integer
13189sc2_http_err_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013190 Returns the cumulated number of HTTP errors from the currently tracked
13191 counters. This includes the both request errors and 4xx error responses.
13192 See also src_http_err_cnt.
13193
Cyril Bonté62ba8702014-04-22 23:52:25 +020013194sc_http_err_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013195sc0_http_err_rate([<table>]) : integer
13196sc1_http_err_rate([<table>]) : integer
13197sc2_http_err_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013198 Returns the average rate of HTTP errors from the currently tracked counters,
13199 measured in amount of errors over the period configured in the table. This
13200 includes the both request errors and 4xx error responses. See also
13201 src_http_err_rate.
13202
Cyril Bonté62ba8702014-04-22 23:52:25 +020013203sc_http_req_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013204sc0_http_req_cnt([<table>]) : integer
13205sc1_http_req_cnt([<table>]) : integer
13206sc2_http_req_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013207 Returns the cumulated number of HTTP requests from the currently tracked
13208 counters. This includes every started request, valid or not. See also
13209 src_http_req_cnt.
13210
Cyril Bonté62ba8702014-04-22 23:52:25 +020013211sc_http_req_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013212sc0_http_req_rate([<table>]) : integer
13213sc1_http_req_rate([<table>]) : integer
13214sc2_http_req_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013215 Returns the average rate of HTTP requests from the currently tracked
13216 counters, measured in amount of requests over the period configured in
13217 the table. This includes every started request, valid or not. See also
13218 src_http_req_rate.
13219
Cyril Bonté62ba8702014-04-22 23:52:25 +020013220sc_inc_gpc0(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013221sc0_inc_gpc0([<table>]) : integer
13222sc1_inc_gpc0([<table>]) : integer
13223sc2_inc_gpc0([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013224 Increments the first General Purpose Counter associated to the currently
Willy Tarreau869948b2013-01-04 14:14:57 +010013225 tracked counters, and returns its new value. Before the first invocation,
13226 the stored value is zero, so first invocation will increase it to 1 and will
13227 return 1. This is typically used as a second ACL in an expression in order
13228 to mark a connection when a first ACL was verified :
Willy Tarreaue9656522010-08-17 15:40:09 +020013229
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020013230 acl abuse sc0_http_req_rate gt 10
13231 acl kill sc0_inc_gpc0 gt 0
Willy Tarreaue9656522010-08-17 15:40:09 +020013232 tcp-request connection reject if abuse kill
13233
Cyril Bonté62ba8702014-04-22 23:52:25 +020013234sc_kbytes_in(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013235sc0_kbytes_in([<table>]) : integer
13236sc1_kbytes_in([<table>]) : integer
13237sc2_kbytes_in([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020013238 Returns the total amount of client-to-server data from the currently tracked
13239 counters, measured in kilobytes. The test is currently performed on 32-bit
13240 integers, which limits values to 4 terabytes. See also src_kbytes_in.
Willy Tarreaue9656522010-08-17 15:40:09 +020013241
Cyril Bonté62ba8702014-04-22 23:52:25 +020013242sc_kbytes_out(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013243sc0_kbytes_out([<table>]) : integer
13244sc1_kbytes_out([<table>]) : integer
13245sc2_kbytes_out([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020013246 Returns the total amount of server-to-client data from the currently tracked
13247 counters, measured in kilobytes. The test is currently performed on 32-bit
13248 integers, which limits values to 4 terabytes. See also src_kbytes_out.
Willy Tarreaue9656522010-08-17 15:40:09 +020013249
Cyril Bonté62ba8702014-04-22 23:52:25 +020013250sc_sess_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013251sc0_sess_cnt([<table>]) : integer
13252sc1_sess_cnt([<table>]) : integer
13253sc2_sess_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013254 Returns the cumulated number of incoming connections that were transformed
13255 into sessions, which means that they were accepted by a "tcp-request
13256 connection" rule, from the currently tracked counters. A backend may count
13257 more sessions than connections because each connection could result in many
Jamie Gloudonaaa21002012-08-25 00:18:33 -040013258 backend sessions if some HTTP keep-alive is performed over the connection
Willy Tarreaue9656522010-08-17 15:40:09 +020013259 with the client. See also src_sess_cnt.
13260
Cyril Bonté62ba8702014-04-22 23:52:25 +020013261sc_sess_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013262sc0_sess_rate([<table>]) : integer
13263sc1_sess_rate([<table>]) : integer
13264sc2_sess_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013265 Returns the average session rate from the currently tracked counters,
13266 measured in amount of sessions over the period configured in the table. A
13267 session is a connection that got past the early "tcp-request connection"
13268 rules. A backend may count more sessions than connections because each
13269 connection could result in many backend sessions if some HTTP keep-alive is
Jamie Gloudonaaa21002012-08-25 00:18:33 -040013270 performed over the connection with the client. See also src_sess_rate.
Willy Tarreaue9656522010-08-17 15:40:09 +020013271
Cyril Bonté62ba8702014-04-22 23:52:25 +020013272sc_tracked(<ctr>[,<table>]) : boolean
Willy Tarreau0f791d42013-07-23 19:56:43 +020013273sc0_tracked([<table>]) : boolean
13274sc1_tracked([<table>]) : boolean
13275sc2_tracked([<table>]) : boolean
Willy Tarreau6f1615f2013-06-03 15:15:22 +020013276 Returns true if the designated session counter is currently being tracked by
13277 the current session. This can be useful when deciding whether or not we want
13278 to set some values in a header passed to the server.
13279
Cyril Bonté62ba8702014-04-22 23:52:25 +020013280sc_trackers(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013281sc0_trackers([<table>]) : integer
13282sc1_trackers([<table>]) : integer
13283sc2_trackers([<table>]) : integer
Willy Tarreau2406db42012-12-09 12:16:43 +010013284 Returns the current amount of concurrent connections tracking the same
13285 tracked counters. This number is automatically incremented when tracking
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020013286 begins and decremented when tracking stops. It differs from sc0_conn_cur in
Willy Tarreau2406db42012-12-09 12:16:43 +010013287 that it does not rely on any stored information but on the table's reference
13288 count (the "use" value which is returned by "show table" on the CLI). This
Willy Tarreau74ca5042013-06-11 23:12:07 +020013289 may sometimes be more suited for layer7 tracking. It can be used to tell a
13290 server how many concurrent connections there are from a given address for
13291 example.
Willy Tarreau2406db42012-12-09 12:16:43 +010013292
Willy Tarreau74ca5042013-06-11 23:12:07 +020013293so_id : integer
13294 Returns an integer containing the current listening socket's id. It is useful
13295 in frontends involving many "bind" lines, or to stick all users coming via a
13296 same socket to the same server.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013297
Willy Tarreau74ca5042013-06-11 23:12:07 +020013298src : ip
13299 This is the source IPv4 address of the client of the session. It is of type
13300 IP and works on both IPv4 and IPv6 tables. On IPv6 tables, IPv4 addresses are
13301 mapped to their IPv6 equivalent, according to RFC 4291. Note that it is the
13302 TCP-level source address which is used, and not the address of a client
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010013303 behind a proxy. However if the "accept-proxy" or "accept-netscaler-cip" bind
13304 directive is used, it can be the address of a client behind another
13305 PROXY-protocol compatible component for all rule sets except
13306 "tcp-request connection" which sees the real address.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013307
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010013308 Example:
13309 # add an HTTP header in requests with the originating address' country
13310 http-request set-header X-Country %[src,map_ip(geoip.lst)]
13311
Willy Tarreau74ca5042013-06-11 23:12:07 +020013312src_bytes_in_rate([<table>]) : integer
13313 Returns the average bytes rate from the incoming connection's source address
13314 in the current proxy's stick-table or in the designated stick-table, measured
13315 in amount of bytes over the period configured in the table. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013316 not found, zero is returned. See also sc/sc0/sc1/sc2_bytes_in_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013317
Willy Tarreau74ca5042013-06-11 23:12:07 +020013318src_bytes_out_rate([<table>]) : integer
13319 Returns the average bytes rate to the incoming connection's source address in
13320 the current proxy's stick-table or in the designated stick-table, measured in
Willy Tarreauc9705a12010-07-27 20:05:50 +020013321 amount of bytes over the period configured in the table. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013322 not found, zero is returned. See also sc/sc0/sc1/sc2_bytes_out_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013323
Willy Tarreau74ca5042013-06-11 23:12:07 +020013324src_clr_gpc0([<table>]) : integer
13325 Clears the first General Purpose Counter associated to the incoming
13326 connection's source address in the current proxy's stick-table or in the
13327 designated stick-table, and returns its previous value. If the address is not
13328 found, an entry is created and 0 is returned. This is typically used as a
13329 second ACL in an expression in order to mark a connection when a first ACL
13330 was verified :
Willy Tarreauf73cd112011-08-13 01:45:16 +020013331
13332 # block if 5 consecutive requests continue to come faster than 10 sess
13333 # per second, and reset the counter as soon as the traffic slows down.
13334 acl abuse src_http_req_rate gt 10
13335 acl kill src_inc_gpc0 gt 5
Willy Tarreau869948b2013-01-04 14:14:57 +010013336 acl save src_clr_gpc0 ge 0
Willy Tarreauf73cd112011-08-13 01:45:16 +020013337 tcp-request connection accept if !abuse save
13338 tcp-request connection reject if abuse kill
13339
Willy Tarreau74ca5042013-06-11 23:12:07 +020013340src_conn_cnt([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +020013341 Returns the cumulated number of connections initiated from the current
Willy Tarreau74ca5042013-06-11 23:12:07 +020013342 incoming connection's source address in the current proxy's stick-table or in
Willy Tarreauc9705a12010-07-27 20:05:50 +020013343 the designated stick-table. If the address is not found, zero is returned.
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013344 See also sc/sc0/sc1/sc2_conn_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013345
Willy Tarreau74ca5042013-06-11 23:12:07 +020013346src_conn_cur([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +020013347 Returns the current amount of concurrent connections initiated from the
Willy Tarreau74ca5042013-06-11 23:12:07 +020013348 current incoming connection's source address in the current proxy's
13349 stick-table or in the designated stick-table. If the address is not found,
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013350 zero is returned. See also sc/sc0/sc1/sc2_conn_cur.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013351
Willy Tarreau74ca5042013-06-11 23:12:07 +020013352src_conn_rate([<table>]) : integer
13353 Returns the average connection rate from the incoming connection's source
13354 address in the current proxy's stick-table or in the designated stick-table,
13355 measured in amount of connections over the period configured in the table. If
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013356 the address is not found, zero is returned. See also sc/sc0/sc1/sc2_conn_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013357
Willy Tarreau74ca5042013-06-11 23:12:07 +020013358src_get_gpc0([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +020013359 Returns the value of the first General Purpose Counter associated to the
Willy Tarreau74ca5042013-06-11 23:12:07 +020013360 incoming connection's source address in the current proxy's stick-table or in
Willy Tarreauc9705a12010-07-27 20:05:50 +020013361 the designated stick-table. If the address is not found, zero is returned.
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013362 See also sc/sc0/sc1/sc2_get_gpc0 and src_inc_gpc0.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013363
Thierry FOURNIER236657b2015-08-19 08:25:14 +020013364src_get_gpt0([<table>]) : integer
13365 Returns the value of the first General Purpose Tag associated to the
13366 incoming connection's source address in the current proxy's stick-table or in
13367 the designated stick-table. If the address is not found, zero is returned.
13368 See also sc/sc0/sc1/sc2_get_gpt0.
13369
Willy Tarreau74ca5042013-06-11 23:12:07 +020013370src_gpc0_rate([<table>]) : integer
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013371 Returns the average increment rate of the first General Purpose Counter
Willy Tarreau74ca5042013-06-11 23:12:07 +020013372 associated to the incoming connection's source address in the current proxy's
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013373 stick-table or in the designated stick-table. It reports the frequency
13374 which the gpc0 counter was incremented over the configured period. See also
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013375 sc/sc0/sc1/sc2_gpc0_rate, src_get_gpc0, and sc/sc0/sc1/sc2_inc_gpc0. Note
13376 that the "gpc0_rate" counter must be stored in the stick-table for a value to
13377 be returned, as "gpc0" only holds the event count.
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013378
Willy Tarreau74ca5042013-06-11 23:12:07 +020013379src_http_err_cnt([<table>]) : integer
13380 Returns the cumulated number of HTTP errors from the incoming connection's
13381 source address in the current proxy's stick-table or in the designated
Willy Tarreauc9705a12010-07-27 20:05:50 +020013382 stick-table. This includes the both request errors and 4xx error responses.
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013383 See also sc/sc0/sc1/sc2_http_err_cnt. If the address is not found, zero is
Willy Tarreau74ca5042013-06-11 23:12:07 +020013384 returned.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013385
Willy Tarreau74ca5042013-06-11 23:12:07 +020013386src_http_err_rate([<table>]) : integer
13387 Returns the average rate of HTTP errors from the incoming connection's source
13388 address in the current proxy's stick-table or in the designated stick-table,
13389 measured in amount of errors over the period configured in the table. This
13390 includes the both request errors and 4xx error responses. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013391 not found, zero is returned. See also sc/sc0/sc1/sc2_http_err_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013392
Willy Tarreau74ca5042013-06-11 23:12:07 +020013393src_http_req_cnt([<table>]) : integer
13394 Returns the cumulated number of HTTP requests from the incoming connection's
13395 source address in the current proxy's stick-table or in the designated stick-
13396 table. This includes every started request, valid or not. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013397 not found, zero is returned. See also sc/sc0/sc1/sc2_http_req_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013398
Willy Tarreau74ca5042013-06-11 23:12:07 +020013399src_http_req_rate([<table>]) : integer
13400 Returns the average rate of HTTP requests from the incoming connection's
13401 source address in the current proxy's stick-table or in the designated stick-
13402 table, measured in amount of requests over the period configured in the
Willy Tarreauc9705a12010-07-27 20:05:50 +020013403 table. This includes every started request, valid or not. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013404 not found, zero is returned. See also sc/sc0/sc1/sc2_http_req_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013405
Willy Tarreau74ca5042013-06-11 23:12:07 +020013406src_inc_gpc0([<table>]) : integer
13407 Increments the first General Purpose Counter associated to the incoming
13408 connection's source address in the current proxy's stick-table or in the
13409 designated stick-table, and returns its new value. If the address is not
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020013410 found, an entry is created and 1 is returned. See also sc0/sc2/sc2_inc_gpc0.
Willy Tarreau74ca5042013-06-11 23:12:07 +020013411 This is typically used as a second ACL in an expression in order to mark a
13412 connection when a first ACL was verified :
Willy Tarreauc9705a12010-07-27 20:05:50 +020013413
13414 acl abuse src_http_req_rate gt 10
Willy Tarreau869948b2013-01-04 14:14:57 +010013415 acl kill src_inc_gpc0 gt 0
Willy Tarreaue9656522010-08-17 15:40:09 +020013416 tcp-request connection reject if abuse kill
Willy Tarreauc9705a12010-07-27 20:05:50 +020013417
Willy Tarreau16e01562016-08-09 16:46:18 +020013418src_is_local : boolean
13419 Returns true if the source address of the incoming connection is local to the
13420 system, or false if the address doesn't exist on the system, meaning that it
13421 comes from a remote machine. Note that UNIX addresses are considered local.
13422 It can be useful to apply certain access restrictions based on where the
13423 client comes from (eg: require auth or https for remote machines). Please
13424 note that the check involves a few system calls, so it's better to do it only
13425 once per connection.
13426
Willy Tarreau74ca5042013-06-11 23:12:07 +020013427src_kbytes_in([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020013428 Returns the total amount of data received from the incoming connection's
13429 source address in the current proxy's stick-table or in the designated
13430 stick-table, measured in kilobytes. If the address is not found, zero is
13431 returned. The test is currently performed on 32-bit integers, which limits
13432 values to 4 terabytes. See also sc/sc0/sc1/sc2_kbytes_in.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013433
Willy Tarreau74ca5042013-06-11 23:12:07 +020013434src_kbytes_out([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020013435 Returns the total amount of data sent to the incoming connection's source
13436 address in the current proxy's stick-table or in the designated stick-table,
13437 measured in kilobytes. If the address is not found, zero is returned. The
13438 test is currently performed on 32-bit integers, which limits values to 4
13439 terabytes. See also sc/sc0/sc1/sc2_kbytes_out.
Willy Tarreaua975b8f2010-06-05 19:13:27 +020013440
Willy Tarreau74ca5042013-06-11 23:12:07 +020013441src_port : integer
13442 Returns an integer value corresponding to the TCP source port of the
13443 connection on the client side, which is the port the client connected from.
13444 Usage of this function is very limited as modern protocols do not care much
13445 about source ports nowadays.
Willy Tarreau079ff0a2009-03-05 21:34:28 +010013446
Willy Tarreau74ca5042013-06-11 23:12:07 +020013447src_sess_cnt([<table>]) : integer
13448 Returns the cumulated number of connections initiated from the incoming
Willy Tarreauc9705a12010-07-27 20:05:50 +020013449 connection's source IPv4 address in the current proxy's stick-table or in the
13450 designated stick-table, that were transformed into sessions, which means that
13451 they were accepted by "tcp-request" rules. If the address is not found, zero
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013452 is returned. See also sc/sc0/sc1/sc2_sess_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013453
Willy Tarreau74ca5042013-06-11 23:12:07 +020013454src_sess_rate([<table>]) : integer
13455 Returns the average session rate from the incoming connection's source
13456 address in the current proxy's stick-table or in the designated stick-table,
13457 measured in amount of sessions over the period configured in the table. A
13458 session is a connection that went past the early "tcp-request" rules. If the
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013459 address is not found, zero is returned. See also sc/sc0/sc1/sc2_sess_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013460
Willy Tarreau74ca5042013-06-11 23:12:07 +020013461src_updt_conn_cnt([<table>]) : integer
13462 Creates or updates the entry associated to the incoming connection's source
13463 address in the current proxy's stick-table or in the designated stick-table.
13464 This table must be configured to store the "conn_cnt" data type, otherwise
13465 the match will be ignored. The current count is incremented by one, and the
13466 expiration timer refreshed. The updated count is returned, so this match
13467 can't return zero. This was used to reject service abusers based on their
13468 source address. Note: it is recommended to use the more complete "track-sc*"
13469 actions in "tcp-request" rules instead.
Willy Tarreaua975b8f2010-06-05 19:13:27 +020013470
13471 Example :
13472 # This frontend limits incoming SSH connections to 3 per 10 second for
13473 # each source address, and rejects excess connections until a 10 second
13474 # silence is observed. At most 20 addresses are tracked.
13475 listen ssh
13476 bind :22
13477 mode tcp
13478 maxconn 100
Willy Tarreauc9705a12010-07-27 20:05:50 +020013479 stick-table type ip size 20 expire 10s store conn_cnt
Willy Tarreau74ca5042013-06-11 23:12:07 +020013480 tcp-request content reject if { src_updt_conn_cnt gt 3 }
Willy Tarreaua975b8f2010-06-05 19:13:27 +020013481 server local 127.0.0.1:22
13482
Willy Tarreau74ca5042013-06-11 23:12:07 +020013483srv_id : integer
13484 Returns an integer containing the server's id when processing the response.
13485 While it's almost only used with ACLs, it may be used for logging or
13486 debugging.
Hervé COMMOWICKdaa824e2011-08-05 12:09:44 +020013487
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200134887.3.4. Fetching samples at Layer 5
Willy Tarreau74ca5042013-06-11 23:12:07 +020013489----------------------------------
Willy Tarreau0b1cd942010-05-16 22:18:27 +020013490
Willy Tarreau74ca5042013-06-11 23:12:07 +020013491The layer 5 usually describes just the session layer which in haproxy is
13492closest to the session once all the connection handshakes are finished, but
13493when no content is yet made available. The fetch methods described here are
13494usable as low as the "tcp-request content" rule sets unless they require some
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013495future information. Those generally include the results of SSL negotiations.
Willy Tarreauc735a072011-03-29 00:57:02 +020013496
Emeric Brun645ae792014-04-30 14:21:06 +020013497ssl_bc : boolean
13498 Returns true when the back connection was made via an SSL/TLS transport
13499 layer and is locally deciphered. This means the outgoing connection was made
13500 other a server with the "ssl" option.
13501
13502ssl_bc_alg_keysize : integer
13503 Returns the symmetric cipher key size supported in bits when the outgoing
13504 connection was made over an SSL/TLS transport layer.
13505
13506ssl_bc_cipher : string
13507 Returns the name of the used cipher when the outgoing connection was made
13508 over an SSL/TLS transport layer.
13509
13510ssl_bc_protocol : string
13511 Returns the name of the used protocol when the outgoing connection was made
13512 over an SSL/TLS transport layer.
13513
Emeric Brunb73a9b02014-04-30 18:49:19 +020013514ssl_bc_unique_id : binary
Emeric Brun645ae792014-04-30 14:21:06 +020013515 When the outgoing connection was made over an SSL/TLS transport layer,
Emeric Brunb73a9b02014-04-30 18:49:19 +020013516 returns the TLS unique ID as defined in RFC5929 section 3. The unique id
13517 can be encoded to base64 using the converter: "ssl_bc_unique_id,base64".
Emeric Brun645ae792014-04-30 14:21:06 +020013518
13519ssl_bc_session_id : binary
13520 Returns the SSL ID of the back connection when the outgoing connection was
13521 made over an SSL/TLS transport layer. It is useful to log if we want to know
13522 if session was reused or not.
13523
13524ssl_bc_use_keysize : integer
13525 Returns the symmetric cipher key size used in bits when the outgoing
13526 connection was made over an SSL/TLS transport layer.
13527
Willy Tarreau74ca5042013-06-11 23:12:07 +020013528ssl_c_ca_err : integer
13529 When the incoming connection was made over an SSL/TLS transport layer,
13530 returns the ID of the first error detected during verification of the client
13531 certificate at depth > 0, or 0 if no error was encountered during this
13532 verification process. Please refer to your SSL library's documentation to
13533 find the exhaustive list of error codes.
Willy Tarreauc735a072011-03-29 00:57:02 +020013534
Willy Tarreau74ca5042013-06-11 23:12:07 +020013535ssl_c_ca_err_depth : integer
13536 When the incoming connection was made over an SSL/TLS transport layer,
13537 returns the depth in the CA chain of the first error detected during the
13538 verification of the client certificate. If no error is encountered, 0 is
13539 returned.
Willy Tarreau0ba27502007-12-24 16:55:16 +010013540
Emeric Brun43e79582014-10-29 19:03:26 +010013541ssl_c_der : binary
13542 Returns the DER formatted certificate presented by the client when the
13543 incoming connection was made over an SSL/TLS transport layer. When used for
13544 an ACL, the value(s) to match against can be passed in hexadecimal form.
13545
Willy Tarreau74ca5042013-06-11 23:12:07 +020013546ssl_c_err : integer
13547 When the incoming connection was made over an SSL/TLS transport layer,
13548 returns the ID of the first error detected during verification at depth 0, or
13549 0 if no error was encountered during this verification process. Please refer
13550 to your SSL library's documentation to find the exhaustive list of error
13551 codes.
Willy Tarreau62644772008-07-16 18:36:06 +020013552
Willy Tarreau74ca5042013-06-11 23:12:07 +020013553ssl_c_i_dn([<entry>[,<occ>]]) : string
13554 When the incoming connection was made over an SSL/TLS transport layer,
13555 returns the full distinguished name of the issuer of the certificate
13556 presented by the client when no <entry> is specified, or the value of the
13557 first given entry found from the beginning of the DN. If a positive/negative
13558 occurrence number is specified as the optional second argument, it returns
13559 the value of the nth given entry value from the beginning/end of the DN.
13560 For instance, "ssl_c_i_dn(OU,2)" the second organization unit, and
13561 "ssl_c_i_dn(CN)" retrieves the common name.
Willy Tarreau62644772008-07-16 18:36:06 +020013562
Willy Tarreau74ca5042013-06-11 23:12:07 +020013563ssl_c_key_alg : string
13564 Returns the name of the algorithm used to generate the key of the certificate
13565 presented by the client when the incoming connection was made over an SSL/TLS
13566 transport layer.
Willy Tarreau62644772008-07-16 18:36:06 +020013567
Willy Tarreau74ca5042013-06-11 23:12:07 +020013568ssl_c_notafter : string
13569 Returns the end date presented by the client as a formatted string
13570 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
13571 transport layer.
Emeric Brunbede3d02009-06-30 17:54:00 +020013572
Willy Tarreau74ca5042013-06-11 23:12:07 +020013573ssl_c_notbefore : string
13574 Returns the start date presented by the client as a formatted string
13575 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
13576 transport layer.
Willy Tarreaub6672b52011-12-12 17:23:41 +010013577
Willy Tarreau74ca5042013-06-11 23:12:07 +020013578ssl_c_s_dn([<entry>[,<occ>]]) : string
13579 When the incoming connection was made over an SSL/TLS transport layer,
13580 returns the full distinguished name of the subject of the certificate
13581 presented by the client when no <entry> is specified, or the value of the
13582 first given entry found from the beginning of the DN. If a positive/negative
13583 occurrence number is specified as the optional second argument, it returns
13584 the value of the nth given entry value from the beginning/end of the DN.
13585 For instance, "ssl_c_s_dn(OU,2)" the second organization unit, and
13586 "ssl_c_s_dn(CN)" retrieves the common name.
Willy Tarreaub6672b52011-12-12 17:23:41 +010013587
Willy Tarreau74ca5042013-06-11 23:12:07 +020013588ssl_c_serial : binary
13589 Returns the serial of the certificate presented by the client when the
13590 incoming connection was made over an SSL/TLS transport layer. When used for
13591 an ACL, the value(s) to match against can be passed in hexadecimal form.
Emeric Brun2525b6b2012-10-18 15:59:43 +020013592
Willy Tarreau74ca5042013-06-11 23:12:07 +020013593ssl_c_sha1 : binary
13594 Returns the SHA-1 fingerprint of the certificate presented by the client when
13595 the incoming connection was made over an SSL/TLS transport layer. This can be
13596 used to stick a client to a server, or to pass this information to a server.
Willy Tarreau2d0caa32014-07-02 19:01:22 +020013597 Note that the output is binary, so if you want to pass that signature to the
13598 server, you need to encode it in hex or base64, such as in the example below:
13599
13600 http-request set-header X-SSL-Client-SHA1 %[ssl_c_sha1,hex]
Emeric Brun2525b6b2012-10-18 15:59:43 +020013601
Willy Tarreau74ca5042013-06-11 23:12:07 +020013602ssl_c_sig_alg : string
13603 Returns the name of the algorithm used to sign the certificate presented by
13604 the client when the incoming connection was made over an SSL/TLS transport
13605 layer.
Emeric Brun87855892012-10-17 17:39:35 +020013606
Willy Tarreau74ca5042013-06-11 23:12:07 +020013607ssl_c_used : boolean
13608 Returns true if current SSL session uses a client certificate even if current
13609 connection uses SSL session resumption. See also "ssl_fc_has_crt".
Emeric Brun7f56e742012-10-19 18:15:40 +020013610
Willy Tarreau74ca5042013-06-11 23:12:07 +020013611ssl_c_verify : integer
13612 Returns the verify result error ID when the incoming connection was made over
13613 an SSL/TLS transport layer, otherwise zero if no error is encountered. Please
13614 refer to your SSL library's documentation for an exhaustive list of error
13615 codes.
Emeric Brunce5ad802012-10-22 14:11:22 +020013616
Willy Tarreau74ca5042013-06-11 23:12:07 +020013617ssl_c_version : integer
13618 Returns the version of the certificate presented by the client when the
13619 incoming connection was made over an SSL/TLS transport layer.
Emeric Brunce5ad802012-10-22 14:11:22 +020013620
Emeric Brun43e79582014-10-29 19:03:26 +010013621ssl_f_der : binary
13622 Returns the DER formatted certificate presented by the frontend when the
13623 incoming connection was made over an SSL/TLS transport layer. When used for
13624 an ACL, the value(s) to match against can be passed in hexadecimal form.
13625
Willy Tarreau74ca5042013-06-11 23:12:07 +020013626ssl_f_i_dn([<entry>[,<occ>]]) : string
13627 When the incoming connection was made over an SSL/TLS transport layer,
13628 returns the full distinguished name of the issuer of the certificate
13629 presented by the frontend when no <entry> is specified, or the value of the
13630 first given entry found from the beginning of the DN. If a positive/negative
Emeric Brun87855892012-10-17 17:39:35 +020013631 occurrence number is specified as the optional second argument, it returns
Willy Tarreau74ca5042013-06-11 23:12:07 +020013632 the value of the nth given entry value from the beginning/end of the DN.
13633 For instance, "ssl_f_i_dn(OU,2)" the second organization unit, and
13634 "ssl_f_i_dn(CN)" retrieves the common name.
Emeric Brun87855892012-10-17 17:39:35 +020013635
Willy Tarreau74ca5042013-06-11 23:12:07 +020013636ssl_f_key_alg : string
13637 Returns the name of the algorithm used to generate the key of the certificate
13638 presented by the frontend when the incoming connection was made over an
13639 SSL/TLS transport layer.
Emeric Brun7f56e742012-10-19 18:15:40 +020013640
Willy Tarreau74ca5042013-06-11 23:12:07 +020013641ssl_f_notafter : string
13642 Returns the end date presented by the frontend as a formatted string
13643 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
13644 transport layer.
Emeric Brun2525b6b2012-10-18 15:59:43 +020013645
Willy Tarreau74ca5042013-06-11 23:12:07 +020013646ssl_f_notbefore : string
13647 Returns the start date presented by the frontend as a formatted string
13648 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
13649 transport layer.
Emeric Brun87855892012-10-17 17:39:35 +020013650
Willy Tarreau74ca5042013-06-11 23:12:07 +020013651ssl_f_s_dn([<entry>[,<occ>]]) : string
13652 When the incoming connection was made over an SSL/TLS transport layer,
13653 returns the full distinguished name of the subject of the certificate
13654 presented by the frontend when no <entry> is specified, or the value of the
13655 first given entry found from the beginning of the DN. If a positive/negative
13656 occurrence number is specified as the optional second argument, it returns
13657 the value of the nth given entry value from the beginning/end of the DN.
13658 For instance, "ssl_f_s_dn(OU,2)" the second organization unit, and
13659 "ssl_f_s_dn(CN)" retrieves the common name.
Emeric Brunce5ad802012-10-22 14:11:22 +020013660
Willy Tarreau74ca5042013-06-11 23:12:07 +020013661ssl_f_serial : binary
13662 Returns the serial of the certificate presented by the frontend when the
13663 incoming connection was made over an SSL/TLS transport layer. When used for
13664 an ACL, the value(s) to match against can be passed in hexadecimal form.
Emeric Brun87855892012-10-17 17:39:35 +020013665
Emeric Brun55f4fa82014-04-30 17:11:25 +020013666ssl_f_sha1 : binary
13667 Returns the SHA-1 fingerprint of the certificate presented by the frontend
13668 when the incoming connection was made over an SSL/TLS transport layer. This
13669 can be used to know which certificate was chosen using SNI.
13670
Willy Tarreau74ca5042013-06-11 23:12:07 +020013671ssl_f_sig_alg : string
13672 Returns the name of the algorithm used to sign the certificate presented by
13673 the frontend when the incoming connection was made over an SSL/TLS transport
13674 layer.
Emeric Brun7f56e742012-10-19 18:15:40 +020013675
Willy Tarreau74ca5042013-06-11 23:12:07 +020013676ssl_f_version : integer
13677 Returns the version of the certificate presented by the frontend when the
13678 incoming connection was made over an SSL/TLS transport layer.
13679
13680ssl_fc : boolean
Emeric Brun2525b6b2012-10-18 15:59:43 +020013681 Returns true when the front connection was made via an SSL/TLS transport
13682 layer and is locally deciphered. This means it has matched a socket declared
13683 with a "bind" line having the "ssl" option.
13684
Willy Tarreau74ca5042013-06-11 23:12:07 +020013685 Example :
13686 # This passes "X-Proto: https" to servers when client connects over SSL
13687 listen http-https
13688 bind :80
13689 bind :443 ssl crt /etc/haproxy.pem
13690 http-request add-header X-Proto https if { ssl_fc }
13691
13692ssl_fc_alg_keysize : integer
13693 Returns the symmetric cipher key size supported in bits when the incoming
13694 connection was made over an SSL/TLS transport layer.
13695
13696ssl_fc_alpn : string
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013697 This extracts the Application Layer Protocol Negotiation field from an
Willy Tarreau74ca5042013-06-11 23:12:07 +020013698 incoming connection made via a TLS transport layer and locally deciphered by
13699 haproxy. The result is a string containing the protocol name advertised by
13700 the client. The SSL library must have been built with support for TLS
13701 extensions enabled (check haproxy -vv). Note that the TLS ALPN extension is
13702 not advertised unless the "alpn" keyword on the "bind" line specifies a
13703 protocol list. Also, nothing forces the client to pick a protocol from this
13704 list, any other one may be requested. The TLS ALPN extension is meant to
13705 replace the TLS NPN extension. See also "ssl_fc_npn".
13706
Willy Tarreau74ca5042013-06-11 23:12:07 +020013707ssl_fc_cipher : string
13708 Returns the name of the used cipher when the incoming connection was made
13709 over an SSL/TLS transport layer.
Willy Tarreauab861d32013-04-02 02:30:41 +020013710
Willy Tarreau74ca5042013-06-11 23:12:07 +020013711ssl_fc_has_crt : boolean
Emeric Brun2525b6b2012-10-18 15:59:43 +020013712 Returns true if a client certificate is present in an incoming connection over
13713 SSL/TLS transport layer. Useful if 'verify' statement is set to 'optional'.
Emeric Brun9143d372012-12-20 15:44:16 +010013714 Note: on SSL session resumption with Session ID or TLS ticket, client
13715 certificate is not present in the current connection but may be retrieved
13716 from the cache or the ticket. So prefer "ssl_c_used" if you want to check if
13717 current SSL session uses a client certificate.
Emeric Brun2525b6b2012-10-18 15:59:43 +020013718
Willy Tarreau74ca5042013-06-11 23:12:07 +020013719ssl_fc_has_sni : boolean
13720 This checks for the presence of a Server Name Indication TLS extension (SNI)
Willy Tarreauf7bc57c2012-10-03 00:19:48 +020013721 in an incoming connection was made over an SSL/TLS transport layer. Returns
13722 true when the incoming connection presents a TLS SNI field. This requires
13723 that the SSL library is build with support for TLS extensions enabled (check
13724 haproxy -vv).
Willy Tarreau7875d092012-09-10 08:20:03 +020013725
Nenad Merdanovic1516fe32016-05-17 03:31:21 +020013726ssl_fc_is_resumed : boolean
Nenad Merdanovic26ea8222015-05-18 02:28:57 +020013727 Returns true if the SSL/TLS session has been resumed through the use of
13728 SSL session cache or TLS tickets.
13729
Willy Tarreau74ca5042013-06-11 23:12:07 +020013730ssl_fc_npn : string
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013731 This extracts the Next Protocol Negotiation field from an incoming connection
Willy Tarreau74ca5042013-06-11 23:12:07 +020013732 made via a TLS transport layer and locally deciphered by haproxy. The result
13733 is a string containing the protocol name advertised by the client. The SSL
13734 library must have been built with support for TLS extensions enabled (check
13735 haproxy -vv). Note that the TLS NPN extension is not advertised unless the
13736 "npn" keyword on the "bind" line specifies a protocol list. Also, nothing
13737 forces the client to pick a protocol from this list, any other one may be
13738 requested. Please note that the TLS NPN extension was replaced with ALPN.
Willy Tarreaua33c6542012-10-15 13:19:06 +020013739
Willy Tarreau74ca5042013-06-11 23:12:07 +020013740ssl_fc_protocol : string
13741 Returns the name of the used protocol when the incoming connection was made
13742 over an SSL/TLS transport layer.
Willy Tarreau7875d092012-09-10 08:20:03 +020013743
Emeric Brunb73a9b02014-04-30 18:49:19 +020013744ssl_fc_unique_id : binary
David Sc1ad52e2014-04-08 18:48:47 -040013745 When the incoming connection was made over an SSL/TLS transport layer,
Emeric Brunb73a9b02014-04-30 18:49:19 +020013746 returns the TLS unique ID as defined in RFC5929 section 3. The unique id
13747 can be encoded to base64 using the converter: "ssl_bc_unique_id,base64".
David Sc1ad52e2014-04-08 18:48:47 -040013748
Willy Tarreau74ca5042013-06-11 23:12:07 +020013749ssl_fc_session_id : binary
13750 Returns the SSL ID of the front connection when the incoming connection was
13751 made over an SSL/TLS transport layer. It is useful to stick a given client to
13752 a server. It is important to note that some browsers refresh their session ID
13753 every few minutes.
Willy Tarreau7875d092012-09-10 08:20:03 +020013754
Willy Tarreau74ca5042013-06-11 23:12:07 +020013755ssl_fc_sni : string
13756 This extracts the Server Name Indication TLS extension (SNI) field from an
13757 incoming connection made via an SSL/TLS transport layer and locally
13758 deciphered by haproxy. The result (when present) typically is a string
13759 matching the HTTPS host name (253 chars or less). The SSL library must have
13760 been built with support for TLS extensions enabled (check haproxy -vv).
13761
13762 This fetch is different from "req_ssl_sni" above in that it applies to the
13763 connection being deciphered by haproxy and not to SSL contents being blindly
13764 forwarded. See also "ssl_fc_sni_end" and "ssl_fc_sni_reg" below. This
Cyril Bonté9c1eb1e2012-10-09 22:45:34 +020013765 requires that the SSL library is build with support for TLS extensions
13766 enabled (check haproxy -vv).
Willy Tarreau62644772008-07-16 18:36:06 +020013767
Willy Tarreau74ca5042013-06-11 23:12:07 +020013768 ACL derivatives :
Willy Tarreau74ca5042013-06-11 23:12:07 +020013769 ssl_fc_sni_end : suffix match
13770 ssl_fc_sni_reg : regex match
Emeric Brun589fcad2012-10-16 14:13:26 +020013771
Willy Tarreau74ca5042013-06-11 23:12:07 +020013772ssl_fc_use_keysize : integer
13773 Returns the symmetric cipher key size used in bits when the incoming
13774 connection was made over an SSL/TLS transport layer.
Willy Tarreaub6fb4202008-07-20 11:18:28 +020013775
Willy Tarreaub6fb4202008-07-20 11:18:28 +020013776
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200137777.3.5. Fetching samples from buffer contents (Layer 6)
Willy Tarreau74ca5042013-06-11 23:12:07 +020013778------------------------------------------------------
Willy Tarreaub6fb4202008-07-20 11:18:28 +020013779
Willy Tarreau74ca5042013-06-11 23:12:07 +020013780Fetching samples from buffer contents is a bit different from the previous
13781sample fetches above because the sampled data are ephemeral. These data can
13782only be used when they're available and will be lost when they're forwarded.
13783For this reason, samples fetched from buffer contents during a request cannot
13784be used in a response for example. Even while the data are being fetched, they
13785can change. Sometimes it is necessary to set some delays or combine multiple
13786sample fetch methods to ensure that the expected data are complete and usable,
13787for example through TCP request content inspection. Please see the "tcp-request
13788content" keyword for more detailed information on the subject.
Willy Tarreau62644772008-07-16 18:36:06 +020013789
Willy Tarreau74ca5042013-06-11 23:12:07 +020013790payload(<offset>,<length>) : binary (deprecated)
13791 This is an alias for "req.payload" when used in the context of a request (eg:
13792 "stick on", "stick match"), and for "res.payload" when used in the context of
13793 a response such as in "stick store response".
Willy Tarreau0ba27502007-12-24 16:55:16 +010013794
Willy Tarreau74ca5042013-06-11 23:12:07 +020013795payload_lv(<offset1>,<length>[,<offset2>]) : binary (deprecated)
13796 This is an alias for "req.payload_lv" when used in the context of a request
13797 (eg: "stick on", "stick match"), and for "res.payload_lv" when used in the
13798 context of a response such as in "stick store response".
Willy Tarreau0ba27502007-12-24 16:55:16 +010013799
Willy Tarreau74ca5042013-06-11 23:12:07 +020013800req.len : integer
13801req_len : integer (deprecated)
13802 Returns an integer value corresponding to the number of bytes present in the
13803 request buffer. This is mostly used in ACL. It is important to understand
13804 that this test does not return false as long as the buffer is changing. This
13805 means that a check with equality to zero will almost always immediately match
13806 at the beginning of the session, while a test for more data will wait for
13807 that data to come in and return false only when haproxy is certain that no
13808 more data will come in. This test was designed to be used with TCP request
13809 content inspection.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020013810
Willy Tarreau74ca5042013-06-11 23:12:07 +020013811req.payload(<offset>,<length>) : binary
13812 This extracts a binary block of <length> bytes and starting at byte <offset>
Willy Tarreau00f00842013-08-02 11:07:32 +020013813 in the request buffer. As a special case, if the <length> argument is zero,
13814 the the whole buffer from <offset> to the end is extracted. This can be used
13815 with ACLs in order to check for the presence of some content in a buffer at
13816 any location.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020013817
Willy Tarreau74ca5042013-06-11 23:12:07 +020013818 ACL alternatives :
13819 payload(<offset>,<length>) : hex binary match
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020013820
Willy Tarreau74ca5042013-06-11 23:12:07 +020013821req.payload_lv(<offset1>,<length>[,<offset2>]) : binary
13822 This extracts a binary block whose size is specified at <offset1> for <length>
13823 bytes, and which starts at <offset2> if specified or just after the length in
13824 the request buffer. The <offset2> parameter also supports relative offsets if
13825 prepended with a '+' or '-' sign.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020013826
Willy Tarreau74ca5042013-06-11 23:12:07 +020013827 ACL alternatives :
13828 payload_lv(<offset1>,<length>[,<offset2>]) : hex binary match
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020013829
Willy Tarreau74ca5042013-06-11 23:12:07 +020013830 Example : please consult the example from the "stick store-response" keyword.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020013831
Willy Tarreau74ca5042013-06-11 23:12:07 +020013832req.proto_http : boolean
13833req_proto_http : boolean (deprecated)
13834 Returns true when data in the request buffer look like HTTP and correctly
13835 parses as such. It is the same parser as the common HTTP request parser which
13836 is used so there should be no surprises. The test does not match until the
13837 request is complete, failed or timed out. This test may be used to report the
13838 protocol in TCP logs, but the biggest use is to block TCP request analysis
13839 until a complete HTTP request is present in the buffer, for example to track
13840 a header.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020013841
Willy Tarreau74ca5042013-06-11 23:12:07 +020013842 Example:
13843 # track request counts per "base" (concatenation of Host+URL)
13844 tcp-request inspect-delay 10s
13845 tcp-request content reject if !HTTP
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020013846 tcp-request content track-sc0 base table req-rate
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020013847
Willy Tarreau74ca5042013-06-11 23:12:07 +020013848req.rdp_cookie([<name>]) : string
13849rdp_cookie([<name>]) : string (deprecated)
13850 When the request buffer looks like the RDP protocol, extracts the RDP cookie
13851 <name>, or any cookie if unspecified. The parser only checks for the first
13852 cookie, as illustrated in the RDP protocol specification. The cookie name is
13853 case insensitive. Generally the "MSTS" cookie name will be used, as it can
13854 contain the user name of the client connecting to the server if properly
13855 configured on the client. The "MSTSHASH" cookie is often used as well for
13856 session stickiness to servers.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020013857
Willy Tarreau74ca5042013-06-11 23:12:07 +020013858 This differs from "balance rdp-cookie" in that any balancing algorithm may be
13859 used and thus the distribution of clients to backend servers is not linked to
13860 a hash of the RDP cookie. It is envisaged that using a balancing algorithm
13861 such as "balance roundrobin" or "balance leastconn" will lead to a more even
13862 distribution of clients to backend servers than the hash used by "balance
13863 rdp-cookie".
Willy Tarreau04aa6a92012-04-06 18:57:55 +020013864
Willy Tarreau74ca5042013-06-11 23:12:07 +020013865 ACL derivatives :
13866 req_rdp_cookie([<name>]) : exact string match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020013867
Willy Tarreau74ca5042013-06-11 23:12:07 +020013868 Example :
13869 listen tse-farm
13870 bind 0.0.0.0:3389
13871 # wait up to 5s for an RDP cookie in the request
13872 tcp-request inspect-delay 5s
13873 tcp-request content accept if RDP_COOKIE
13874 # apply RDP cookie persistence
13875 persist rdp-cookie
13876 # Persist based on the mstshash cookie
13877 # This is only useful makes sense if
13878 # balance rdp-cookie is not used
13879 stick-table type string size 204800
13880 stick on req.rdp_cookie(mstshash)
13881 server srv1 1.1.1.1:3389
13882 server srv1 1.1.1.2:3389
Willy Tarreau04aa6a92012-04-06 18:57:55 +020013883
Willy Tarreau74ca5042013-06-11 23:12:07 +020013884 See also : "balance rdp-cookie", "persist rdp-cookie", "tcp-request" and the
13885 "req_rdp_cookie" ACL.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020013886
Willy Tarreau74ca5042013-06-11 23:12:07 +020013887req.rdp_cookie_cnt([name]) : integer
13888rdp_cookie_cnt([name]) : integer (deprecated)
13889 Tries to parse the request buffer as RDP protocol, then returns an integer
13890 corresponding to the number of RDP cookies found. If an optional cookie name
13891 is passed, only cookies matching this name are considered. This is mostly
13892 used in ACL.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020013893
Willy Tarreau74ca5042013-06-11 23:12:07 +020013894 ACL derivatives :
13895 req_rdp_cookie_cnt([<name>]) : integer match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020013896
Nenad Merdanovic5fc7d7e2015-07-07 22:00:17 +020013897req.ssl_ec_ext : boolean
13898 Returns a boolean identifying if client sent the Supported Elliptic Curves
13899 Extension as defined in RFC4492, section 5.1. within the SSL ClientHello
Cyril Bonté307ee1e2015-09-28 23:16:06 +020013900 message. This can be used to present ECC compatible clients with EC
13901 certificate and to use RSA for all others, on the same IP address. Note that
13902 this only applies to raw contents found in the request buffer and not to
13903 contents deciphered via an SSL data layer, so this will not work with "bind"
13904 lines having the "ssl" option.
Nenad Merdanovic5fc7d7e2015-07-07 22:00:17 +020013905
Willy Tarreau74ca5042013-06-11 23:12:07 +020013906req.ssl_hello_type : integer
13907req_ssl_hello_type : integer (deprecated)
13908 Returns an integer value containing the type of the SSL hello message found
13909 in the request buffer if the buffer contains data that parse as a complete
13910 SSL (v3 or superior) client hello message. Note that this only applies to raw
13911 contents found in the request buffer and not to contents deciphered via an
13912 SSL data layer, so this will not work with "bind" lines having the "ssl"
13913 option. This is mostly used in ACL to detect presence of an SSL hello message
13914 that is supposed to contain an SSL session ID usable for stickiness.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020013915
Willy Tarreau74ca5042013-06-11 23:12:07 +020013916req.ssl_sni : string
13917req_ssl_sni : string (deprecated)
13918 Returns a string containing the value of the Server Name TLS extension sent
13919 by a client in a TLS stream passing through the request buffer if the buffer
13920 contains data that parse as a complete SSL (v3 or superior) client hello
13921 message. Note that this only applies to raw contents found in the request
13922 buffer and not to contents deciphered via an SSL data layer, so this will not
13923 work with "bind" lines having the "ssl" option. SNI normally contains the
13924 name of the host the client tries to connect to (for recent browsers). SNI is
13925 useful for allowing or denying access to certain hosts when SSL/TLS is used
13926 by the client. This test was designed to be used with TCP request content
13927 inspection. If content switching is needed, it is recommended to first wait
13928 for a complete client hello (type 1), like in the example below. See also
13929 "ssl_fc_sni".
Willy Tarreau04aa6a92012-04-06 18:57:55 +020013930
Willy Tarreau74ca5042013-06-11 23:12:07 +020013931 ACL derivatives :
13932 req_ssl_sni : exact string match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020013933
Willy Tarreau74ca5042013-06-11 23:12:07 +020013934 Examples :
13935 # Wait for a client hello for at most 5 seconds
13936 tcp-request inspect-delay 5s
13937 tcp-request content accept if { req_ssl_hello_type 1 }
13938 use_backend bk_allow if { req_ssl_sni -f allowed_sites }
13939 default_backend bk_sorry_page
Willy Tarreau04aa6a92012-04-06 18:57:55 +020013940
Pradeep Jindalbb2acf52015-09-29 10:12:57 +053013941req.ssl_st_ext : integer
13942 Returns 0 if the client didn't send a SessionTicket TLS Extension (RFC5077)
13943 Returns 1 if the client sent SessionTicket TLS Extension
13944 Returns 2 if the client also sent non-zero length TLS SessionTicket
13945 Note that this only applies to raw contents found in the request buffer and
13946 not to contents deciphered via an SSL data layer, so this will not work with
13947 "bind" lines having the "ssl" option. This can for example be used to detect
13948 whether the client sent a SessionTicket or not and stick it accordingly, if
13949 no SessionTicket then stick on SessionID or don't stick as there's no server
13950 side state is there when SessionTickets are in use.
13951
Willy Tarreau74ca5042013-06-11 23:12:07 +020013952req.ssl_ver : integer
13953req_ssl_ver : integer (deprecated)
13954 Returns an integer value containing the version of the SSL/TLS protocol of a
13955 stream present in the request buffer. Both SSLv2 hello messages and SSLv3
13956 messages are supported. TLSv1 is announced as SSL version 3.1. The value is
13957 composed of the major version multiplied by 65536, added to the minor
13958 version. Note that this only applies to raw contents found in the request
13959 buffer and not to contents deciphered via an SSL data layer, so this will not
13960 work with "bind" lines having the "ssl" option. The ACL version of the test
13961 matches against a decimal notation in the form MAJOR.MINOR (eg: 3.1). This
13962 fetch is mostly used in ACL.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013963
Willy Tarreau74ca5042013-06-11 23:12:07 +020013964 ACL derivatives :
13965 req_ssl_ver : decimal match
Willy Tarreaud63335a2010-02-26 12:56:52 +010013966
Willy Tarreau47e8eba2013-09-11 23:28:46 +020013967res.len : integer
13968 Returns an integer value corresponding to the number of bytes present in the
13969 response buffer. This is mostly used in ACL. It is important to understand
13970 that this test does not return false as long as the buffer is changing. This
13971 means that a check with equality to zero will almost always immediately match
13972 at the beginning of the session, while a test for more data will wait for
13973 that data to come in and return false only when haproxy is certain that no
13974 more data will come in. This test was designed to be used with TCP response
13975 content inspection.
13976
Willy Tarreau74ca5042013-06-11 23:12:07 +020013977res.payload(<offset>,<length>) : binary
13978 This extracts a binary block of <length> bytes and starting at byte <offset>
Willy Tarreau00f00842013-08-02 11:07:32 +020013979 in the response buffer. As a special case, if the <length> argument is zero,
13980 the the whole buffer from <offset> to the end is extracted. This can be used
13981 with ACLs in order to check for the presence of some content in a buffer at
13982 any location.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013983
Willy Tarreau74ca5042013-06-11 23:12:07 +020013984res.payload_lv(<offset1>,<length>[,<offset2>]) : binary
13985 This extracts a binary block whose size is specified at <offset1> for <length>
13986 bytes, and which starts at <offset2> if specified or just after the length in
13987 the response buffer. The <offset2> parameter also supports relative offsets
13988 if prepended with a '+' or '-' sign.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013989
Willy Tarreau74ca5042013-06-11 23:12:07 +020013990 Example : please consult the example from the "stick store-response" keyword.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013991
Willy Tarreau971f7b62015-09-29 14:06:59 +020013992res.ssl_hello_type : integer
13993rep_ssl_hello_type : integer (deprecated)
13994 Returns an integer value containing the type of the SSL hello message found
13995 in the response buffer if the buffer contains data that parses as a complete
13996 SSL (v3 or superior) hello message. Note that this only applies to raw
13997 contents found in the response buffer and not to contents deciphered via an
13998 SSL data layer, so this will not work with "server" lines having the "ssl"
13999 option. This is mostly used in ACL to detect presence of an SSL hello message
14000 that is supposed to contain an SSL session ID usable for stickiness.
14001
Willy Tarreau74ca5042013-06-11 23:12:07 +020014002wait_end : boolean
14003 This fetch either returns true when the inspection period is over, or does
14004 not fetch. It is only used in ACLs, in conjunction with content analysis to
14005 avoid returning a wrong verdict early. It may also be used to delay some
14006 actions, such as a delayed reject for some special addresses. Since it either
14007 stops the rules evaluation or immediately returns true, it is recommended to
14008 use this acl as the last one in a rule. Please note that the default ACL
14009 "WAIT_END" is always usable without prior declaration. This test was designed
14010 to be used with TCP request content inspection.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014011
Willy Tarreau74ca5042013-06-11 23:12:07 +020014012 Examples :
14013 # delay every incoming request by 2 seconds
14014 tcp-request inspect-delay 2s
14015 tcp-request content accept if WAIT_END
Willy Tarreaud63335a2010-02-26 12:56:52 +010014016
Willy Tarreau74ca5042013-06-11 23:12:07 +020014017 # don't immediately tell bad guys they are rejected
14018 tcp-request inspect-delay 10s
14019 acl goodguys src 10.0.0.0/24
14020 acl badguys src 10.0.1.0/24
14021 tcp-request content accept if goodguys
14022 tcp-request content reject if badguys WAIT_END
14023 tcp-request content reject
14024
14025
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200140267.3.6. Fetching HTTP samples (Layer 7)
Willy Tarreau74ca5042013-06-11 23:12:07 +020014027--------------------------------------
14028
14029It is possible to fetch samples from HTTP contents, requests and responses.
14030This application layer is also called layer 7. It is only possible to fetch the
14031data in this section when a full HTTP request or response has been parsed from
14032its respective request or response buffer. This is always the case with all
14033HTTP specific rules and for sections running with "mode http". When using TCP
14034content inspection, it may be necessary to support an inspection delay in order
14035to let the request or response come in first. These fetches may require a bit
14036more CPU resources than the layer 4 ones, but not much since the request and
14037response are indexed.
14038
14039base : string
14040 This returns the concatenation of the first Host header and the path part of
14041 the request, which starts at the first slash and ends before the question
14042 mark. It can be useful in virtual hosted environments to detect URL abuses as
14043 well as to improve shared caches efficiency. Using this with a limited size
14044 stick table also allows one to collect statistics about most commonly
14045 requested objects by host/path. With ACLs it can allow simple content
14046 switching rules involving the host and the path at the same time, such as
14047 "www.example.com/favicon.ico". See also "path" and "uri".
14048
14049 ACL derivatives :
14050 base : exact string match
14051 base_beg : prefix match
14052 base_dir : subdir match
14053 base_dom : domain match
14054 base_end : suffix match
14055 base_len : length match
14056 base_reg : regex match
14057 base_sub : substring match
14058
14059base32 : integer
14060 This returns a 32-bit hash of the value returned by the "base" fetch method
14061 above. This is useful to track per-URL activity on high traffic sites without
14062 having to store all URLs. Instead a shorter hash is stored, saving a lot of
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020014063 memory. The output type is an unsigned integer. The hash function used is
14064 SDBM with full avalanche on the output. Technically, base32 is exactly equal
14065 to "base,sdbm(1)".
Willy Tarreau74ca5042013-06-11 23:12:07 +020014066
14067base32+src : binary
14068 This returns the concatenation of the base32 fetch above and the src fetch
14069 below. The resulting type is of type binary, with a size of 8 or 20 bytes
14070 depending on the source address family. This can be used to track per-IP,
14071 per-URL counters.
14072
William Lallemand65ad6e12014-01-31 15:08:02 +010014073capture.req.hdr(<idx>) : string
14074 This extracts the content of the header captured by the "capture request
14075 header", idx is the position of the capture keyword in the configuration.
14076 The first entry is an index of 0. See also: "capture request header".
14077
14078capture.req.method : string
14079 This extracts the METHOD of an HTTP request. It can be used in both request
14080 and response. Unlike "method", it can be used in both request and response
14081 because it's allocated.
14082
14083capture.req.uri : string
14084 This extracts the request's URI, which starts at the first slash and ends
14085 before the first space in the request (without the host part). Unlike "path"
14086 and "url", it can be used in both request and response because it's
14087 allocated.
14088
Willy Tarreau3c1b5ec2014-04-24 23:41:57 +020014089capture.req.ver : string
14090 This extracts the request's HTTP version and returns either "HTTP/1.0" or
14091 "HTTP/1.1". Unlike "req.ver", it can be used in both request, response, and
14092 logs because it relies on a persistent flag.
14093
William Lallemand65ad6e12014-01-31 15:08:02 +010014094capture.res.hdr(<idx>) : string
14095 This extracts the content of the header captured by the "capture response
14096 header", idx is the position of the capture keyword in the configuration.
14097 The first entry is an index of 0.
14098 See also: "capture response header"
14099
Willy Tarreau3c1b5ec2014-04-24 23:41:57 +020014100capture.res.ver : string
14101 This extracts the response's HTTP version and returns either "HTTP/1.0" or
14102 "HTTP/1.1". Unlike "res.ver", it can be used in logs because it relies on a
14103 persistent flag.
14104
Willy Tarreaua5910cc2015-05-02 00:46:08 +020014105req.body : binary
14106 This returns the HTTP request's available body as a block of data. It
14107 requires that the request body has been buffered made available using
14108 "option http-buffer-request". In case of chunked-encoded body, currently only
14109 the first chunk is analyzed.
14110
Thierry FOURNIER9826c772015-05-20 15:50:54 +020014111req.body_param([<name>) : string
14112 This fetch assumes that the body of the POST request is url-encoded. The user
14113 can check if the "content-type" contains the value
14114 "application/x-www-form-urlencoded". This extracts the first occurrence of the
14115 parameter <name> in the body, which ends before '&'. The parameter name is
14116 case-sensitive. If no name is given, any parameter will match, and the first
14117 one will be returned. The result is a string corresponding to the value of the
14118 parameter <name> as presented in the request body (no URL decoding is
14119 performed). Note that the ACL version of this fetch iterates over multiple
14120 parameters and will iteratively report all parameters values if no name is
14121 given.
14122
Willy Tarreaua5910cc2015-05-02 00:46:08 +020014123req.body_len : integer
14124 This returns the length of the HTTP request's available body in bytes. It may
14125 be lower than the advertised length if the body is larger than the buffer. It
14126 requires that the request body has been buffered made available using
14127 "option http-buffer-request".
14128
14129req.body_size : integer
14130 This returns the advertised length of the HTTP request's body in bytes. It
14131 will represent the advertised Content-Length header, or the size of the first
14132 chunk in case of chunked encoding. In order to parse the chunks, it requires
14133 that the request body has been buffered made available using
14134 "option http-buffer-request".
14135
Willy Tarreau74ca5042013-06-11 23:12:07 +020014136req.cook([<name>]) : string
14137cook([<name>]) : string (deprecated)
14138 This extracts the last occurrence of the cookie name <name> on a "Cookie"
14139 header line from the request, and returns its value as string. If no name is
14140 specified, the first cookie value is returned. When used with ACLs, all
14141 matching cookies are evaluated. Spaces around the name and the value are
14142 ignored as requested by the Cookie header specification (RFC6265). The cookie
14143 name is case-sensitive. Empty cookies are valid, so an empty cookie may very
14144 well return an empty value if it is present. Use the "found" match to detect
14145 presence. Use the res.cook() variant for response cookies sent by the server.
14146
14147 ACL derivatives :
14148 cook([<name>]) : exact string match
14149 cook_beg([<name>]) : prefix match
14150 cook_dir([<name>]) : subdir match
14151 cook_dom([<name>]) : domain match
14152 cook_end([<name>]) : suffix match
14153 cook_len([<name>]) : length match
14154 cook_reg([<name>]) : regex match
14155 cook_sub([<name>]) : substring match
Willy Tarreaud63335a2010-02-26 12:56:52 +010014156
Willy Tarreau74ca5042013-06-11 23:12:07 +020014157req.cook_cnt([<name>]) : integer
14158cook_cnt([<name>]) : integer (deprecated)
14159 Returns an integer value representing the number of occurrences of the cookie
14160 <name> in the request, or all cookies if <name> is not specified.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014161
Willy Tarreau74ca5042013-06-11 23:12:07 +020014162req.cook_val([<name>]) : integer
14163cook_val([<name>]) : integer (deprecated)
14164 This extracts the last occurrence of the cookie name <name> on a "Cookie"
14165 header line from the request, and converts its value to an integer which is
14166 returned. If no name is specified, the first cookie value is returned. When
14167 used in ACLs, all matching names are iterated over until a value matches.
Willy Tarreau0e698542011-09-16 08:32:32 +020014168
Willy Tarreau74ca5042013-06-11 23:12:07 +020014169cookie([<name>]) : string (deprecated)
14170 This extracts the last occurrence of the cookie name <name> on a "Cookie"
14171 header line from the request, or a "Set-Cookie" header from the response, and
14172 returns its value as a string. A typical use is to get multiple clients
14173 sharing a same profile use the same server. This can be similar to what
Willy Tarreau294d0f02015-08-10 19:40:12 +020014174 "appsession" did with the "request-learn" statement, but with support for
Willy Tarreau74ca5042013-06-11 23:12:07 +020014175 multi-peer synchronization and state keeping across restarts. If no name is
14176 specified, the first cookie value is returned. This fetch should not be used
14177 anymore and should be replaced by req.cook() or res.cook() instead as it
14178 ambiguously uses the direction based on the context where it is used.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014179
Willy Tarreau74ca5042013-06-11 23:12:07 +020014180hdr([<name>[,<occ>]]) : string
14181 This is equivalent to req.hdr() when used on requests, and to res.hdr() when
14182 used on responses. Please refer to these respective fetches for more details.
14183 In case of doubt about the fetch direction, please use the explicit ones.
14184 Note that contrary to the hdr() sample fetch method, the hdr_* ACL keywords
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030014185 unambiguously apply to the request headers.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014186
Willy Tarreau74ca5042013-06-11 23:12:07 +020014187req.fhdr(<name>[,<occ>]) : string
14188 This extracts the last occurrence of header <name> in an HTTP request. When
14189 used from an ACL, all occurrences are iterated over until a match is found.
14190 Optionally, a specific occurrence might be specified as a position number.
14191 Positive values indicate a position from the first occurrence, with 1 being
14192 the first one. Negative values indicate positions relative to the last one,
14193 with -1 being the last one. It differs from req.hdr() in that any commas
14194 present in the value are returned and are not used as delimiters. This is
14195 sometimes useful with headers such as User-Agent.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014196
Willy Tarreau74ca5042013-06-11 23:12:07 +020014197req.fhdr_cnt([<name>]) : integer
14198 Returns an integer value representing the number of occurrences of request
14199 header field name <name>, or the total number of header fields if <name> is
14200 not specified. Contrary to its req.hdr_cnt() cousin, this function returns
14201 the number of full line headers and does not stop on commas.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014202
Willy Tarreau74ca5042013-06-11 23:12:07 +020014203req.hdr([<name>[,<occ>]]) : string
14204 This extracts the last occurrence of header <name> in an HTTP request. When
14205 used from an ACL, all occurrences are iterated over until a match is found.
14206 Optionally, a specific occurrence might be specified as a position number.
14207 Positive values indicate a position from the first occurrence, with 1 being
14208 the first one. Negative values indicate positions relative to the last one,
14209 with -1 being the last one. A typical use is with the X-Forwarded-For header
14210 once converted to IP, associated with an IP stick-table. The function
14211 considers any comma as a delimiter for distinct values. If full-line headers
14212 are desired instead, use req.fhdr(). Please carefully check RFC2616 to know
14213 how certain headers are supposed to be parsed. Also, some of them are case
14214 insensitive (eg: Connection).
Willy Tarreaud63335a2010-02-26 12:56:52 +010014215
Willy Tarreau74ca5042013-06-11 23:12:07 +020014216 ACL derivatives :
14217 hdr([<name>[,<occ>]]) : exact string match
14218 hdr_beg([<name>[,<occ>]]) : prefix match
14219 hdr_dir([<name>[,<occ>]]) : subdir match
14220 hdr_dom([<name>[,<occ>]]) : domain match
14221 hdr_end([<name>[,<occ>]]) : suffix match
14222 hdr_len([<name>[,<occ>]]) : length match
14223 hdr_reg([<name>[,<occ>]]) : regex match
14224 hdr_sub([<name>[,<occ>]]) : substring match
14225
14226req.hdr_cnt([<name>]) : integer
14227hdr_cnt([<header>]) : integer (deprecated)
14228 Returns an integer value representing the number of occurrences of request
14229 header field name <name>, or the total number of header field values if
14230 <name> is not specified. It is important to remember that one header line may
14231 count as several headers if it has several values. The function considers any
14232 comma as a delimiter for distinct values. If full-line headers are desired
14233 instead, req.fhdr_cnt() should be used instead. With ACLs, it can be used to
14234 detect presence, absence or abuse of a specific header, as well as to block
14235 request smuggling attacks by rejecting requests which contain more than one
14236 of certain headers. See "req.hdr" for more information on header matching.
14237
14238req.hdr_ip([<name>[,<occ>]]) : ip
14239hdr_ip([<name>[,<occ>]]) : ip (deprecated)
14240 This extracts the last occurrence of header <name> in an HTTP request,
14241 converts it to an IPv4 or IPv6 address and returns this address. When used
14242 with ACLs, all occurrences are checked, and if <name> is omitted, every value
14243 of every header is checked. Optionally, a specific occurrence might be
14244 specified as a position number. Positive values indicate a position from the
14245 first occurrence, with 1 being the first one. Negative values indicate
14246 positions relative to the last one, with -1 being the last one. A typical use
14247 is with the X-Forwarded-For and X-Client-IP headers.
14248
14249req.hdr_val([<name>[,<occ>]]) : integer
14250hdr_val([<name>[,<occ>]]) : integer (deprecated)
14251 This extracts the last occurrence of header <name> in an HTTP request, and
14252 converts it to an integer value. When used with ACLs, all occurrences are
14253 checked, and if <name> is omitted, every value of every header is checked.
14254 Optionally, a specific occurrence might be specified as a position number.
14255 Positive values indicate a position from the first occurrence, with 1 being
14256 the first one. Negative values indicate positions relative to the last one,
14257 with -1 being the last one. A typical use is with the X-Forwarded-For header.
14258
14259http_auth(<userlist>) : boolean
14260 Returns a boolean indicating whether the authentication data received from
14261 the client match a username & password stored in the specified userlist. This
14262 fetch function is not really useful outside of ACLs. Currently only http
14263 basic auth is supported.
14264
Thierry FOURNIER9eec0a62014-01-22 18:38:02 +010014265http_auth_group(<userlist>) : string
14266 Returns a string corresponding to the user name found in the authentication
14267 data received from the client if both the user name and password are valid
14268 according to the specified userlist. The main purpose is to use it in ACLs
14269 where it is then checked whether the user belongs to any group within a list.
Willy Tarreau74ca5042013-06-11 23:12:07 +020014270 This fetch function is not really useful outside of ACLs. Currently only http
14271 basic auth is supported.
14272
14273 ACL derivatives :
Thierry FOURNIER9eec0a62014-01-22 18:38:02 +010014274 http_auth_group(<userlist>) : group ...
14275 Returns true when the user extracted from the request and whose password is
14276 valid according to the specified userlist belongs to at least one of the
14277 groups.
Willy Tarreau74ca5042013-06-11 23:12:07 +020014278
14279http_first_req : boolean
Willy Tarreau7f18e522010-10-22 20:04:13 +020014280 Returns true when the request being processed is the first one of the
14281 connection. This can be used to add or remove headers that may be missing
Willy Tarreau74ca5042013-06-11 23:12:07 +020014282 from some requests when a request is not the first one, or to help grouping
14283 requests in the logs.
Willy Tarreau7f18e522010-10-22 20:04:13 +020014284
Willy Tarreau74ca5042013-06-11 23:12:07 +020014285method : integer + string
14286 Returns an integer value corresponding to the method in the HTTP request. For
14287 example, "GET" equals 1 (check sources to establish the matching). Value 9
14288 means "other method" and may be converted to a string extracted from the
14289 stream. This should not be used directly as a sample, this is only meant to
14290 be used from ACLs, which transparently convert methods from patterns to these
14291 integer + string values. Some predefined ACL already check for most common
14292 methods.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014293
Willy Tarreau74ca5042013-06-11 23:12:07 +020014294 ACL derivatives :
14295 method : case insensitive method match
Willy Tarreau6a06a402007-07-15 20:15:28 +020014296
Willy Tarreau74ca5042013-06-11 23:12:07 +020014297 Example :
14298 # only accept GET and HEAD requests
14299 acl valid_method method GET HEAD
14300 http-request deny if ! valid_method
Willy Tarreau6a06a402007-07-15 20:15:28 +020014301
Willy Tarreau74ca5042013-06-11 23:12:07 +020014302path : string
14303 This extracts the request's URL path, which starts at the first slash and
14304 ends before the question mark (without the host part). A typical use is with
14305 prefetch-capable caches, and with portals which need to aggregate multiple
14306 information from databases and keep them in caches. Note that with outgoing
14307 caches, it would be wiser to use "url" instead. With ACLs, it's typically
14308 used to match exact file names (eg: "/login.php"), or directory parts using
14309 the derivative forms. See also the "url" and "base" fetch methods.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014310
Willy Tarreau74ca5042013-06-11 23:12:07 +020014311 ACL derivatives :
14312 path : exact string match
14313 path_beg : prefix match
14314 path_dir : subdir match
14315 path_dom : domain match
14316 path_end : suffix match
14317 path_len : length match
14318 path_reg : regex match
14319 path_sub : substring match
Willy Tarreau6a06a402007-07-15 20:15:28 +020014320
Willy Tarreau49ad95c2015-01-19 15:06:26 +010014321query : string
14322 This extracts the request's query string, which starts after the first
14323 question mark. If no question mark is present, this fetch returns nothing. If
14324 a question mark is present but nothing follows, it returns an empty string.
14325 This means it's possible to easily know whether a query string is present
14326 using the "found" matching method. This fetch is the completemnt of "path"
14327 which stops before the question mark.
14328
Willy Tarreaueb27ec72015-02-20 13:55:29 +010014329req.hdr_names([<delim>]) : string
14330 This builds a string made from the concatenation of all header names as they
14331 appear in the request when the rule is evaluated. The default delimiter is
14332 the comma (',') but it may be overridden as an optional argument <delim>. In
14333 this case, only the first character of <delim> is considered.
14334
Willy Tarreau74ca5042013-06-11 23:12:07 +020014335req.ver : string
14336req_ver : string (deprecated)
14337 Returns the version string from the HTTP request, for example "1.1". This can
14338 be useful for logs, but is mostly there for ACL. Some predefined ACL already
14339 check for versions 1.0 and 1.1.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014340
Willy Tarreau74ca5042013-06-11 23:12:07 +020014341 ACL derivatives :
14342 req_ver : exact string match
Willy Tarreau0e698542011-09-16 08:32:32 +020014343
Willy Tarreau74ca5042013-06-11 23:12:07 +020014344res.comp : boolean
14345 Returns the boolean "true" value if the response has been compressed by
14346 HAProxy, otherwise returns boolean "false". This may be used to add
14347 information in the logs.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014348
Willy Tarreau74ca5042013-06-11 23:12:07 +020014349res.comp_algo : string
14350 Returns a string containing the name of the algorithm used if the response
14351 was compressed by HAProxy, for example : "deflate". This may be used to add
14352 some information in the logs.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014353
Willy Tarreau74ca5042013-06-11 23:12:07 +020014354res.cook([<name>]) : string
14355scook([<name>]) : string (deprecated)
14356 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
14357 header line from the response, and returns its value as string. If no name is
14358 specified, the first cookie value is returned.
Willy Tarreau0ce3aa02012-04-25 18:46:33 +020014359
Willy Tarreau74ca5042013-06-11 23:12:07 +020014360 ACL derivatives :
14361 scook([<name>] : exact string match
Willy Tarreau0ce3aa02012-04-25 18:46:33 +020014362
Willy Tarreau74ca5042013-06-11 23:12:07 +020014363res.cook_cnt([<name>]) : integer
14364scook_cnt([<name>]) : integer (deprecated)
14365 Returns an integer value representing the number of occurrences of the cookie
14366 <name> in the response, or all cookies if <name> is not specified. This is
14367 mostly useful when combined with ACLs to detect suspicious responses.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014368
Willy Tarreau74ca5042013-06-11 23:12:07 +020014369res.cook_val([<name>]) : integer
14370scook_val([<name>]) : integer (deprecated)
14371 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
14372 header line from the response, and converts its value to an integer which is
14373 returned. If no name is specified, the first cookie value is returned.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014374
Willy Tarreau74ca5042013-06-11 23:12:07 +020014375res.fhdr([<name>[,<occ>]]) : string
14376 This extracts the last occurrence of header <name> in an HTTP response, or of
14377 the last header if no <name> is specified. Optionally, a specific occurrence
14378 might be specified as a position number. Positive values indicate a position
14379 from the first occurrence, with 1 being the first one. Negative values
14380 indicate positions relative to the last one, with -1 being the last one. It
14381 differs from res.hdr() in that any commas present in the value are returned
14382 and are not used as delimiters. If this is not desired, the res.hdr() fetch
14383 should be used instead. This is sometimes useful with headers such as Date or
14384 Expires.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014385
Willy Tarreau74ca5042013-06-11 23:12:07 +020014386res.fhdr_cnt([<name>]) : integer
14387 Returns an integer value representing the number of occurrences of response
14388 header field name <name>, or the total number of header fields if <name> is
14389 not specified. Contrary to its res.hdr_cnt() cousin, this function returns
14390 the number of full line headers and does not stop on commas. If this is not
14391 desired, the res.hdr_cnt() fetch should be used instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014392
Willy Tarreau74ca5042013-06-11 23:12:07 +020014393res.hdr([<name>[,<occ>]]) : string
14394shdr([<name>[,<occ>]]) : string (deprecated)
14395 This extracts the last occurrence of header <name> in an HTTP response, or of
14396 the last header if no <name> is specified. Optionally, a specific occurrence
14397 might be specified as a position number. Positive values indicate a position
14398 from the first occurrence, with 1 being the first one. Negative values
14399 indicate positions relative to the last one, with -1 being the last one. This
14400 can be useful to learn some data into a stick-table. The function considers
14401 any comma as a delimiter for distinct values. If this is not desired, the
14402 res.fhdr() fetch should be used instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014403
Willy Tarreau74ca5042013-06-11 23:12:07 +020014404 ACL derivatives :
14405 shdr([<name>[,<occ>]]) : exact string match
14406 shdr_beg([<name>[,<occ>]]) : prefix match
14407 shdr_dir([<name>[,<occ>]]) : subdir match
14408 shdr_dom([<name>[,<occ>]]) : domain match
14409 shdr_end([<name>[,<occ>]]) : suffix match
14410 shdr_len([<name>[,<occ>]]) : length match
14411 shdr_reg([<name>[,<occ>]]) : regex match
14412 shdr_sub([<name>[,<occ>]]) : substring match
14413
14414res.hdr_cnt([<name>]) : integer
14415shdr_cnt([<name>]) : integer (deprecated)
14416 Returns an integer value representing the number of occurrences of response
14417 header field name <name>, or the total number of header fields if <name> is
14418 not specified. The function considers any comma as a delimiter for distinct
14419 values. If this is not desired, the res.fhdr_cnt() fetch should be used
14420 instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014421
Willy Tarreau74ca5042013-06-11 23:12:07 +020014422res.hdr_ip([<name>[,<occ>]]) : ip
14423shdr_ip([<name>[,<occ>]]) : ip (deprecated)
14424 This extracts the last occurrence of header <name> in an HTTP response,
14425 convert it to an IPv4 or IPv6 address and returns this address. Optionally, a
14426 specific occurrence might be specified as a position number. Positive values
14427 indicate a position from the first occurrence, with 1 being the first one.
14428 Negative values indicate positions relative to the last one, with -1 being
14429 the last one. This can be useful to learn some data into a stick table.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014430
Willy Tarreaueb27ec72015-02-20 13:55:29 +010014431res.hdr_names([<delim>]) : string
14432 This builds a string made from the concatenation of all header names as they
14433 appear in the response when the rule is evaluated. The default delimiter is
14434 the comma (',') but it may be overridden as an optional argument <delim>. In
14435 this case, only the first character of <delim> is considered.
14436
Willy Tarreau74ca5042013-06-11 23:12:07 +020014437res.hdr_val([<name>[,<occ>]]) : integer
14438shdr_val([<name>[,<occ>]]) : integer (deprecated)
14439 This extracts the last occurrence of header <name> in an HTTP response, and
14440 converts it to an integer value. Optionally, a specific occurrence might be
14441 specified as a position number. Positive values indicate a position from the
14442 first occurrence, with 1 being the first one. Negative values indicate
14443 positions relative to the last one, with -1 being the last one. This can be
14444 useful to learn some data into a stick table.
Alexandre Cassen5eb1a902007-11-29 15:43:32 +010014445
Willy Tarreau74ca5042013-06-11 23:12:07 +020014446res.ver : string
14447resp_ver : string (deprecated)
14448 Returns the version string from the HTTP response, for example "1.1". This
14449 can be useful for logs, but is mostly there for ACL.
Willy Tarreau0e698542011-09-16 08:32:32 +020014450
Willy Tarreau74ca5042013-06-11 23:12:07 +020014451 ACL derivatives :
14452 resp_ver : exact string match
Alexandre Cassen5eb1a902007-11-29 15:43:32 +010014453
Willy Tarreau74ca5042013-06-11 23:12:07 +020014454set-cookie([<name>]) : string (deprecated)
14455 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
14456 header line from the response and uses the corresponding value to match. This
Willy Tarreau294d0f02015-08-10 19:40:12 +020014457 can be comparable to what "appsession" did with default options, but with
Willy Tarreau74ca5042013-06-11 23:12:07 +020014458 support for multi-peer synchronization and state keeping across restarts.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010014459
Willy Tarreau74ca5042013-06-11 23:12:07 +020014460 This fetch function is deprecated and has been superseded by the "res.cook"
14461 fetch. This keyword will disappear soon.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010014462
Willy Tarreau74ca5042013-06-11 23:12:07 +020014463status : integer
14464 Returns an integer containing the HTTP status code in the HTTP response, for
14465 example, 302. It is mostly used within ACLs and integer ranges, for example,
14466 to remove any Location header if the response is not a 3xx.
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020014467
Thierry Fournier0e00dca2016-04-07 15:47:40 +020014468unique-id : string
14469 Returns the unique-id attached to the request. The directive
14470 "unique-id-format" must be set. If it is not set, the unique-id sample fetch
14471 fails. Note that the unique-id is usually used with HTTP requests, however this
14472 sample fetch can be used with other protocols. Obviously, if it is used with
14473 other protocols than HTTP, the unique-id-format directive must not contain
14474 HTTP parts. See: unique-id-format and unique-id-header
14475
Willy Tarreau74ca5042013-06-11 23:12:07 +020014476url : string
14477 This extracts the request's URL as presented in the request. A typical use is
14478 with prefetch-capable caches, and with portals which need to aggregate
14479 multiple information from databases and keep them in caches. With ACLs, using
14480 "path" is preferred over using "url", because clients may send a full URL as
14481 is normally done with proxies. The only real use is to match "*" which does
14482 not match in "path", and for which there is already a predefined ACL. See
14483 also "path" and "base".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020014484
Willy Tarreau74ca5042013-06-11 23:12:07 +020014485 ACL derivatives :
14486 url : exact string match
14487 url_beg : prefix match
14488 url_dir : subdir match
14489 url_dom : domain match
14490 url_end : suffix match
14491 url_len : length match
14492 url_reg : regex match
14493 url_sub : substring match
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020014494
Willy Tarreau74ca5042013-06-11 23:12:07 +020014495url_ip : ip
14496 This extracts the IP address from the request's URL when the host part is
14497 presented as an IP address. Its use is very limited. For instance, a
14498 monitoring system might use this field as an alternative for the source IP in
14499 order to test what path a given source address would follow, or to force an
14500 entry in a table for a given source address. With ACLs it can be used to
14501 restrict access to certain systems through a proxy, for example when combined
14502 with option "http_proxy".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020014503
Willy Tarreau74ca5042013-06-11 23:12:07 +020014504url_port : integer
14505 This extracts the port part from the request's URL. Note that if the port is
14506 not specified in the request, port 80 is assumed. With ACLs it can be used to
14507 restrict access to certain systems through a proxy, for example when combined
14508 with option "http_proxy".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020014509
Willy Tarreau1ede1da2015-05-07 16:06:18 +020014510urlp([<name>[,<delim>]]) : string
14511url_param([<name>[,<delim>]]) : string
Willy Tarreau74ca5042013-06-11 23:12:07 +020014512 This extracts the first occurrence of the parameter <name> in the query
14513 string, which begins after either '?' or <delim>, and which ends before '&',
Willy Tarreau1ede1da2015-05-07 16:06:18 +020014514 ';' or <delim>. The parameter name is case-sensitive. If no name is given,
14515 any parameter will match, and the first one will be returned. The result is
14516 a string corresponding to the value of the parameter <name> as presented in
14517 the request (no URL decoding is performed). This can be used for session
Willy Tarreau74ca5042013-06-11 23:12:07 +020014518 stickiness based on a client ID, to extract an application cookie passed as a
14519 URL parameter, or in ACLs to apply some checks. Note that the ACL version of
Willy Tarreau1ede1da2015-05-07 16:06:18 +020014520 this fetch iterates over multiple parameters and will iteratively report all
14521 parameters values if no name is given
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020014522
Willy Tarreau74ca5042013-06-11 23:12:07 +020014523 ACL derivatives :
14524 urlp(<name>[,<delim>]) : exact string match
14525 urlp_beg(<name>[,<delim>]) : prefix match
14526 urlp_dir(<name>[,<delim>]) : subdir match
14527 urlp_dom(<name>[,<delim>]) : domain match
14528 urlp_end(<name>[,<delim>]) : suffix match
14529 urlp_len(<name>[,<delim>]) : length match
14530 urlp_reg(<name>[,<delim>]) : regex match
14531 urlp_sub(<name>[,<delim>]) : substring match
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020014532
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020014533
Willy Tarreau74ca5042013-06-11 23:12:07 +020014534 Example :
14535 # match http://example.com/foo?PHPSESSIONID=some_id
14536 stick on urlp(PHPSESSIONID)
14537 # match http://example.com/foo;JSESSIONID=some_id
14538 stick on urlp(JSESSIONID,;)
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020014539
Willy Tarreau1ede1da2015-05-07 16:06:18 +020014540urlp_val([<name>[,<delim>])] : integer
Willy Tarreau74ca5042013-06-11 23:12:07 +020014541 See "urlp" above. This one extracts the URL parameter <name> in the request
14542 and converts it to an integer value. This can be used for session stickiness
14543 based on a user ID for example, or with ACLs to match a page number or price.
Willy Tarreaua9fddca2012-07-31 07:51:48 +020014544
Dragan Dosen0070cd52016-06-16 12:19:49 +020014545url32 : integer
14546 This returns a 32-bit hash of the value obtained by concatenating the first
14547 Host header and the whole URL including parameters (not only the path part of
14548 the request, as in the "base32" fetch above). This is useful to track per-URL
14549 activity. A shorter hash is stored, saving a lot of memory. The output type
14550 is an unsigned integer.
14551
14552url32+src : binary
14553 This returns the concatenation of the "url32" fetch and the "src" fetch. The
14554 resulting type is of type binary, with a size of 8 or 20 bytes depending on
14555 the source address family. This can be used to track per-IP, per-URL counters.
14556
Willy Tarreau198a7442008-01-17 12:05:32 +010014557
Willy Tarreau74ca5042013-06-11 23:12:07 +0200145587.4. Pre-defined ACLs
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014559---------------------
Willy Tarreauced27012008-01-17 20:35:34 +010014560
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014561Some predefined ACLs are hard-coded so that they do not have to be declared in
14562every frontend which needs them. They all have their names in upper case in
Patrick Mézard2382ad62010-05-09 10:43:32 +020014563order to avoid confusion. Their equivalence is provided below.
Willy Tarreauced27012008-01-17 20:35:34 +010014564
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014565ACL name Equivalent to Usage
14566---------------+-----------------------------+---------------------------------
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014567FALSE always_false never match
Willy Tarreau2492d5b2009-07-11 00:06:00 +020014568HTTP req_proto_http match if protocol is valid HTTP
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014569HTTP_1.0 req_ver 1.0 match HTTP version 1.0
14570HTTP_1.1 req_ver 1.1 match HTTP version 1.1
Willy Tarreaud63335a2010-02-26 12:56:52 +010014571HTTP_CONTENT hdr_val(content-length) gt 0 match an existing content-length
14572HTTP_URL_ABS url_reg ^[^/:]*:// match absolute URL with scheme
14573HTTP_URL_SLASH url_beg / match URL beginning with "/"
14574HTTP_URL_STAR url * match URL equal to "*"
14575LOCALHOST src 127.0.0.1/8 match connection from local host
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014576METH_CONNECT method CONNECT match HTTP CONNECT method
Daniel Schneller9ff96c72016-04-11 17:45:29 +020014577METH_DELETE method DELETE match HTTP DELETE method
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014578METH_GET method GET HEAD match HTTP GET or HEAD method
14579METH_HEAD method HEAD match HTTP HEAD method
14580METH_OPTIONS method OPTIONS match HTTP OPTIONS method
14581METH_POST method POST match HTTP POST method
Daniel Schneller9ff96c72016-04-11 17:45:29 +020014582METH_PUT method PUT match HTTP PUT method
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014583METH_TRACE method TRACE match HTTP TRACE method
Emeric Brunbede3d02009-06-30 17:54:00 +020014584RDP_COOKIE req_rdp_cookie_cnt gt 0 match presence of an RDP cookie
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014585REQ_CONTENT req_len gt 0 match data in the request buffer
Willy Tarreaud63335a2010-02-26 12:56:52 +010014586TRUE always_true always match
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014587WAIT_END wait_end wait for end of content analysis
14588---------------+-----------------------------+---------------------------------
Willy Tarreauced27012008-01-17 20:35:34 +010014589
Willy Tarreaub937b7e2010-01-12 15:27:54 +010014590
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200145918. Logging
14592----------
Willy Tarreau844e3c52008-01-11 16:28:18 +010014593
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014594One of HAProxy's strong points certainly lies is its precise logs. It probably
14595provides the finest level of information available for such a product, which is
14596very important for troubleshooting complex environments. Standard information
14597provided in logs include client ports, TCP/HTTP state timers, precise session
14598state at termination and precise termination cause, information about decisions
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010014599to direct traffic to a server, and of course the ability to capture arbitrary
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014600headers.
14601
14602In order to improve administrators reactivity, it offers a great transparency
14603about encountered problems, both internal and external, and it is possible to
14604send logs to different sources at the same time with different level filters :
14605
14606 - global process-level logs (system errors, start/stop, etc..)
14607 - per-instance system and internal errors (lack of resource, bugs, ...)
14608 - per-instance external troubles (servers up/down, max connections)
14609 - per-instance activity (client connections), either at the establishment or
14610 at the termination.
Jim Freeman9e8714b2015-05-26 09:16:34 -060014611 - per-request control of log-level, eg:
14612 http-request set-log-level silent if sensitive_request
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014613
14614The ability to distribute different levels of logs to different log servers
14615allow several production teams to interact and to fix their problems as soon
14616as possible. For example, the system team might monitor system-wide errors,
14617while the application team might be monitoring the up/down for their servers in
14618real time, and the security team might analyze the activity logs with one hour
14619delay.
14620
14621
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200146228.1. Log levels
14623---------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014624
Simon Hormandf791f52011-05-29 15:01:10 +090014625TCP and HTTP connections can be logged with information such as the date, time,
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014626source IP address, destination address, connection duration, response times,
Simon Hormandf791f52011-05-29 15:01:10 +090014627HTTP request, HTTP return code, number of bytes transmitted, conditions
14628in which the session ended, and even exchanged cookies values. For example
14629track a particular user's problems. All messages may be sent to up to two
14630syslog servers. Check the "log" keyword in section 4.2 for more information
14631about log facilities.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014632
14633
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200146348.2. Log formats
14635----------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014636
William Lallemand48940402012-01-30 16:47:22 +010014637HAProxy supports 5 log formats. Several fields are common between these formats
Simon Hormandf791f52011-05-29 15:01:10 +090014638and will be detailed in the following sections. A few of them may vary
14639slightly with the configuration, due to indicators specific to certain
14640options. The supported formats are as follows :
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014641
14642 - the default format, which is very basic and very rarely used. It only
14643 provides very basic information about the incoming connection at the moment
14644 it is accepted : source IP:port, destination IP:port, and frontend-name.
14645 This mode will eventually disappear so it will not be described to great
14646 extents.
14647
14648 - the TCP format, which is more advanced. This format is enabled when "option
14649 tcplog" is set on the frontend. HAProxy will then usually wait for the
14650 connection to terminate before logging. This format provides much richer
14651 information, such as timers, connection counts, queue size, etc... This
14652 format is recommended for pure TCP proxies.
14653
14654 - the HTTP format, which is the most advanced for HTTP proxying. This format
14655 is enabled when "option httplog" is set on the frontend. It provides the
14656 same information as the TCP format with some HTTP-specific fields such as
14657 the request, the status code, and captures of headers and cookies. This
14658 format is recommended for HTTP proxies.
14659
Emeric Brun3a058f32009-06-30 18:26:00 +020014660 - the CLF HTTP format, which is equivalent to the HTTP format, but with the
14661 fields arranged in the same order as the CLF format. In this mode, all
14662 timers, captures, flags, etc... appear one per field after the end of the
14663 common fields, in the same order they appear in the standard HTTP format.
14664
William Lallemand48940402012-01-30 16:47:22 +010014665 - the custom log format, allows you to make your own log line.
14666
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014667Next sections will go deeper into details for each of these formats. Format
14668specification will be performed on a "field" basis. Unless stated otherwise, a
14669field is a portion of text delimited by any number of spaces. Since syslog
14670servers are susceptible of inserting fields at the beginning of a line, it is
14671always assumed that the first field is the one containing the process name and
14672identifier.
14673
14674Note : Since log lines may be quite long, the log examples in sections below
14675 might be broken into multiple lines. The example log lines will be
14676 prefixed with 3 closing angle brackets ('>>>') and each time a log is
14677 broken into multiple lines, each non-final line will end with a
14678 backslash ('\') and the next line will start indented by two characters.
14679
14680
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200146818.2.1. Default log format
14682-------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014683
14684This format is used when no specific option is set. The log is emitted as soon
14685as the connection is accepted. One should note that this currently is the only
14686format which logs the request's destination IP and ports.
14687
14688 Example :
14689 listen www
14690 mode http
14691 log global
14692 server srv1 127.0.0.1:8000
14693
14694 >>> Feb 6 12:12:09 localhost \
14695 haproxy[14385]: Connect from 10.0.1.2:33312 to 10.0.3.31:8012 \
14696 (www/HTTP)
14697
14698 Field Format Extract from the example above
14699 1 process_name '[' pid ']:' haproxy[14385]:
14700 2 'Connect from' Connect from
14701 3 source_ip ':' source_port 10.0.1.2:33312
14702 4 'to' to
14703 5 destination_ip ':' destination_port 10.0.3.31:8012
14704 6 '(' frontend_name '/' mode ')' (www/HTTP)
14705
14706Detailed fields description :
14707 - "source_ip" is the IP address of the client which initiated the connection.
14708 - "source_port" is the TCP port of the client which initiated the connection.
14709 - "destination_ip" is the IP address the client connected to.
14710 - "destination_port" is the TCP port the client connected to.
14711 - "frontend_name" is the name of the frontend (or listener) which received
14712 and processed the connection.
14713 - "mode is the mode the frontend is operating (TCP or HTTP).
14714
Willy Tarreauceb24bc2010-11-09 12:46:41 +010014715In case of a UNIX socket, the source and destination addresses are marked as
14716"unix:" and the ports reflect the internal ID of the socket which accepted the
14717connection (the same ID as reported in the stats).
14718
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014719It is advised not to use this deprecated format for newer installations as it
14720will eventually disappear.
14721
14722
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200147238.2.2. TCP log format
14724---------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014725
14726The TCP format is used when "option tcplog" is specified in the frontend, and
14727is the recommended format for pure TCP proxies. It provides a lot of precious
14728information for troubleshooting. Since this format includes timers and byte
14729counts, the log is normally emitted at the end of the session. It can be
14730emitted earlier if "option logasap" is specified, which makes sense in most
14731environments with long sessions such as remote terminals. Sessions which match
14732the "monitor" rules are never logged. It is also possible not to emit logs for
14733sessions for which no data were exchanged between the client and the server, by
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020014734specifying "option dontlognull" in the frontend. Successful connections will
14735not be logged if "option dontlog-normal" is specified in the frontend. A few
14736fields may slightly vary depending on some configuration options, those are
14737marked with a star ('*') after the field name below.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014738
14739 Example :
14740 frontend fnt
14741 mode tcp
14742 option tcplog
14743 log global
14744 default_backend bck
14745
14746 backend bck
14747 server srv1 127.0.0.1:8000
14748
14749 >>> Feb 6 12:12:56 localhost \
14750 haproxy[14387]: 10.0.1.2:33313 [06/Feb/2009:12:12:51.443] fnt \
14751 bck/srv1 0/0/5007 212 -- 0/0/0/0/3 0/0
14752
14753 Field Format Extract from the example above
14754 1 process_name '[' pid ']:' haproxy[14387]:
14755 2 client_ip ':' client_port 10.0.1.2:33313
14756 3 '[' accept_date ']' [06/Feb/2009:12:12:51.443]
14757 4 frontend_name fnt
14758 5 backend_name '/' server_name bck/srv1
14759 6 Tw '/' Tc '/' Tt* 0/0/5007
14760 7 bytes_read* 212
14761 8 termination_state --
14762 9 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 0/0/0/0/3
14763 10 srv_queue '/' backend_queue 0/0
14764
14765Detailed fields description :
14766 - "client_ip" is the IP address of the client which initiated the TCP
Willy Tarreauceb24bc2010-11-09 12:46:41 +010014767 connection to haproxy. If the connection was accepted on a UNIX socket
14768 instead, the IP address would be replaced with the word "unix". Note that
14769 when the connection is accepted on a socket configured with "accept-proxy"
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010014770 and the PROXY protocol is correctly used, or with a "accept-netscaler-cip"
14771 and the NetScaler Client IP insetion protocol is correctly used, then the
14772 logs will reflect the forwarded connection's information.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014773
14774 - "client_port" is the TCP port of the client which initiated the connection.
Willy Tarreauceb24bc2010-11-09 12:46:41 +010014775 If the connection was accepted on a UNIX socket instead, the port would be
14776 replaced with the ID of the accepting socket, which is also reported in the
14777 stats interface.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014778
14779 - "accept_date" is the exact date when the connection was received by haproxy
14780 (which might be very slightly different from the date observed on the
14781 network if there was some queuing in the system's backlog). This is usually
14782 the same date which may appear in any upstream firewall's log.
14783
14784 - "frontend_name" is the name of the frontend (or listener) which received
14785 and processed the connection.
14786
14787 - "backend_name" is the name of the backend (or listener) which was selected
14788 to manage the connection to the server. This will be the same as the
14789 frontend if no switching rule has been applied, which is common for TCP
14790 applications.
14791
14792 - "server_name" is the name of the last server to which the connection was
14793 sent, which might differ from the first one if there were connection errors
14794 and a redispatch occurred. Note that this server belongs to the backend
14795 which processed the request. If the connection was aborted before reaching
14796 a server, "<NOSRV>" is indicated instead of a server name.
14797
14798 - "Tw" is the total time in milliseconds spent waiting in the various queues.
14799 It can be "-1" if the connection was aborted before reaching the queue.
14800 See "Timers" below for more details.
14801
14802 - "Tc" is the total time in milliseconds spent waiting for the connection to
14803 establish to the final server, including retries. It can be "-1" if the
14804 connection was aborted before a connection could be established. See
14805 "Timers" below for more details.
14806
14807 - "Tt" is the total time in milliseconds elapsed between the accept and the
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030014808 last close. It covers all possible processing. There is one exception, if
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014809 "option logasap" was specified, then the time counting stops at the moment
14810 the log is emitted. In this case, a '+' sign is prepended before the value,
14811 indicating that the final one will be larger. See "Timers" below for more
14812 details.
14813
14814 - "bytes_read" is the total number of bytes transmitted from the server to
14815 the client when the log is emitted. If "option logasap" is specified, the
14816 this value will be prefixed with a '+' sign indicating that the final one
14817 may be larger. Please note that this value is a 64-bit counter, so log
14818 analysis tools must be able to handle it without overflowing.
14819
14820 - "termination_state" is the condition the session was in when the session
14821 ended. This indicates the session state, which side caused the end of
14822 session to happen, and for what reason (timeout, error, ...). The normal
14823 flags should be "--", indicating the session was closed by either end with
14824 no data remaining in buffers. See below "Session state at disconnection"
14825 for more details.
14826
14827 - "actconn" is the total number of concurrent connections on the process when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040014828 the session was logged. It is useful to detect when some per-process system
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014829 limits have been reached. For instance, if actconn is close to 512 when
14830 multiple connection errors occur, chances are high that the system limits
14831 the process to use a maximum of 1024 file descriptors and that all of them
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014832 are used. See section 3 "Global parameters" to find how to tune the system.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014833
14834 - "feconn" is the total number of concurrent connections on the frontend when
14835 the session was logged. It is useful to estimate the amount of resource
14836 required to sustain high loads, and to detect when the frontend's "maxconn"
14837 has been reached. Most often when this value increases by huge jumps, it is
14838 because there is congestion on the backend servers, but sometimes it can be
14839 caused by a denial of service attack.
14840
14841 - "beconn" is the total number of concurrent connections handled by the
14842 backend when the session was logged. It includes the total number of
14843 concurrent connections active on servers as well as the number of
14844 connections pending in queues. It is useful to estimate the amount of
14845 additional servers needed to support high loads for a given application.
14846 Most often when this value increases by huge jumps, it is because there is
14847 congestion on the backend servers, but sometimes it can be caused by a
14848 denial of service attack.
14849
14850 - "srv_conn" is the total number of concurrent connections still active on
14851 the server when the session was logged. It can never exceed the server's
14852 configured "maxconn" parameter. If this value is very often close or equal
14853 to the server's "maxconn", it means that traffic regulation is involved a
14854 lot, meaning that either the server's maxconn value is too low, or that
14855 there aren't enough servers to process the load with an optimal response
14856 time. When only one of the server's "srv_conn" is high, it usually means
14857 that this server has some trouble causing the connections to take longer to
14858 be processed than on other servers.
14859
14860 - "retries" is the number of connection retries experienced by this session
14861 when trying to connect to the server. It must normally be zero, unless a
14862 server is being stopped at the same moment the connection was attempted.
14863 Frequent retries generally indicate either a network problem between
14864 haproxy and the server, or a misconfigured system backlog on the server
14865 preventing new connections from being queued. This field may optionally be
14866 prefixed with a '+' sign, indicating that the session has experienced a
14867 redispatch after the maximal retry count has been reached on the initial
14868 server. In this case, the server name appearing in the log is the one the
14869 connection was redispatched to, and not the first one, though both may
14870 sometimes be the same in case of hashing for instance. So as a general rule
14871 of thumb, when a '+' is present in front of the retry count, this count
14872 should not be attributed to the logged server.
14873
14874 - "srv_queue" is the total number of requests which were processed before
14875 this one in the server queue. It is zero when the request has not gone
14876 through the server queue. It makes it possible to estimate the approximate
14877 server's response time by dividing the time spent in queue by the number of
14878 requests in the queue. It is worth noting that if a session experiences a
14879 redispatch and passes through two server queues, their positions will be
14880 cumulated. A request should not pass through both the server queue and the
14881 backend queue unless a redispatch occurs.
14882
14883 - "backend_queue" is the total number of requests which were processed before
14884 this one in the backend's global queue. It is zero when the request has not
14885 gone through the global queue. It makes it possible to estimate the average
14886 queue length, which easily translates into a number of missing servers when
14887 divided by a server's "maxconn" parameter. It is worth noting that if a
14888 session experiences a redispatch, it may pass twice in the backend's queue,
14889 and then both positions will be cumulated. A request should not pass
14890 through both the server queue and the backend queue unless a redispatch
14891 occurs.
14892
14893
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200148948.2.3. HTTP log format
14895----------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014896
14897The HTTP format is the most complete and the best suited for HTTP proxies. It
14898is enabled by when "option httplog" is specified in the frontend. It provides
14899the same level of information as the TCP format with additional features which
14900are specific to the HTTP protocol. Just like the TCP format, the log is usually
14901emitted at the end of the session, unless "option logasap" is specified, which
14902generally only makes sense for download sites. A session which matches the
14903"monitor" rules will never logged. It is also possible not to log sessions for
14904which no data were sent by the client by specifying "option dontlognull" in the
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020014905frontend. Successful connections will not be logged if "option dontlog-normal"
14906is specified in the frontend.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014907
14908Most fields are shared with the TCP log, some being different. A few fields may
14909slightly vary depending on some configuration options. Those ones are marked
14910with a star ('*') after the field name below.
14911
14912 Example :
14913 frontend http-in
14914 mode http
14915 option httplog
14916 log global
14917 default_backend bck
14918
14919 backend static
14920 server srv1 127.0.0.1:8000
14921
14922 >>> Feb 6 12:14:14 localhost \
14923 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
14924 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 +010014925 {} "GET /index.html HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014926
14927 Field Format Extract from the example above
14928 1 process_name '[' pid ']:' haproxy[14389]:
14929 2 client_ip ':' client_port 10.0.1.2:33317
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020014930 3 '[' request_date ']' [06/Feb/2009:12:14:14.655]
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014931 4 frontend_name http-in
14932 5 backend_name '/' server_name static/srv1
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020014933 6 TR '/' Tw '/' Tc '/' Tr '/' Ta* 10/0/30/69/109
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014934 7 status_code 200
14935 8 bytes_read* 2750
14936 9 captured_request_cookie -
14937 10 captured_response_cookie -
14938 11 termination_state ----
14939 12 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 1/1/1/1/0
14940 13 srv_queue '/' backend_queue 0/0
14941 14 '{' captured_request_headers* '}' {haproxy.1wt.eu}
14942 15 '{' captured_response_headers* '}' {}
14943 16 '"' http_request '"' "GET /index.html HTTP/1.1"
Willy Tarreaud72758d2010-01-12 10:42:19 +010014944
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014945Detailed fields description :
14946 - "client_ip" is the IP address of the client which initiated the TCP
Willy Tarreauceb24bc2010-11-09 12:46:41 +010014947 connection to haproxy. If the connection was accepted on a UNIX socket
14948 instead, the IP address would be replaced with the word "unix". Note that
14949 when the connection is accepted on a socket configured with "accept-proxy"
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010014950 and the PROXY protocol is correctly used, or with a "accept-netscaler-cip"
14951 and the NetScaler Client IP insetion protocol is correctly used, then the
14952 logs will reflect the forwarded connection's information.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014953
14954 - "client_port" is the TCP port of the client which initiated the connection.
Willy Tarreauceb24bc2010-11-09 12:46:41 +010014955 If the connection was accepted on a UNIX socket instead, the port would be
14956 replaced with the ID of the accepting socket, which is also reported in the
14957 stats interface.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014958
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020014959 - "request_date" is the exact date when the first byte of the HTTP request
14960 was received by haproxy (log field %tr).
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014961
14962 - "frontend_name" is the name of the frontend (or listener) which received
14963 and processed the connection.
14964
14965 - "backend_name" is the name of the backend (or listener) which was selected
14966 to manage the connection to the server. This will be the same as the
14967 frontend if no switching rule has been applied.
14968
14969 - "server_name" is the name of the last server to which the connection was
14970 sent, which might differ from the first one if there were connection errors
14971 and a redispatch occurred. Note that this server belongs to the backend
14972 which processed the request. If the request was aborted before reaching a
14973 server, "<NOSRV>" is indicated instead of a server name. If the request was
14974 intercepted by the stats subsystem, "<STATS>" is indicated instead.
14975
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020014976 - "TR" is the total time in milliseconds spent waiting for a full HTTP
14977 request from the client (not counting body) after the first byte was
14978 received. It can be "-1" if the connection was aborted before a complete
14979 request could be received or the a bad request was received. It should
14980 always be very small because a request generally fits in one single packet.
14981 Large times here generally indicate network issues between the client and
14982 haproxy or requests being typed by hand. See "Timers" below for more details.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014983
14984 - "Tw" is the total time in milliseconds spent waiting in the various queues.
14985 It can be "-1" if the connection was aborted before reaching the queue.
14986 See "Timers" below for more details.
14987
14988 - "Tc" is the total time in milliseconds spent waiting for the connection to
14989 establish to the final server, including retries. It can be "-1" if the
14990 request was aborted before a connection could be established. See "Timers"
14991 below for more details.
14992
14993 - "Tr" is the total time in milliseconds spent waiting for the server to send
14994 a full HTTP response, not counting data. It can be "-1" if the request was
14995 aborted before a complete response could be received. It generally matches
14996 the server's processing time for the request, though it may be altered by
14997 the amount of data sent by the client to the server. Large times here on
14998 "GET" requests generally indicate an overloaded server. See "Timers" below
14999 for more details.
15000
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015001 - "Ta" is the time the request remained active in haproxy, which is the total
15002 time in milliseconds elapsed between the first byte of the request was
15003 received and the last byte of response was sent. It covers all possible
15004 processing except the handshake (see Th) and idle time (see Ti). There is
15005 one exception, if "option logasap" was specified, then the time counting
15006 stops at the moment the log is emitted. In this case, a '+' sign is
15007 prepended before the value, indicating that the final one will be larger.
15008 See "Timers" below for more details.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015009
15010 - "status_code" is the HTTP status code returned to the client. This status
15011 is generally set by the server, but it might also be set by haproxy when
15012 the server cannot be reached or when its response is blocked by haproxy.
15013
15014 - "bytes_read" is the total number of bytes transmitted to the client when
15015 the log is emitted. This does include HTTP headers. If "option logasap" is
15016 specified, the this value will be prefixed with a '+' sign indicating that
15017 the final one may be larger. Please note that this value is a 64-bit
15018 counter, so log analysis tools must be able to handle it without
15019 overflowing.
15020
15021 - "captured_request_cookie" is an optional "name=value" entry indicating that
15022 the client had this cookie in the request. The cookie name and its maximum
15023 length are defined by the "capture cookie" statement in the frontend
15024 configuration. The field is a single dash ('-') when the option is not
15025 set. Only one cookie may be captured, it is generally used to track session
15026 ID exchanges between a client and a server to detect session crossing
15027 between clients due to application bugs. For more details, please consult
15028 the section "Capturing HTTP headers and cookies" below.
15029
15030 - "captured_response_cookie" is an optional "name=value" entry indicating
15031 that the server has returned a cookie with its response. The cookie name
15032 and its maximum length are defined by the "capture cookie" statement in the
15033 frontend configuration. The field is a single dash ('-') when the option is
15034 not set. Only one cookie may be captured, it is generally used to track
15035 session ID exchanges between a client and a server to detect session
15036 crossing between clients due to application bugs. For more details, please
15037 consult the section "Capturing HTTP headers and cookies" below.
15038
15039 - "termination_state" is the condition the session was in when the session
15040 ended. This indicates the session state, which side caused the end of
15041 session to happen, for what reason (timeout, error, ...), just like in TCP
15042 logs, and information about persistence operations on cookies in the last
15043 two characters. The normal flags should begin with "--", indicating the
15044 session was closed by either end with no data remaining in buffers. See
15045 below "Session state at disconnection" for more details.
15046
15047 - "actconn" is the total number of concurrent connections on the process when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040015048 the session was logged. It is useful to detect when some per-process system
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015049 limits have been reached. For instance, if actconn is close to 512 or 1024
15050 when multiple connection errors occur, chances are high that the system
15051 limits the process to use a maximum of 1024 file descriptors and that all
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015052 of them are used. See section 3 "Global parameters" to find how to tune the
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015053 system.
15054
15055 - "feconn" is the total number of concurrent connections on the frontend when
15056 the session was logged. It is useful to estimate the amount of resource
15057 required to sustain high loads, and to detect when the frontend's "maxconn"
15058 has been reached. Most often when this value increases by huge jumps, it is
15059 because there is congestion on the backend servers, but sometimes it can be
15060 caused by a denial of service attack.
15061
15062 - "beconn" is the total number of concurrent connections handled by the
15063 backend when the session was logged. It includes the total number of
15064 concurrent connections active on servers as well as the number of
15065 connections pending in queues. It is useful to estimate the amount of
15066 additional servers needed to support high loads for a given application.
15067 Most often when this value increases by huge jumps, it is because there is
15068 congestion on the backend servers, but sometimes it can be caused by a
15069 denial of service attack.
15070
15071 - "srv_conn" is the total number of concurrent connections still active on
15072 the server when the session was logged. It can never exceed the server's
15073 configured "maxconn" parameter. If this value is very often close or equal
15074 to the server's "maxconn", it means that traffic regulation is involved a
15075 lot, meaning that either the server's maxconn value is too low, or that
15076 there aren't enough servers to process the load with an optimal response
15077 time. When only one of the server's "srv_conn" is high, it usually means
15078 that this server has some trouble causing the requests to take longer to be
15079 processed than on other servers.
15080
15081 - "retries" is the number of connection retries experienced by this session
15082 when trying to connect to the server. It must normally be zero, unless a
15083 server is being stopped at the same moment the connection was attempted.
15084 Frequent retries generally indicate either a network problem between
15085 haproxy and the server, or a misconfigured system backlog on the server
15086 preventing new connections from being queued. This field may optionally be
15087 prefixed with a '+' sign, indicating that the session has experienced a
15088 redispatch after the maximal retry count has been reached on the initial
15089 server. In this case, the server name appearing in the log is the one the
15090 connection was redispatched to, and not the first one, though both may
15091 sometimes be the same in case of hashing for instance. So as a general rule
15092 of thumb, when a '+' is present in front of the retry count, this count
15093 should not be attributed to the logged server.
15094
15095 - "srv_queue" is the total number of requests which were processed before
15096 this one in the server queue. It is zero when the request has not gone
15097 through the server queue. It makes it possible to estimate the approximate
15098 server's response time by dividing the time spent in queue by the number of
15099 requests in the queue. It is worth noting that if a session experiences a
15100 redispatch and passes through two server queues, their positions will be
15101 cumulated. A request should not pass through both the server queue and the
15102 backend queue unless a redispatch occurs.
15103
15104 - "backend_queue" is the total number of requests which were processed before
15105 this one in the backend's global queue. It is zero when the request has not
15106 gone through the global queue. It makes it possible to estimate the average
15107 queue length, which easily translates into a number of missing servers when
15108 divided by a server's "maxconn" parameter. It is worth noting that if a
15109 session experiences a redispatch, it may pass twice in the backend's queue,
15110 and then both positions will be cumulated. A request should not pass
15111 through both the server queue and the backend queue unless a redispatch
15112 occurs.
15113
15114 - "captured_request_headers" is a list of headers captured in the request due
15115 to the presence of the "capture request header" statement in the frontend.
15116 Multiple headers can be captured, they will be delimited by a vertical bar
15117 ('|'). When no capture is enabled, the braces do not appear, causing a
15118 shift of remaining fields. It is important to note that this field may
15119 contain spaces, and that using it requires a smarter log parser than when
15120 it's not used. Please consult the section "Capturing HTTP headers and
15121 cookies" below for more details.
15122
15123 - "captured_response_headers" is a list of headers captured in the response
15124 due to the presence of the "capture response header" statement in the
15125 frontend. Multiple headers can be captured, they will be delimited by a
15126 vertical bar ('|'). When no capture is enabled, the braces do not appear,
15127 causing a shift of remaining fields. It is important to note that this
15128 field may contain spaces, and that using it requires a smarter log parser
15129 than when it's not used. Please consult the section "Capturing HTTP headers
15130 and cookies" below for more details.
15131
15132 - "http_request" is the complete HTTP request line, including the method,
15133 request and HTTP version string. Non-printable characters are encoded (see
15134 below the section "Non-printable characters"). This is always the last
15135 field, and it is always delimited by quotes and is the only one which can
15136 contain quotes. If new fields are added to the log format, they will be
15137 added before this field. This field might be truncated if the request is
15138 huge and does not fit in the standard syslog buffer (1024 characters). This
15139 is the reason why this field must always remain the last one.
15140
15141
Cyril Bontédc4d9032012-04-08 21:57:39 +0200151428.2.4. Custom log format
15143------------------------
William Lallemand48940402012-01-30 16:47:22 +010015144
Willy Tarreau2beef582012-12-20 17:22:52 +010015145The directive log-format allows you to customize the logs in http mode and tcp
William Lallemandbddd4fd2012-02-27 11:23:10 +010015146mode. It takes a string as argument.
William Lallemand48940402012-01-30 16:47:22 +010015147
15148HAproxy understands some log format variables. % precedes log format variables.
15149Variables can take arguments using braces ('{}'), and multiple arguments are
15150separated by commas within the braces. Flags may be added or removed by
15151prefixing them with a '+' or '-' sign.
15152
15153Special variable "%o" may be used to propagate its flags to all other
15154variables on the same format string. This is particularly handy with quoted
Dragan Dosen835b9212016-02-12 13:23:03 +010015155("Q") and escaped ("E") string formats.
William Lallemand48940402012-01-30 16:47:22 +010015156
Willy Tarreauc8368452012-12-21 00:09:23 +010015157If a variable is named between square brackets ('[' .. ']') then it is used
Willy Tarreaube722a22014-06-13 16:31:59 +020015158as a sample expression rule (see section 7.3). This it useful to add some
Willy Tarreauc8368452012-12-21 00:09:23 +010015159less common information such as the client's SSL certificate's DN, or to log
15160the key that would be used to store an entry into a stick table.
15161
William Lallemand48940402012-01-30 16:47:22 +010015162Note: spaces must be escaped. A space character is considered as a separator.
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030015163In order to emit a verbatim '%', it must be preceded by another '%' resulting
Willy Tarreau06d97f92013-12-02 17:45:48 +010015164in '%%'. HAProxy will automatically merge consecutive separators.
William Lallemand48940402012-01-30 16:47:22 +010015165
Dragan Dosen835b9212016-02-12 13:23:03 +010015166Note: when using the RFC5424 syslog message format, the characters '"',
15167'\' and ']' inside PARAM-VALUE should be escaped with '\' as prefix (see
15168https://tools.ietf.org/html/rfc5424#section-6.3.3 for more details). In
15169such cases, the use of the flag "E" should be considered.
15170
William Lallemand48940402012-01-30 16:47:22 +010015171Flags are :
15172 * Q: quote a string
Jamie Gloudonaaa21002012-08-25 00:18:33 -040015173 * X: hexadecimal representation (IPs, Ports, %Ts, %rt, %pid)
Dragan Dosen835b9212016-02-12 13:23:03 +010015174 * E: escape characters '"', '\' and ']' in a string with '\' as prefix
15175 (intended purpose is for the RFC5424 structured-data log formats)
William Lallemand48940402012-01-30 16:47:22 +010015176
15177 Example:
15178
15179 log-format %T\ %t\ Some\ Text
15180 log-format %{+Q}o\ %t\ %s\ %{-Q}r
15181
Dragan Dosen835b9212016-02-12 13:23:03 +010015182 log-format-sd %{+Q,+E}o\ [exampleSDID@1234\ header=%[capture.req.hdr(0)]]
15183
William Lallemand48940402012-01-30 16:47:22 +010015184At the moment, the default HTTP format is defined this way :
15185
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015186 log-format "%ci:%cp [%tr] %ft %b/%s %TR/%Tw/%Tc/%Tr/%Ta %ST %B %CC \
15187 %CS %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %hr %hs %{+Q}r"
William Lallemand48940402012-01-30 16:47:22 +010015188
William Lallemandbddd4fd2012-02-27 11:23:10 +010015189the default CLF format is defined this way :
William Lallemand48940402012-01-30 16:47:22 +010015190
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015191 log-format "%{+Q}o %{-Q}ci - - [%trg] %r %ST %B \"\" \"\" %cp \
15192 %ms %ft %b %s %TR %Tw %Tc %Tr %Ta %tsc %ac %fc \
15193 %bc %sc %rc %sq %bq %CC %CS %hrl %hsl"
William Lallemand48940402012-01-30 16:47:22 +010015194
William Lallemandbddd4fd2012-02-27 11:23:10 +010015195and the default TCP format is defined this way :
15196
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015197 log-format "%ci:%cp [%t] %ft %b/%s %Tw/%Tc/%Tt %B %ts \
15198 %ac/%fc/%bc/%sc/%rc %sq/%bq"
William Lallemandbddd4fd2012-02-27 11:23:10 +010015199
William Lallemand48940402012-01-30 16:47:22 +010015200Please refer to the table below for currently defined variables :
15201
William Lallemandbddd4fd2012-02-27 11:23:10 +010015202 +---+------+-----------------------------------------------+-------------+
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015203 | R | var | field name (8.2.2 and 8.2.3 for description) | type |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015204 +---+------+-----------------------------------------------+-------------+
15205 | | %o | special variable, apply flags on all next var | |
15206 +---+------+-----------------------------------------------+-------------+
Willy Tarreau2beef582012-12-20 17:22:52 +010015207 | | %B | bytes_read (from server to client) | numeric |
15208 | H | %CC | captured_request_cookie | string |
15209 | H | %CS | captured_response_cookie | string |
William Lallemand5f232402012-04-05 18:02:55 +020015210 | | %H | hostname | string |
Andrew Hayworth0ebc55f2015-04-27 21:37:03 +000015211 | H | %HM | HTTP method (ex: POST) | string |
15212 | H | %HP | HTTP request URI without query string (path) | string |
Andrew Hayworthe63ac872015-07-31 16:14:16 +000015213 | H | %HQ | HTTP request URI query string (ex: ?bar=baz) | string |
Andrew Hayworth0ebc55f2015-04-27 21:37:03 +000015214 | H | %HU | HTTP request URI (ex: /foo?bar=baz) | string |
15215 | H | %HV | HTTP version (ex: HTTP/1.0) | string |
William Lallemanda73203e2012-03-12 12:48:57 +010015216 | | %ID | unique-id | string |
Willy Tarreau4bf99632014-06-13 12:21:40 +020015217 | | %ST | status_code | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020015218 | | %T | gmt_date_time | date |
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015219 | | %Ta | Active time of the request (from TR to end) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015220 | | %Tc | Tc | numeric |
Willy Tarreau27b639d2016-05-17 17:55:27 +020015221 | | %Td | Td = Tt - (Tq + Tw + Tc + Tr) | numeric |
Yuxans Yao4e25b012012-10-19 10:36:09 +080015222 | | %Tl | local_date_time | date |
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015223 | | %Th | connection handshake time (SSL, PROXY proto) | numeric |
15224 | H | %Ti | idle time before the HTTP request | numeric |
15225 | H | %Tq | Th + Ti + TR | numeric |
15226 | H | %TR | time to receive the full request from 1st byte| numeric |
15227 | H | %Tr | Tr (response time) | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020015228 | | %Ts | timestamp | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015229 | | %Tt | Tt | numeric |
15230 | | %Tw | Tw | numeric |
Willy Tarreau2beef582012-12-20 17:22:52 +010015231 | | %U | bytes_uploaded (from client to server) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015232 | | %ac | actconn | numeric |
15233 | | %b | backend_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010015234 | | %bc | beconn (backend concurrent connections) | numeric |
15235 | | %bi | backend_source_ip (connecting address) | IP |
15236 | | %bp | backend_source_port (connecting address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015237 | | %bq | backend_queue | numeric |
Willy Tarreau2beef582012-12-20 17:22:52 +010015238 | | %ci | client_ip (accepted address) | IP |
15239 | | %cp | client_port (accepted address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015240 | | %f | frontend_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010015241 | | %fc | feconn (frontend concurrent connections) | numeric |
15242 | | %fi | frontend_ip (accepting address) | IP |
15243 | | %fp | frontend_port (accepting address) | numeric |
Willy Tarreau773d65f2012-10-12 14:56:11 +020015244 | | %ft | frontend_name_transport ('~' suffix for SSL) | string |
Willy Tarreau7346acb2014-08-28 15:03:15 +020015245 | | %lc | frontend_log_counter | numeric |
Willy Tarreaud9ed3d22014-06-13 12:23:06 +020015246 | | %hr | captured_request_headers default style | string |
15247 | | %hrl | captured_request_headers CLF style | string list |
15248 | | %hs | captured_response_headers default style | string |
15249 | | %hsl | captured_response_headers CLF style | string list |
Willy Tarreau812c88e2015-08-09 10:56:35 +020015250 | | %ms | accept date milliseconds (left-padded with 0) | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020015251 | | %pid | PID | numeric |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015252 | H | %r | http_request | string |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015253 | | %rc | retries | numeric |
Willy Tarreau1f0da242014-01-25 11:01:50 +010015254 | | %rt | request_counter (HTTP req or TCP session) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015255 | | %s | server_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010015256 | | %sc | srv_conn (server concurrent connections) | numeric |
15257 | | %si | server_IP (target address) | IP |
15258 | | %sp | server_port (target address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015259 | | %sq | srv_queue | numeric |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015260 | S | %sslc| ssl_ciphers (ex: AES-SHA) | string |
15261 | S | %sslv| ssl_version (ex: TLSv1) | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010015262 | | %t | date_time (with millisecond resolution) | date |
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015263 | H | %tr | date_time of HTTP request | date |
15264 | H | %trg | gmt_date_time of start of HTTP request | date |
15265 | H | %trl | locla_date_time of start of HTTP request | date |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015266 | | %ts | termination_state | string |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015267 | H | %tsc | termination_state with cookie status | string |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015268 +---+------+-----------------------------------------------+-------------+
William Lallemand48940402012-01-30 16:47:22 +010015269
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015270 R = Restrictions : H = mode http only ; S = SSL only
William Lallemand48940402012-01-30 16:47:22 +010015271
Willy Tarreau5f51e1a2012-12-03 18:40:10 +010015272
152738.2.5. Error log format
15274-----------------------
15275
15276When an incoming connection fails due to an SSL handshake or an invalid PROXY
15277protocol header, haproxy will log the event using a shorter, fixed line format.
15278By default, logs are emitted at the LOG_INFO level, unless the option
15279"log-separate-errors" is set in the backend, in which case the LOG_ERR level
15280will be used. Connections on which no data are exchanged (eg: probes) are not
15281logged if the "dontlognull" option is set.
15282
15283The format looks like this :
15284
15285 >>> Dec 3 18:27:14 localhost \
15286 haproxy[6103]: 127.0.0.1:56059 [03/Dec/2012:17:35:10.380] frt/f1: \
15287 Connection error during SSL handshake
15288
15289 Field Format Extract from the example above
15290 1 process_name '[' pid ']:' haproxy[6103]:
15291 2 client_ip ':' client_port 127.0.0.1:56059
15292 3 '[' accept_date ']' [03/Dec/2012:17:35:10.380]
15293 4 frontend_name "/" bind_name ":" frt/f1:
15294 5 message Connection error during SSL handshake
15295
15296These fields just provide minimal information to help debugging connection
15297failures.
15298
15299
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200153008.3. Advanced logging options
15301-----------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015302
15303Some advanced logging options are often looked for but are not easy to find out
15304just by looking at the various options. Here is an entry point for the few
15305options which can enable better logging. Please refer to the keywords reference
15306for more information about their usage.
15307
15308
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200153098.3.1. Disabling logging of external tests
15310------------------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015311
15312It is quite common to have some monitoring tools perform health checks on
15313haproxy. Sometimes it will be a layer 3 load-balancer such as LVS or any
15314commercial load-balancer, and sometimes it will simply be a more complete
15315monitoring system such as Nagios. When the tests are very frequent, users often
15316ask how to disable logging for those checks. There are three possibilities :
15317
15318 - if connections come from everywhere and are just TCP probes, it is often
15319 desired to simply disable logging of connections without data exchange, by
15320 setting "option dontlognull" in the frontend. It also disables logging of
15321 port scans, which may or may not be desired.
15322
15323 - if the connection come from a known source network, use "monitor-net" to
15324 declare this network as monitoring only. Any host in this network will then
15325 only be able to perform health checks, and their requests will not be
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030015326 logged. This is generally appropriate to designate a list of equipment
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015327 such as other load-balancers.
15328
15329 - if the tests are performed on a known URI, use "monitor-uri" to declare
15330 this URI as dedicated to monitoring. Any host sending this request will
15331 only get the result of a health-check, and the request will not be logged.
15332
15333
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200153348.3.2. Logging before waiting for the session to terminate
15335----------------------------------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015336
15337The problem with logging at end of connection is that you have no clue about
15338what is happening during very long sessions, such as remote terminal sessions
15339or large file downloads. This problem can be worked around by specifying
15340"option logasap" in the frontend. Haproxy will then log as soon as possible,
15341just before data transfer begins. This means that in case of TCP, it will still
15342log the connection status to the server, and in case of HTTP, it will log just
15343after processing the server headers. In this case, the number of bytes reported
15344is the number of header bytes sent to the client. In order to avoid confusion
15345with normal logs, the total time field and the number of bytes are prefixed
15346with a '+' sign which means that real numbers are certainly larger.
15347
15348
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200153498.3.3. Raising log level upon errors
15350------------------------------------
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020015351
15352Sometimes it is more convenient to separate normal traffic from errors logs,
15353for instance in order to ease error monitoring from log files. When the option
15354"log-separate-errors" is used, connections which experience errors, timeouts,
15355retries, redispatches or HTTP status codes 5xx will see their syslog level
15356raised from "info" to "err". This will help a syslog daemon store the log in
15357a separate file. It is very important to keep the errors in the normal traffic
15358file too, so that log ordering is not altered. You should also be careful if
15359you already have configured your syslog daemon to store all logs higher than
15360"notice" in an "admin" file, because the "err" level is higher than "notice".
15361
15362
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200153638.3.4. Disabling logging of successful connections
15364--------------------------------------------------
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020015365
15366Although this may sound strange at first, some large sites have to deal with
15367multiple thousands of logs per second and are experiencing difficulties keeping
15368them intact for a long time or detecting errors within them. If the option
15369"dontlog-normal" is set on the frontend, all normal connections will not be
15370logged. In this regard, a normal connection is defined as one without any
15371error, timeout, retry nor redispatch. In HTTP, the status code is checked too,
15372and a response with a status 5xx is not considered normal and will be logged
15373too. Of course, doing is is really discouraged as it will remove most of the
15374useful information from the logs. Do this only if you have no other
15375alternative.
15376
15377
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200153788.4. Timing events
15379------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015380
15381Timers provide a great help in troubleshooting network problems. All values are
15382reported in milliseconds (ms). These timers should be used in conjunction with
15383the session termination flags. In TCP mode with "option tcplog" set on the
15384frontend, 3 control points are reported under the form "Tw/Tc/Tt", and in HTTP
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015385mode, 5 control points are reported under the form "TR/Tw/Tc/Tr/Ta". In
15386addition, three other measures are provided, "Th", "Ti", and "Tq".
15387
15388 - Th: total time to accept tcp connection and execute handshakes for low level
15389 protocols. Currently, these protocoles are proxy-protocol and SSL. This may
15390 only happen once during the whole connection's lifetime. A large time here
15391 may indicate that the client only pre-established the connection without
15392 speaking, that it is experiencing network issues preventing it from
15393 completing a handshake in a reasonable time (eg: MTU issues), or that an
15394 SSL handshake was very expensive to compute.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015395
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015396 - Ti: is the idle time before the HTTP request (HTTP mode only). This timer
15397 counts between the end of the handshakes and the first byte of the HTTP
15398 request. When dealing with a second request in keep-alive mode, it starts
15399 to count after the end of the transmission the previous response. Some
15400 browsers pre-establish connections to a server in order to reduce the
15401 latency of a future request, and keep them pending until they need it. This
15402 delay will be reported as the idle time. A value of -1 indicates that
15403 nothing was received on the connection.
15404
15405 - TR: total time to get the client request (HTTP mode only). It's the time
15406 elapsed between the first bytes received and the moment the proxy received
15407 the empty line marking the end of the HTTP headers. The value "-1"
15408 indicates that the end of headers has never been seen. This happens when
15409 the client closes prematurely or times out. This time is usually very short
15410 since most requests fit in a single packet. A large time may indicate a
15411 request typed by hand during a test.
15412
15413 - Tq: total time to get the client request from the accept date or since the
15414 emission of the last byte of the previous response (HTTP mode only). It's
15415 exactly equalt to Th + Ti + TR unless any of them is -1, in which case it
15416 returns -1 as well. This timer used to be very useful before the arrival of
15417 HTTP keep-alive and browsers' pre-connect feature. It's recommended to drop
15418 it in favor of TR nowadays, as the idle time adds a lot of noise to the
15419 reports.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015420
15421 - Tw: total time spent in the queues waiting for a connection slot. It
15422 accounts for backend queue as well as the server queues, and depends on the
15423 queue size, and the time needed for the server to complete previous
15424 requests. The value "-1" means that the request was killed before reaching
15425 the queue, which is generally what happens with invalid or denied requests.
15426
15427 - Tc: total time to establish the TCP connection to the server. It's the time
15428 elapsed between the moment the proxy sent the connection request, and the
15429 moment it was acknowledged by the server, or between the TCP SYN packet and
15430 the matching SYN/ACK packet in return. The value "-1" means that the
15431 connection never established.
15432
15433 - Tr: server response time (HTTP mode only). It's the time elapsed between
15434 the moment the TCP connection was established to the server and the moment
15435 the server sent its complete response headers. It purely shows its request
15436 processing time, without the network overhead due to the data transmission.
15437 It is worth noting that when the client has data to send to the server, for
15438 instance during a POST request, the time already runs, and this can distort
15439 apparent response time. For this reason, it's generally wise not to trust
15440 too much this field for POST requests initiated from clients behind an
15441 untrusted network. A value of "-1" here means that the last the response
15442 header (empty line) was never seen, most likely because the server timeout
15443 stroke before the server managed to process the request.
15444
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015445 - Ta: total active time for the HTTP request, between the moment the proxy
15446 received the first byte of the request header and the emission of the last
15447 byte of the response body. The exception is when the "logasap" option is
15448 specified. In this case, it only equals (TR+Tw+Tc+Tr), and is prefixed with
15449 a '+' sign. From this field, we can deduce "Td", the data transmission time,
15450 by subtracting other timers when valid :
15451
15452 Td = Ta - (TR + Tw + Tc + Tr)
15453
15454 Timers with "-1" values have to be excluded from this equation. Note that
15455 "Ta" can never be negative.
15456
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015457 - Tt: total session duration time, between the moment the proxy accepted it
15458 and the moment both ends were closed. The exception is when the "logasap"
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015459 option is specified. In this case, it only equals (Th+Ti+TR+Tw+Tc+Tr), and
15460 is prefixed with a '+' sign. From this field, we can deduce "Td", the data
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030015461 transmission time, by subtracting other timers when valid :
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015462
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015463 Td = Tt - (Th + Ti + TR + Tw + Tc + Tr)
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015464
15465 Timers with "-1" values have to be excluded from this equation. In TCP
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015466 mode, "Ti", "Tq" and "Tr" have to be excluded too. Note that "Tt" can never
15467 be negative and that for HTTP, Tt is simply equal to (Th+Ti+Ta).
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015468
15469These timers provide precious indications on trouble causes. Since the TCP
15470protocol defines retransmit delays of 3, 6, 12... seconds, we know for sure
15471that timers close to multiples of 3s are nearly always related to lost packets
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015472due to network problems (wires, negotiation, congestion). Moreover, if "Ta" or
15473"Tt" is close to a timeout value specified in the configuration, it often means
15474that a session has been aborted on timeout.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015475
15476Most common cases :
15477
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015478 - If "Th" or "Ti" are close to 3000, a packet has probably been lost between
15479 the client and the proxy. This is very rare on local networks but might
15480 happen when clients are on far remote networks and send large requests. It
15481 may happen that values larger than usual appear here without any network
15482 cause. Sometimes, during an attack or just after a resource starvation has
15483 ended, haproxy may accept thousands of connections in a few milliseconds.
15484 The time spent accepting these connections will inevitably slightly delay
15485 processing of other connections, and it can happen that request times in the
15486 order of a few tens of milliseconds are measured after a few thousands of
15487 new connections have been accepted at once. Using one of the keep-alive
15488 modes may display larger idle times since "Ti" measures the time spent
Patrick Mezard105faca2010-06-12 17:02:46 +020015489 waiting for additional requests.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015490
15491 - If "Tc" is close to 3000, a packet has probably been lost between the
15492 server and the proxy during the server connection phase. This value should
15493 always be very low, such as 1 ms on local networks and less than a few tens
15494 of ms on remote networks.
15495
Willy Tarreau55165fe2009-05-10 12:02:55 +020015496 - If "Tr" is nearly always lower than 3000 except some rare values which seem
15497 to be the average majored by 3000, there are probably some packets lost
15498 between the proxy and the server.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015499
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015500 - If "Ta" is large even for small byte counts, it generally is because
15501 neither the client nor the server decides to close the connection while
15502 haproxy is running in tunnel mode and both have agreed on a keep-alive
15503 connection mode. In order to solve this issue, it will be needed to specify
15504 one of the HTTP options to manipulate keep-alive or close options on either
15505 the frontend or the backend. Having the smallest possible 'Ta' or 'Tt' is
15506 important when connection regulation is used with the "maxconn" option on
15507 the servers, since no new connection will be sent to the server until
15508 another one is released.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015509
15510Other noticeable HTTP log cases ('xx' means any value to be ignored) :
15511
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015512 TR/Tw/Tc/Tr/+Ta The "option logasap" is present on the frontend and the log
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015513 was emitted before the data phase. All the timers are valid
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015514 except "Ta" which is shorter than reality.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015515
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015516 -1/xx/xx/xx/Ta The client was not able to send a complete request in time
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015517 or it aborted too early. Check the session termination flags
15518 then "timeout http-request" and "timeout client" settings.
15519
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015520 TR/-1/xx/xx/Ta It was not possible to process the request, maybe because
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015521 servers were out of order, because the request was invalid
15522 or forbidden by ACL rules. Check the session termination
15523 flags.
15524
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015525 TR/Tw/-1/xx/Ta The connection could not establish on the server. Either it
15526 actively refused it or it timed out after Ta-(TR+Tw) ms.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015527 Check the session termination flags, then check the
15528 "timeout connect" setting. Note that the tarpit action might
15529 return similar-looking patterns, with "Tw" equal to the time
15530 the client connection was maintained open.
15531
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015532 TR/Tw/Tc/-1/Ta The server has accepted the connection but did not return
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030015533 a complete response in time, or it closed its connection
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015534 unexpectedly after Ta-(TR+Tw+Tc) ms. Check the session
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015535 termination flags, then check the "timeout server" setting.
15536
15537
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200155388.5. Session state at disconnection
15539-----------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015540
15541TCP and HTTP logs provide a session termination indicator in the
15542"termination_state" field, just before the number of active connections. It is
155432-characters long in TCP mode, and is extended to 4 characters in HTTP mode,
15544each of which has a special meaning :
15545
15546 - On the first character, a code reporting the first event which caused the
15547 session to terminate :
15548
15549 C : the TCP session was unexpectedly aborted by the client.
15550
15551 S : the TCP session was unexpectedly aborted by the server, or the
15552 server explicitly refused it.
15553
15554 P : the session was prematurely aborted by the proxy, because of a
15555 connection limit enforcement, because a DENY filter was matched,
15556 because of a security check which detected and blocked a dangerous
15557 error in server response which might have caused information leak
Willy Tarreau570f2212013-06-10 16:42:09 +020015558 (eg: cacheable cookie).
15559
15560 L : the session was locally processed by haproxy and was not passed to
15561 a server. This is what happens for stats and redirects.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015562
15563 R : a resource on the proxy has been exhausted (memory, sockets, source
15564 ports, ...). Usually, this appears during the connection phase, and
15565 system logs should contain a copy of the precise error. If this
15566 happens, it must be considered as a very serious anomaly which
15567 should be fixed as soon as possible by any means.
15568
15569 I : an internal error was identified by the proxy during a self-check.
15570 This should NEVER happen, and you are encouraged to report any log
15571 containing this, because this would almost certainly be a bug. It
15572 would be wise to preventively restart the process after such an
15573 event too, in case it would be caused by memory corruption.
15574
Simon Horman752dc4a2011-06-21 14:34:59 +090015575 D : the session was killed by haproxy because the server was detected
15576 as down and was configured to kill all connections when going down.
15577
Justin Karnegeseb2c24a2012-05-24 15:28:52 -070015578 U : the session was killed by haproxy on this backup server because an
15579 active server was detected as up and was configured to kill all
15580 backup connections when going up.
15581
Willy Tarreaua2a64e92011-09-07 23:01:56 +020015582 K : the session was actively killed by an admin operating on haproxy.
15583
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015584 c : the client-side timeout expired while waiting for the client to
15585 send or receive data.
15586
15587 s : the server-side timeout expired while waiting for the server to
15588 send or receive data.
15589
15590 - : normal session completion, both the client and the server closed
15591 with nothing left in the buffers.
15592
15593 - on the second character, the TCP or HTTP session state when it was closed :
15594
Willy Tarreauf7b30a92010-12-06 22:59:17 +010015595 R : the proxy was waiting for a complete, valid REQUEST from the client
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015596 (HTTP mode only). Nothing was sent to any server.
15597
15598 Q : the proxy was waiting in the QUEUE for a connection slot. This can
15599 only happen when servers have a 'maxconn' parameter set. It can
15600 also happen in the global queue after a redispatch consecutive to
15601 a failed attempt to connect to a dying server. If no redispatch is
15602 reported, then no connection attempt was made to any server.
15603
15604 C : the proxy was waiting for the CONNECTION to establish on the
15605 server. The server might at most have noticed a connection attempt.
15606
15607 H : the proxy was waiting for complete, valid response HEADERS from the
15608 server (HTTP only).
15609
15610 D : the session was in the DATA phase.
15611
15612 L : the proxy was still transmitting LAST data to the client while the
15613 server had already finished. This one is very rare as it can only
15614 happen when the client dies while receiving the last packets.
15615
15616 T : the request was tarpitted. It has been held open with the client
15617 during the whole "timeout tarpit" duration or until the client
15618 closed, both of which will be reported in the "Tw" timer.
15619
15620 - : normal session completion after end of data transfer.
15621
15622 - the third character tells whether the persistence cookie was provided by
15623 the client (only in HTTP mode) :
15624
15625 N : the client provided NO cookie. This is usually the case for new
15626 visitors, so counting the number of occurrences of this flag in the
15627 logs generally indicate a valid trend for the site frequentation.
15628
15629 I : the client provided an INVALID cookie matching no known server.
15630 This might be caused by a recent configuration change, mixed
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +020015631 cookies between HTTP/HTTPS sites, persistence conditionally
15632 ignored, or an attack.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015633
15634 D : the client provided a cookie designating a server which was DOWN,
15635 so either "option persist" was used and the client was sent to
15636 this server, or it was not set and the client was redispatched to
15637 another server.
15638
Willy Tarreau996a92c2010-10-13 19:30:47 +020015639 V : the client provided a VALID cookie, and was sent to the associated
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015640 server.
15641
Willy Tarreau996a92c2010-10-13 19:30:47 +020015642 E : the client provided a valid cookie, but with a last date which was
15643 older than what is allowed by the "maxidle" cookie parameter, so
15644 the cookie is consider EXPIRED and is ignored. The request will be
15645 redispatched just as if there was no cookie.
15646
15647 O : the client provided a valid cookie, but with a first date which was
15648 older than what is allowed by the "maxlife" cookie parameter, so
15649 the cookie is consider too OLD and is ignored. The request will be
15650 redispatched just as if there was no cookie.
15651
Willy Tarreauc89ccb62012-04-05 21:18:22 +020015652 U : a cookie was present but was not used to select the server because
15653 some other server selection mechanism was used instead (typically a
15654 "use-server" rule).
15655
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015656 - : does not apply (no cookie set in configuration).
15657
15658 - the last character reports what operations were performed on the persistence
15659 cookie returned by the server (only in HTTP mode) :
15660
15661 N : NO cookie was provided by the server, and none was inserted either.
15662
15663 I : no cookie was provided by the server, and the proxy INSERTED one.
15664 Note that in "cookie insert" mode, if the server provides a cookie,
15665 it will still be overwritten and reported as "I" here.
15666
Willy Tarreau996a92c2010-10-13 19:30:47 +020015667 U : the proxy UPDATED the last date in the cookie that was presented by
15668 the client. This can only happen in insert mode with "maxidle". It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030015669 happens every time there is activity at a different date than the
Willy Tarreau996a92c2010-10-13 19:30:47 +020015670 date indicated in the cookie. If any other change happens, such as
15671 a redispatch, then the cookie will be marked as inserted instead.
15672
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015673 P : a cookie was PROVIDED by the server and transmitted as-is.
15674
15675 R : the cookie provided by the server was REWRITTEN by the proxy, which
15676 happens in "cookie rewrite" or "cookie prefix" modes.
15677
15678 D : the cookie provided by the server was DELETED by the proxy.
15679
15680 - : does not apply (no cookie set in configuration).
15681
Willy Tarreau996a92c2010-10-13 19:30:47 +020015682The combination of the two first flags gives a lot of information about what
15683was happening when the session terminated, and why it did terminate. It can be
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015684helpful to detect server saturation, network troubles, local system resource
15685starvation, attacks, etc...
15686
15687The most common termination flags combinations are indicated below. They are
15688alphabetically sorted, with the lowercase set just after the upper case for
15689easier finding and understanding.
15690
15691 Flags Reason
15692
15693 -- Normal termination.
15694
15695 CC The client aborted before the connection could be established to the
15696 server. This can happen when haproxy tries to connect to a recently
15697 dead (or unchecked) server, and the client aborts while haproxy is
15698 waiting for the server to respond or for "timeout connect" to expire.
15699
15700 CD The client unexpectedly aborted during data transfer. This can be
15701 caused by a browser crash, by an intermediate equipment between the
15702 client and haproxy which decided to actively break the connection,
15703 by network routing issues between the client and haproxy, or by a
15704 keep-alive session between the server and the client terminated first
15705 by the client.
Willy Tarreaud72758d2010-01-12 10:42:19 +010015706
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015707 cD The client did not send nor acknowledge any data for as long as the
15708 "timeout client" delay. This is often caused by network failures on
Cyril Bontédc4d9032012-04-08 21:57:39 +020015709 the client side, or the client simply leaving the net uncleanly.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015710
15711 CH The client aborted while waiting for the server to start responding.
15712 It might be the server taking too long to respond or the client
15713 clicking the 'Stop' button too fast.
15714
15715 cH The "timeout client" stroke while waiting for client data during a
15716 POST request. This is sometimes caused by too large TCP MSS values
15717 for PPPoE networks which cannot transport full-sized packets. It can
15718 also happen when client timeout is smaller than server timeout and
15719 the server takes too long to respond.
15720
15721 CQ The client aborted while its session was queued, waiting for a server
15722 with enough empty slots to accept it. It might be that either all the
15723 servers were saturated or that the assigned server was taking too
15724 long a time to respond.
15725
15726 CR The client aborted before sending a full HTTP request. Most likely
15727 the request was typed by hand using a telnet client, and aborted
15728 too early. The HTTP status code is likely a 400 here. Sometimes this
15729 might also be caused by an IDS killing the connection between haproxy
Willy Tarreau0f228a02015-05-01 15:37:53 +020015730 and the client. "option http-ignore-probes" can be used to ignore
15731 connections without any data transfer.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015732
15733 cR The "timeout http-request" stroke before the client sent a full HTTP
15734 request. This is sometimes caused by too large TCP MSS values on the
15735 client side for PPPoE networks which cannot transport full-sized
15736 packets, or by clients sending requests by hand and not typing fast
15737 enough, or forgetting to enter the empty line at the end of the
Willy Tarreau2705a612014-05-23 17:38:34 +020015738 request. The HTTP status code is likely a 408 here. Note: recently,
Willy Tarreau0f228a02015-05-01 15:37:53 +020015739 some browsers started to implement a "pre-connect" feature consisting
15740 in speculatively connecting to some recently visited web sites just
15741 in case the user would like to visit them. This results in many
15742 connections being established to web sites, which end up in 408
15743 Request Timeout if the timeout strikes first, or 400 Bad Request when
15744 the browser decides to close them first. These ones pollute the log
15745 and feed the error counters. Some versions of some browsers have even
15746 been reported to display the error code. It is possible to work
15747 around the undesirable effects of this behaviour by adding "option
15748 http-ignore-probes" in the frontend, resulting in connections with
15749 zero data transfer to be totally ignored. This will definitely hide
15750 the errors of people experiencing connectivity issues though.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015751
15752 CT The client aborted while its session was tarpitted. It is important to
15753 check if this happens on valid requests, in order to be sure that no
Willy Tarreau55165fe2009-05-10 12:02:55 +020015754 wrong tarpit rules have been written. If a lot of them happen, it
15755 might make sense to lower the "timeout tarpit" value to something
15756 closer to the average reported "Tw" timer, in order not to consume
15757 resources for just a few attackers.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015758
Willy Tarreau570f2212013-06-10 16:42:09 +020015759 LR The request was intercepted and locally handled by haproxy. Generally
15760 it means that this was a redirect or a stats request.
15761
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010015762 SC The server or an equipment between it and haproxy explicitly refused
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015763 the TCP connection (the proxy received a TCP RST or an ICMP message
15764 in return). Under some circumstances, it can also be the network
15765 stack telling the proxy that the server is unreachable (eg: no route,
15766 or no ARP response on local network). When this happens in HTTP mode,
15767 the status code is likely a 502 or 503 here.
15768
15769 sC The "timeout connect" stroke before a connection to the server could
15770 complete. When this happens in HTTP mode, the status code is likely a
15771 503 or 504 here.
15772
15773 SD The connection to the server died with an error during the data
15774 transfer. This usually means that haproxy has received an RST from
15775 the server or an ICMP message from an intermediate equipment while
15776 exchanging data with the server. This can be caused by a server crash
15777 or by a network issue on an intermediate equipment.
15778
15779 sD The server did not send nor acknowledge any data for as long as the
15780 "timeout server" setting during the data phase. This is often caused
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010015781 by too short timeouts on L4 equipments before the server (firewalls,
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015782 load-balancers, ...), as well as keep-alive sessions maintained
15783 between the client and the server expiring first on haproxy.
15784
15785 SH The server aborted before sending its full HTTP response headers, or
15786 it crashed while processing the request. Since a server aborting at
15787 this moment is very rare, it would be wise to inspect its logs to
15788 control whether it crashed and why. The logged request may indicate a
15789 small set of faulty requests, demonstrating bugs in the application.
15790 Sometimes this might also be caused by an IDS killing the connection
15791 between haproxy and the server.
15792
15793 sH The "timeout server" stroke before the server could return its
15794 response headers. This is the most common anomaly, indicating too
15795 long transactions, probably caused by server or database saturation.
15796 The immediate workaround consists in increasing the "timeout server"
15797 setting, but it is important to keep in mind that the user experience
15798 will suffer from these long response times. The only long term
15799 solution is to fix the application.
15800
15801 sQ The session spent too much time in queue and has been expired. See
15802 the "timeout queue" and "timeout connect" settings to find out how to
15803 fix this if it happens too often. If it often happens massively in
15804 short periods, it may indicate general problems on the affected
15805 servers due to I/O or database congestion, or saturation caused by
15806 external attacks.
15807
15808 PC The proxy refused to establish a connection to the server because the
15809 process' socket limit has been reached while attempting to connect.
Cyril Bontédc4d9032012-04-08 21:57:39 +020015810 The global "maxconn" parameter may be increased in the configuration
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015811 so that it does not happen anymore. This status is very rare and
15812 might happen when the global "ulimit-n" parameter is forced by hand.
15813
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010015814 PD The proxy blocked an incorrectly formatted chunked encoded message in
15815 a request or a response, after the server has emitted its headers. In
15816 most cases, this will indicate an invalid message from the server to
Willy Tarreauf3a3e132013-08-31 08:16:26 +020015817 the client. Haproxy supports chunk sizes of up to 2GB - 1 (2147483647
15818 bytes). Any larger size will be considered as an error.
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010015819
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015820 PH The proxy blocked the server's response, because it was invalid,
15821 incomplete, dangerous (cache control), or matched a security filter.
15822 In any case, an HTTP 502 error is sent to the client. One possible
15823 cause for this error is an invalid syntax in an HTTP header name
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010015824 containing unauthorized characters. It is also possible but quite
15825 rare, that the proxy blocked a chunked-encoding request from the
15826 client due to an invalid syntax, before the server responded. In this
15827 case, an HTTP 400 error is sent to the client and reported in the
15828 logs.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015829
15830 PR The proxy blocked the client's HTTP request, either because of an
15831 invalid HTTP syntax, in which case it returned an HTTP 400 error to
15832 the client, or because a deny filter matched, in which case it
15833 returned an HTTP 403 error.
15834
15835 PT The proxy blocked the client's request and has tarpitted its
15836 connection before returning it a 500 server error. Nothing was sent
15837 to the server. The connection was maintained open for as long as
15838 reported by the "Tw" timer field.
15839
15840 RC A local resource has been exhausted (memory, sockets, source ports)
15841 preventing the connection to the server from establishing. The error
15842 logs will tell precisely what was missing. This is very rare and can
15843 only be solved by proper system tuning.
15844
Willy Tarreau996a92c2010-10-13 19:30:47 +020015845The combination of the two last flags gives a lot of information about how
15846persistence was handled by the client, the server and by haproxy. This is very
15847important to troubleshoot disconnections, when users complain they have to
15848re-authenticate. The commonly encountered flags are :
15849
15850 -- Persistence cookie is not enabled.
15851
15852 NN No cookie was provided by the client, none was inserted in the
15853 response. For instance, this can be in insert mode with "postonly"
15854 set on a GET request.
15855
15856 II A cookie designating an invalid server was provided by the client,
15857 a valid one was inserted in the response. This typically happens when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040015858 a "server" entry is removed from the configuration, since its cookie
Willy Tarreau996a92c2010-10-13 19:30:47 +020015859 value can be presented by a client when no other server knows it.
15860
15861 NI No cookie was provided by the client, one was inserted in the
15862 response. This typically happens for first requests from every user
15863 in "insert" mode, which makes it an easy way to count real users.
15864
15865 VN A cookie was provided by the client, none was inserted in the
15866 response. This happens for most responses for which the client has
15867 already got a cookie.
15868
15869 VU A cookie was provided by the client, with a last visit date which is
15870 not completely up-to-date, so an updated cookie was provided in
15871 response. This can also happen if there was no date at all, or if
15872 there was a date but the "maxidle" parameter was not set, so that the
15873 cookie can be switched to unlimited time.
15874
15875 EI A cookie was provided by the client, with a last visit date which is
15876 too old for the "maxidle" parameter, so the cookie was ignored and a
15877 new cookie was inserted in the response.
15878
15879 OI A cookie was provided by the client, with a first visit date which is
15880 too old for the "maxlife" parameter, so the cookie was ignored and a
15881 new cookie was inserted in the response.
15882
15883 DI The server designated by the cookie was down, a new server was
15884 selected and a new cookie was emitted in the response.
15885
15886 VI The server designated by the cookie was not marked dead but could not
15887 be reached. A redispatch happened and selected another one, which was
15888 then advertised in the response.
15889
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015890
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200158918.6. Non-printable characters
15892-----------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015893
15894In order not to cause trouble to log analysis tools or terminals during log
15895consulting, non-printable characters are not sent as-is into log files, but are
15896converted to the two-digits hexadecimal representation of their ASCII code,
15897prefixed by the character '#'. The only characters that can be logged without
15898being escaped are comprised between 32 and 126 (inclusive). Obviously, the
15899escape character '#' itself is also encoded to avoid any ambiguity ("#23"). It
15900is the same for the character '"' which becomes "#22", as well as '{', '|' and
15901'}' when logging headers.
15902
15903Note that the space character (' ') is not encoded in headers, which can cause
15904issues for tools relying on space count to locate fields. A typical header
15905containing spaces is "User-Agent".
15906
15907Last, it has been observed that some syslog daemons such as syslog-ng escape
15908the quote ('"') with a backslash ('\'). The reverse operation can safely be
15909performed since no quote may appear anywhere else in the logs.
15910
15911
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200159128.7. Capturing HTTP cookies
15913---------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015914
15915Cookie capture simplifies the tracking a complete user session. This can be
15916achieved using the "capture cookie" statement in the frontend. Please refer to
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015917section 4.2 for more details. Only one cookie can be captured, and the same
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015918cookie will simultaneously be checked in the request ("Cookie:" header) and in
15919the response ("Set-Cookie:" header). The respective values will be reported in
15920the HTTP logs at the "captured_request_cookie" and "captured_response_cookie"
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015921locations (see section 8.2.3 about HTTP log format). When either cookie is
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015922not seen, a dash ('-') replaces the value. This way, it's easy to detect when a
15923user switches to a new session for example, because the server will reassign it
15924a new cookie. It is also possible to detect if a server unexpectedly sets a
15925wrong cookie to a client, leading to session crossing.
15926
15927 Examples :
15928 # capture the first cookie whose name starts with "ASPSESSION"
15929 capture cookie ASPSESSION len 32
15930
15931 # capture the first cookie whose name is exactly "vgnvisitor"
15932 capture cookie vgnvisitor= len 32
15933
15934
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200159358.8. Capturing HTTP headers
15936---------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015937
15938Header captures are useful to track unique request identifiers set by an upper
15939proxy, virtual host names, user-agents, POST content-length, referrers, etc. In
15940the response, one can search for information about the response length, how the
15941server asked the cache to behave, or an object location during a redirection.
15942
15943Header captures are performed using the "capture request header" and "capture
15944response header" statements in the frontend. Please consult their definition in
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015945section 4.2 for more details.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015946
15947It is possible to include both request headers and response headers at the same
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010015948time. Non-existent headers are logged as empty strings, and if one header
15949appears more than once, only its last occurrence will be logged. Request headers
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015950are grouped within braces '{' and '}' in the same order as they were declared,
15951and delimited with a vertical bar '|' without any space. Response headers
15952follow the same representation, but are displayed after a space following the
15953request headers block. These blocks are displayed just before the HTTP request
15954in the logs.
15955
Willy Tarreaud9ed3d22014-06-13 12:23:06 +020015956As a special case, it is possible to specify an HTTP header capture in a TCP
15957frontend. The purpose is to enable logging of headers which will be parsed in
15958an HTTP backend if the request is then switched to this HTTP backend.
15959
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015960 Example :
15961 # This instance chains to the outgoing proxy
15962 listen proxy-out
15963 mode http
15964 option httplog
15965 option logasap
15966 log global
15967 server cache1 192.168.1.1:3128
15968
15969 # log the name of the virtual server
15970 capture request header Host len 20
15971
15972 # log the amount of data uploaded during a POST
15973 capture request header Content-Length len 10
15974
15975 # log the beginning of the referrer
15976 capture request header Referer len 20
15977
15978 # server name (useful for outgoing proxies only)
15979 capture response header Server len 20
15980
15981 # logging the content-length is useful with "option logasap"
15982 capture response header Content-Length len 10
15983
15984 # log the expected cache behaviour on the response
15985 capture response header Cache-Control len 8
15986
15987 # the Via header will report the next proxy's name
15988 capture response header Via len 20
15989
15990 # log the URL location during a redirection
15991 capture response header Location len 20
15992
15993 >>> Aug 9 20:26:09 localhost \
15994 haproxy[2022]: 127.0.0.1:34014 [09/Aug/2004:20:26:09] proxy-out \
15995 proxy-out/cache1 0/0/0/162/+162 200 +350 - - ---- 0/0/0/0/0 0/0 \
15996 {fr.adserver.yahoo.co||http://fr.f416.mail.} {|864|private||} \
15997 "GET http://fr.adserver.yahoo.com/"
15998
15999 >>> Aug 9 20:30:46 localhost \
16000 haproxy[2022]: 127.0.0.1:34020 [09/Aug/2004:20:30:46] proxy-out \
16001 proxy-out/cache1 0/0/0/182/+182 200 +279 - - ---- 0/0/0/0/0 0/0 \
16002 {w.ods.org||} {Formilux/0.1.8|3495|||} \
Willy Tarreaud72758d2010-01-12 10:42:19 +010016003 "GET http://trafic.1wt.eu/ HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016004
16005 >>> Aug 9 20:30:46 localhost \
16006 haproxy[2022]: 127.0.0.1:34028 [09/Aug/2004:20:30:46] proxy-out \
16007 proxy-out/cache1 0/0/2/126/+128 301 +223 - - ---- 0/0/0/0/0 0/0 \
16008 {www.sytadin.equipement.gouv.fr||http://trafic.1wt.eu/} \
16009 {Apache|230|||http://www.sytadin.} \
Willy Tarreaud72758d2010-01-12 10:42:19 +010016010 "GET http://www.sytadin.equipement.gouv.fr/ HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016011
16012
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200160138.9. Examples of logs
16014---------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016015
16016These are real-world examples of logs accompanied with an explanation. Some of
16017them have been made up by hand. The syslog part has been removed for better
16018reading. Their sole purpose is to explain how to decipher them.
16019
16020 >>> haproxy[674]: 127.0.0.1:33318 [15/Oct/2003:08:31:57.130] px-http \
16021 px-http/srv1 6559/0/7/147/6723 200 243 - - ---- 5/3/3/1/0 0/0 \
16022 "HEAD / HTTP/1.0"
16023
16024 => long request (6.5s) entered by hand through 'telnet'. The server replied
16025 in 147 ms, and the session ended normally ('----')
16026
16027 >>> haproxy[674]: 127.0.0.1:33319 [15/Oct/2003:08:31:57.149] px-http \
16028 px-http/srv1 6559/1230/7/147/6870 200 243 - - ---- 324/239/239/99/0 \
16029 0/9 "HEAD / HTTP/1.0"
16030
16031 => Idem, but the request was queued in the global queue behind 9 other
16032 requests, and waited there for 1230 ms.
16033
16034 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.654] px-http \
16035 px-http/srv1 9/0/7/14/+30 200 +243 - - ---- 3/3/3/1/0 0/0 \
16036 "GET /image.iso HTTP/1.0"
16037
16038 => request for a long data transfer. The "logasap" option was specified, so
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010016039 the log was produced just before transferring data. The server replied in
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016040 14 ms, 243 bytes of headers were sent to the client, and total time from
16041 accept to first data byte is 30 ms.
16042
16043 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.925] px-http \
16044 px-http/srv1 9/0/7/14/30 502 243 - - PH-- 3/2/2/0/0 0/0 \
16045 "GET /cgi-bin/bug.cgi? HTTP/1.0"
16046
16047 => the proxy blocked a server response either because of an "rspdeny" or
16048 "rspideny" filter, or because the response was improperly formatted and
Willy Tarreau3c92c5f2011-08-28 09:45:47 +020016049 not HTTP-compliant, or because it blocked sensitive information which
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016050 risked being cached. In this case, the response is replaced with a "502
16051 bad gateway". The flags ("PH--") tell us that it was haproxy who decided
16052 to return the 502 and not the server.
16053
16054 >>> haproxy[18113]: 127.0.0.1:34548 [15/Oct/2003:15:18:55.798] px-http \
Willy Tarreaud72758d2010-01-12 10:42:19 +010016055 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 +010016056
16057 => the client never completed its request and aborted itself ("C---") after
16058 8.5s, while the proxy was waiting for the request headers ("-R--").
16059 Nothing was sent to any server.
16060
16061 >>> haproxy[18113]: 127.0.0.1:34549 [15/Oct/2003:15:19:06.103] px-http \
16062 px-http/<NOSRV> -1/-1/-1/-1/50001 408 0 - - cR-- 2/2/2/0/0 0/0 ""
16063
16064 => The client never completed its request, which was aborted by the
16065 time-out ("c---") after 50s, while the proxy was waiting for the request
16066 headers ("-R--"). Nothing was sent to any server, but the proxy could
16067 send a 408 return code to the client.
16068
16069 >>> haproxy[18989]: 127.0.0.1:34550 [15/Oct/2003:15:24:28.312] px-tcp \
16070 px-tcp/srv1 0/0/5007 0 cD 0/0/0/0/0 0/0
16071
16072 => This log was produced with "option tcplog". The client timed out after
16073 5 seconds ("c----").
16074
16075 >>> haproxy[18989]: 10.0.0.1:34552 [15/Oct/2003:15:26:31.462] px-http \
16076 px-http/srv1 3183/-1/-1/-1/11215 503 0 - - SC-- 205/202/202/115/3 \
Willy Tarreaud72758d2010-01-12 10:42:19 +010016077 0/0 "HEAD / HTTP/1.0"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016078
16079 => The request took 3s to complete (probably a network problem), and the
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016080 connection to the server failed ('SC--') after 4 attempts of 2 seconds
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016081 (config says 'retries 3'), and no redispatch (otherwise we would have
16082 seen "/+3"). Status code 503 was returned to the client. There were 115
16083 connections on this server, 202 connections on this proxy, and 205 on
16084 the global process. It is possible that the server refused the
16085 connection because of too many already established.
Willy Tarreau844e3c52008-01-11 16:28:18 +010016086
Willy Tarreau52b2d222011-09-07 23:48:48 +020016087
Christopher Fauletc3fe5332016-04-07 15:30:10 +0200160889. Supported filters
16089--------------------
16090
16091Here are listed officially supported filters with the list of parameters they
16092accept. Depending on compile options, some of these filters might be
16093unavailable. The list of available filters is reported in haproxy -vv.
16094
16095See also : "filter"
16096
160979.1. Trace
16098----------
16099
16100filter trace [name <name>] [random-parsing] [random-forwarding]
16101
16102 Arguments:
16103 <name> is an arbitrary name that will be reported in
16104 messages. If no name is provided, "TRACE" is used.
16105
16106 <random-parsing> enables the random parsing of data exchanged between
16107 the client and the server. By default, this filter
16108 parses all available data. With this parameter, it
16109 only parses a random amount of the available data.
16110
16111 <random-forwarding> enables the random forwading of parsed data. By
16112 default, this filter forwards all previously parsed
16113 data. With this parameter, it only forwards a random
16114 amount of the parsed data.
16115
16116This filter can be used as a base to develop new filters. It defines all
16117callbacks and print a message on the standard error stream (stderr) with useful
16118information for all of them. It may be useful to debug the activity of other
16119filters or, quite simply, HAProxy's activity.
16120
16121Using <random-parsing> and/or <random-forwarding> parameters is a good way to
16122tests the behavior of a filter that parses data exchanged between a client and
16123a server by adding some latencies in the processing.
16124
16125
161269.2. HTTP compression
16127---------------------
16128
16129filter compression
16130
16131The HTTP compression has been moved in a filter in HAProxy 1.7. "compression"
16132keyword must still be used to enable and configure the HTTP compression. And
16133when no other filter is used, it is enough. But it is mandatory to explicitly
16134use a filter line to enable the HTTP compression when two or more filters are
16135used for the same listener/frontend/backend. This is important to know the
16136filters evaluation order.
16137
16138See also : "compression"
16139
16140
Willy Tarreau0ba27502007-12-24 16:55:16 +010016141/*
16142 * Local variables:
16143 * fill-column: 79
16144 * End:
16145 */