blob: 712afffa1d1cd99bbbbe4959e0f93bf0d3b0f3bc [file] [log] [blame]
Willy Tarreau6a06a402007-07-15 20:15:28 +02001 ----------------------
2 HAProxy
3 Configuration Manual
4 ----------------------
Willy Tarreau21475e32010-05-23 08:46:08 +02005 version 1.5
Willy Tarreau6a06a402007-07-15 20:15:28 +02006 willy tarreau
Willy Tarreaueab1dc62013-06-17 15:10:25 +02007 2013/06/17
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
422.2. Time format
Patrick Mezard35da19c2010-06-12 17:02:47 +0200432.3. Examples
Willy Tarreauc57f0e22009-05-10 13:12:33 +020044
453. Global parameters
463.1. Process management and security
473.2. Performance tuning
483.3. Debugging
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100493.4. Userlists
Cyril Bontédc4d9032012-04-08 21:57:39 +0200503.5. Peers
Willy Tarreauc57f0e22009-05-10 13:12:33 +020051
524. Proxies
534.1. Proxy keywords matrix
544.2. Alphabetically sorted keywords reference
55
Willy Tarreau086fbf52012-09-24 20:34:51 +0200565. Bind and Server options
575.1. Bind options
585.2. Server and default-server options
Willy Tarreauc57f0e22009-05-10 13:12:33 +020059
606. HTTP header manipulation
61
Willy Tarreau74ca5042013-06-11 23:12:07 +0200627. Using ACLs and fetching samples
637.1. ACL basics
647.1.1. Matching booleans
657.1.2. Matching integers
667.1.3. Matching strings
677.1.4. Matching regular expressions (regexes)
687.1.5. Matching arbitrary data blocks
697.1.6. Matching IPv4 and IPv6 addresses
707.2. Using ACLs to form conditions
717.3. Fetching samples
727.3.1. Fetching samples from internal states
737.3.2. Fetching samples at Layer 4
747.3.3. Fetching samples at Layer 5
757.3.4. Fetching samples from buffer contents (Layer 6)
767.3.5. Fetching HTTP samples (Layer 7)
777.4. Pre-defined ACLs
Willy Tarreauc57f0e22009-05-10 13:12:33 +020078
798. Logging
808.1. Log levels
818.2. Log formats
828.2.1. Default log format
838.2.2. TCP log format
848.2.3. HTTP log format
William Lallemand48940402012-01-30 16:47:22 +0100858.2.4. Custom log format
Willy Tarreau5f51e1a2012-12-03 18:40:10 +0100868.2.5. Error log format
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200878.3. Advanced logging options
888.3.1. Disabling logging of external tests
898.3.2. Logging before waiting for the session to terminate
908.3.3. Raising log level upon errors
918.3.4. Disabling logging of successful connections
928.4. Timing events
938.5. Session state at disconnection
948.6. Non-printable characters
958.7. Capturing HTTP cookies
968.8. Capturing HTTP headers
978.9. Examples of logs
98
999. Statistics and monitoring
1009.1. CSV format
1019.2. Unix Socket commands
102
103
1041. Quick reminder about HTTP
105----------------------------
106
107When haproxy is running in HTTP mode, both the request and the response are
108fully analyzed and indexed, thus it becomes possible to build matching criteria
109on almost anything found in the contents.
110
111However, it is important to understand how HTTP requests and responses are
112formed, and how HAProxy decomposes them. It will then become easier to write
113correct rules and to debug existing configurations.
114
115
1161.1. The HTTP transaction model
117-------------------------------
118
119The HTTP protocol is transaction-driven. This means that each request will lead
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +0100120to one and only one response. Traditionally, a TCP connection is established
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200121from the client to the server, a request is sent by the client on the
122connection, the server responds and the connection is closed. A new request
123will involve a new connection :
124
125 [CON1] [REQ1] ... [RESP1] [CLO1] [CON2] [REQ2] ... [RESP2] [CLO2] ...
126
127In this mode, called the "HTTP close" mode, there are as many connection
128establishments as there are HTTP transactions. Since the connection is closed
129by the server after the response, the client does not need to know the content
130length.
131
132Due to the transactional nature of the protocol, it was possible to improve it
133to avoid closing a connection between two subsequent transactions. In this mode
134however, it is mandatory that the server indicates the content length for each
135response so that the client does not wait indefinitely. For this, a special
136header is used: "Content-length". This mode is called the "keep-alive" mode :
137
138 [CON] [REQ1] ... [RESP1] [REQ2] ... [RESP2] [CLO] ...
139
140Its advantages are a reduced latency between transactions, and less processing
141power required on the server side. It is generally better than the close mode,
142but not always because the clients often limit their concurrent connections to
Patrick Mezard9ec2ec42010-06-12 17:02:45 +0200143a smaller value.
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200144
145A last improvement in the communications is the pipelining mode. It still uses
146keep-alive, but the client does not wait for the first response to send the
147second request. This is useful for fetching large number of images composing a
148page :
149
150 [CON] [REQ1] [REQ2] ... [RESP1] [RESP2] [CLO] ...
151
152This can obviously have a tremendous benefit on performance because the network
153latency is eliminated between subsequent requests. Many HTTP agents do not
154correctly support pipelining since there is no way to associate a response with
155the corresponding request in HTTP. For this reason, it is mandatory for the
Cyril Bonté78caf842010-03-10 22:41:43 +0100156server to reply in the exact same order as the requests were received.
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200157
Patrick Mezard9ec2ec42010-06-12 17:02:45 +0200158By default HAProxy operates in a tunnel-like mode with regards to persistent
159connections: for each connection it processes the first request and forwards
160everything else (including additional requests) to selected server. Once
161established, the connection is persisted both on the client and server
162sides. Use "option http-server-close" to preserve client persistent connections
163while handling every incoming request individually, dispatching them one after
164another to servers, in HTTP close mode. Use "option httpclose" to switch both
165sides to HTTP close mode. "option forceclose" and "option
166http-pretend-keepalive" help working around servers misbehaving in HTTP close
167mode.
168
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200169
1701.2. HTTP request
171-----------------
172
173First, let's consider this HTTP request :
174
175 Line Contents
Willy Tarreaud72758d2010-01-12 10:42:19 +0100176 number
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200177 1 GET /serv/login.php?lang=en&profile=2 HTTP/1.1
178 2 Host: www.mydomain.com
179 3 User-agent: my small browser
180 4 Accept: image/jpeg, image/gif
181 5 Accept: image/png
182
183
1841.2.1. The Request line
185-----------------------
186
187Line 1 is the "request line". It is always composed of 3 fields :
188
189 - a METHOD : GET
190 - a URI : /serv/login.php?lang=en&profile=2
191 - a version tag : HTTP/1.1
192
193All of them are delimited by what the standard calls LWS (linear white spaces),
194which are commonly spaces, but can also be tabs or line feeds/carriage returns
195followed by spaces/tabs. The method itself cannot contain any colon (':') and
196is limited to alphabetic letters. All those various combinations make it
197desirable that HAProxy performs the splitting itself rather than leaving it to
198the user to write a complex or inaccurate regular expression.
199
200The URI itself can have several forms :
201
202 - A "relative URI" :
203
204 /serv/login.php?lang=en&profile=2
205
206 It is a complete URL without the host part. This is generally what is
207 received by servers, reverse proxies and transparent proxies.
208
209 - An "absolute URI", also called a "URL" :
210
211 http://192.168.0.12:8080/serv/login.php?lang=en&profile=2
212
213 It is composed of a "scheme" (the protocol name followed by '://'), a host
214 name or address, optionally a colon (':') followed by a port number, then
215 a relative URI beginning at the first slash ('/') after the address part.
216 This is generally what proxies receive, but a server supporting HTTP/1.1
217 must accept this form too.
218
219 - a star ('*') : this form is only accepted in association with the OPTIONS
220 method and is not relayable. It is used to inquiry a next hop's
221 capabilities.
Willy Tarreaud72758d2010-01-12 10:42:19 +0100222
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200223 - an address:port combination : 192.168.0.12:80
224 This is used with the CONNECT method, which is used to establish TCP
225 tunnels through HTTP proxies, generally for HTTPS, but sometimes for
226 other protocols too.
227
228In a relative URI, two sub-parts are identified. The part before the question
229mark is called the "path". It is typically the relative path to static objects
230on the server. The part after the question mark is called the "query string".
231It is mostly used with GET requests sent to dynamic scripts and is very
232specific to the language, framework or application in use.
233
234
2351.2.2. The request headers
236--------------------------
237
238The headers start at the second line. They are composed of a name at the
239beginning of the line, immediately followed by a colon (':'). Traditionally,
240an LWS is added after the colon but that's not required. Then come the values.
241Multiple identical headers may be folded into one single line, delimiting the
242values with commas, provided that their order is respected. This is commonly
243encountered in the "Cookie:" field. A header may span over multiple lines if
244the subsequent lines begin with an LWS. In the example in 1.2, lines 4 and 5
245define a total of 3 values for the "Accept:" header.
246
247Contrary to a common mis-conception, header names are not case-sensitive, and
248their values are not either if they refer to other header names (such as the
249"Connection:" header).
250
251The end of the headers is indicated by the first empty line. People often say
252that it's a double line feed, which is not exact, even if a double line feed
253is one valid form of empty line.
254
255Fortunately, HAProxy takes care of all these complex combinations when indexing
256headers, checking values and counting them, so there is no reason to worry
257about the way they could be written, but it is important not to accuse an
258application of being buggy if it does unusual, valid things.
259
260Important note:
261 As suggested by RFC2616, HAProxy normalizes headers by replacing line breaks
262 in the middle of headers by LWS in order to join multi-line headers. This
263 is necessary for proper analysis and helps less capable HTTP parsers to work
264 correctly and not to be fooled by such complex constructs.
265
266
2671.3. HTTP response
268------------------
269
270An HTTP response looks very much like an HTTP request. Both are called HTTP
271messages. Let's consider this HTTP response :
272
273 Line Contents
Willy Tarreaud72758d2010-01-12 10:42:19 +0100274 number
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200275 1 HTTP/1.1 200 OK
276 2 Content-length: 350
277 3 Content-Type: text/html
278
Willy Tarreau816b9792009-09-15 21:25:21 +0200279As a special case, HTTP supports so called "Informational responses" as status
280codes 1xx. These messages are special in that they don't convey any part of the
281response, they're just used as sort of a signaling message to ask a client to
Willy Tarreau5843d1a2010-02-01 15:13:32 +0100282continue to post its request for instance. In the case of a status 100 response
283the requested information will be carried by the next non-100 response message
284following the informational one. This implies that multiple responses may be
285sent to a single request, and that this only works when keep-alive is enabled
286(1xx messages are HTTP/1.1 only). HAProxy handles these messages and is able to
287correctly forward and skip them, and only process the next non-100 response. As
288such, these messages are neither logged nor transformed, unless explicitly
289state otherwise. Status 101 messages indicate that the protocol is changing
290over the same connection and that haproxy must switch to tunnel mode, just as
291if a CONNECT had occurred. Then the Upgrade header would contain additional
292information about the type of protocol the connection is switching to.
Willy Tarreau816b9792009-09-15 21:25:21 +0200293
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200294
2951.3.1. The Response line
296------------------------
297
298Line 1 is the "response line". It is always composed of 3 fields :
299
300 - a version tag : HTTP/1.1
301 - a status code : 200
302 - a reason : OK
303
304The status code is always 3-digit. The first digit indicates a general status :
Willy Tarreau816b9792009-09-15 21:25:21 +0200305 - 1xx = informational message to be skipped (eg: 100, 101)
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200306 - 2xx = OK, content is following (eg: 200, 206)
307 - 3xx = OK, no content following (eg: 302, 304)
308 - 4xx = error caused by the client (eg: 401, 403, 404)
309 - 5xx = error caused by the server (eg: 500, 502, 503)
310
311Please refer to RFC2616 for the detailed meaning of all such codes. The
Willy Tarreaud72758d2010-01-12 10:42:19 +0100312"reason" field is just a hint, but is not parsed by clients. Anything can be
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200313found there, but it's a common practice to respect the well-established
314messages. It can be composed of one or multiple words, such as "OK", "Found",
315or "Authentication Required".
316
317Haproxy may emit the following status codes by itself :
318
319 Code When / reason
320 200 access to stats page, and when replying to monitoring requests
321 301 when performing a redirection, depending on the configured code
322 302 when performing a redirection, depending on the configured code
323 303 when performing a redirection, depending on the configured code
Willy Tarreaub67fdc42013-03-29 19:28:11 +0100324 307 when performing a redirection, depending on the configured code
325 308 when performing a redirection, depending on the configured code
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200326 400 for an invalid or too large request
327 401 when an authentication is required to perform the action (when
328 accessing the stats page)
329 403 when a request is forbidden by a "block" ACL or "reqdeny" filter
330 408 when the request timeout strikes before the request is complete
331 500 when haproxy encounters an unrecoverable internal error, such as a
332 memory allocation failure, which should never happen
333 502 when the server returns an empty, invalid or incomplete response, or
334 when an "rspdeny" filter blocks the response.
335 503 when no server was available to handle the request, or in response to
336 monitoring requests which match the "monitor fail" condition
337 504 when the response timeout strikes before the server responds
338
339The error 4xx and 5xx codes above may be customized (see "errorloc" in section
3404.2).
341
342
3431.3.2. The response headers
344---------------------------
345
346Response headers work exactly like request headers, and as such, HAProxy uses
347the same parsing function for both. Please refer to paragraph 1.2.2 for more
348details.
349
350
3512. Configuring HAProxy
352----------------------
353
3542.1. Configuration file format
355------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +0200356
357HAProxy's configuration process involves 3 major sources of parameters :
358
359 - the arguments from the command-line, which always take precedence
360 - the "global" section, which sets process-wide parameters
361 - the proxies sections which can take form of "defaults", "listen",
362 "frontend" and "backend".
363
Willy Tarreau0ba27502007-12-24 16:55:16 +0100364The configuration file syntax consists in lines beginning with a keyword
365referenced in this manual, optionally followed by one or several parameters
366delimited by spaces. If spaces have to be entered in strings, then they must be
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +0100367preceded by a backslash ('\') to be escaped. Backslashes also have to be
Willy Tarreau0ba27502007-12-24 16:55:16 +0100368escaped by doubling them.
369
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200370
3712.2. Time format
372----------------
373
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +0100374Some parameters involve values representing time, such as timeouts. These
Willy Tarreau0ba27502007-12-24 16:55:16 +0100375values are generally expressed in milliseconds (unless explicitly stated
376otherwise) but may be expressed in any other unit by suffixing the unit to the
377numeric value. It is important to consider this because it will not be repeated
378for every keyword. Supported units are :
379
380 - us : microseconds. 1 microsecond = 1/1000000 second
381 - ms : milliseconds. 1 millisecond = 1/1000 second. This is the default.
382 - s : seconds. 1s = 1000ms
383 - m : minutes. 1m = 60s = 60000ms
384 - h : hours. 1h = 60m = 3600s = 3600000ms
385 - d : days. 1d = 24h = 1440m = 86400s = 86400000ms
386
387
Patrick Mezard35da19c2010-06-12 17:02:47 +02003882.3. Examples
389-------------
390
391 # Simple configuration for an HTTP proxy listening on port 80 on all
392 # interfaces and forwarding requests to a single backend "servers" with a
393 # single server "server1" listening on 127.0.0.1:8000
394 global
395 daemon
396 maxconn 256
397
398 defaults
399 mode http
400 timeout connect 5000ms
401 timeout client 50000ms
402 timeout server 50000ms
403
404 frontend http-in
405 bind *:80
406 default_backend servers
407
408 backend servers
409 server server1 127.0.0.1:8000 maxconn 32
410
411
412 # The same configuration defined with a single listen block. Shorter but
413 # less expressive, especially in HTTP mode.
414 global
415 daemon
416 maxconn 256
417
418 defaults
419 mode http
420 timeout connect 5000ms
421 timeout client 50000ms
422 timeout server 50000ms
423
424 listen http-in
425 bind *:80
426 server server1 127.0.0.1:8000 maxconn 32
427
428
429Assuming haproxy is in $PATH, test these configurations in a shell with:
430
Willy Tarreauccb289d2010-12-11 20:19:38 +0100431 $ sudo haproxy -f configuration.conf -c
Patrick Mezard35da19c2010-06-12 17:02:47 +0200432
433
Willy Tarreauc57f0e22009-05-10 13:12:33 +02004343. Global parameters
Willy Tarreau6a06a402007-07-15 20:15:28 +0200435--------------------
436
437Parameters in the "global" section are process-wide and often OS-specific. They
438are generally set once for all and do not need being changed once correct. Some
439of them have command-line equivalents.
440
441The following keywords are supported in the "global" section :
442
443 * Process management and security
Emeric Brunc8e8d122012-10-02 18:42:10 +0200444 - ca-base
Willy Tarreau6a06a402007-07-15 20:15:28 +0200445 - chroot
Emeric Brunc8e8d122012-10-02 18:42:10 +0200446 - crt-base
Willy Tarreau6a06a402007-07-15 20:15:28 +0200447 - daemon
448 - gid
449 - group
450 - log
Joe Williamsdf5b38f2010-12-29 17:05:48 +0100451 - log-send-hostname
Willy Tarreau6a06a402007-07-15 20:15:28 +0200452 - nbproc
453 - pidfile
454 - uid
455 - ulimit-n
456 - user
Willy Tarreaufbee7132007-10-18 13:53:22 +0200457 - stats
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +0200458 - node
459 - description
Willy Tarreauceb24bc2010-11-09 12:46:41 +0100460 - unix-bind
Willy Tarreaud72758d2010-01-12 10:42:19 +0100461
Willy Tarreau6a06a402007-07-15 20:15:28 +0200462 * Performance tuning
463 - maxconn
Willy Tarreau81c25d02011-09-07 15:17:21 +0200464 - maxconnrate
William Lallemandd85f9172012-11-09 17:05:39 +0100465 - maxcomprate
William Lallemand072a2bf2012-11-20 17:01:01 +0100466 - maxcompcpuusage
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100467 - maxpipes
Willy Tarreau403edff2012-09-06 11:58:37 +0200468 - maxsslconn
Willy Tarreau6a06a402007-07-15 20:15:28 +0200469 - noepoll
470 - nokqueue
471 - nopoll
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100472 - nosplice
Willy Tarreaufe255b72007-10-14 23:09:26 +0200473 - spread-checks
Willy Tarreau27a674e2009-08-17 07:23:33 +0200474 - tune.bufsize
Willy Tarreau43961d52010-10-04 20:39:20 +0200475 - tune.chksize
William Lallemandf3747832012-11-09 12:33:10 +0100476 - tune.comp.maxlevel
Willy Tarreau193b8c62012-11-22 00:17:38 +0100477 - tune.http.cookielen
Willy Tarreauac1932d2011-10-24 19:14:41 +0200478 - tune.http.maxhdr
Willy Tarreaua0250ba2008-01-06 11:22:57 +0100479 - tune.maxaccept
480 - tune.maxpollevents
Willy Tarreau27a674e2009-08-17 07:23:33 +0200481 - tune.maxrewrite
Willy Tarreaubd9a0a72011-10-23 21:14:29 +0200482 - tune.pipesize
Willy Tarreaue803de22010-01-21 17:43:04 +0100483 - tune.rcvbuf.client
484 - tune.rcvbuf.server
485 - tune.sndbuf.client
486 - tune.sndbuf.server
Willy Tarreau6ec58db2012-11-16 16:32:15 +0100487 - tune.ssl.cachesize
Willy Tarreaubfd59462013-02-21 07:46:09 +0100488 - tune.ssl.lifetime
489 - tune.ssl.maxrecord
William Lallemanda509e4c2012-11-07 16:54:34 +0100490 - tune.zlib.memlevel
491 - tune.zlib.windowsize
Willy Tarreaud72758d2010-01-12 10:42:19 +0100492
Willy Tarreau6a06a402007-07-15 20:15:28 +0200493 * Debugging
494 - debug
495 - quiet
Willy Tarreau6a06a402007-07-15 20:15:28 +0200496
497
Willy Tarreauc57f0e22009-05-10 13:12:33 +02004983.1. Process management and security
Willy Tarreau6a06a402007-07-15 20:15:28 +0200499------------------------------------
500
Emeric Brunc8e8d122012-10-02 18:42:10 +0200501ca-base <dir>
502 Assigns a default directory to fetch SSL CA certificates and CRLs from when a
Emeric Brunfd33a262012-10-11 16:28:27 +0200503 relative path is used with "ca-file" or "crl-file" directives. Absolute
504 locations specified in "ca-file" and "crl-file" prevail and ignore "ca-base".
Emeric Brunc8e8d122012-10-02 18:42:10 +0200505
Willy Tarreau6a06a402007-07-15 20:15:28 +0200506chroot <jail dir>
507 Changes current directory to <jail dir> and performs a chroot() there before
508 dropping privileges. This increases the security level in case an unknown
509 vulnerability would be exploited, since it would make it very hard for the
510 attacker to exploit the system. This only works when the process is started
511 with superuser privileges. It is important to ensure that <jail_dir> is both
512 empty and unwritable to anyone.
Willy Tarreaud72758d2010-01-12 10:42:19 +0100513
Willy Tarreaufc6c0322012-11-16 16:12:27 +0100514cpu-map <"all"|"odd"|"even"|process_num> <cpu-set>...
515 On Linux 2.6 and above, it is possible to bind a process to a specific CPU
516 set. This means that the process will never run on other CPUs. The "cpu-map"
517 directive specifies CPU sets for process sets. The first argument is the
518 process number to bind. This process must have a number between 1 and 32,
519 and any process IDs above nbproc are ignored. It is possible to specify all
520 processes at once using "all", only odd numbers using "odd" or even numbers
521 using "even", just like with the "bind-process" directive. The second and
522 forthcoming arguments are CPU sets. Each CPU set is either a unique number
523 between 0 and 31 or a range with two such numbers delimited by a dash ('-').
524 Multiple CPU numbers or ranges may be specified, and the processes will be
525 allowed to bind to all of them. Obviously, multiple "cpu-map" directives may
526 be specified. Each "cpu-map" directive will replace the previous ones when
527 they overlap.
528
Emeric Brunc8e8d122012-10-02 18:42:10 +0200529crt-base <dir>
530 Assigns a default directory to fetch SSL certificates from when a relative
531 path is used with "crtfile" directives. Absolute locations specified after
532 "crtfile" prevail and ignore "crt-base".
533
Willy Tarreau6a06a402007-07-15 20:15:28 +0200534daemon
535 Makes the process fork into background. This is the recommended mode of
536 operation. It is equivalent to the command line "-D" argument. It can be
537 disabled by the command line "-db" argument.
538
539gid <number>
540 Changes the process' group ID to <number>. It is recommended that the group
541 ID is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
542 be started with a user belonging to this group, or with superuser privileges.
Michael Schererab012dd2013-01-12 18:35:19 +0100543 Note that if haproxy is started from a user having supplementary groups, it
544 will only be able to drop these groups if started with superuser privileges.
Willy Tarreau6a06a402007-07-15 20:15:28 +0200545 See also "group" and "uid".
Willy Tarreaud72758d2010-01-12 10:42:19 +0100546
Willy Tarreau6a06a402007-07-15 20:15:28 +0200547group <group name>
548 Similar to "gid" but uses the GID of group name <group name> from /etc/group.
549 See also "gid" and "user".
Willy Tarreaud72758d2010-01-12 10:42:19 +0100550
Willy Tarreauf7edefa2009-05-10 17:20:05 +0200551log <address> <facility> [max level [min level]]
Willy Tarreau6a06a402007-07-15 20:15:28 +0200552 Adds a global syslog server. Up to two global servers can be defined. They
553 will receive logs for startups and exits, as well as all logs from proxies
Robert Tsai81ae1952007-12-05 10:47:29 +0100554 configured with "log global".
555
556 <address> can be one of:
557
Willy Tarreau2769aa02007-12-27 18:26:09 +0100558 - An IPv4 address optionally followed by a colon and a UDP port. If
Robert Tsai81ae1952007-12-05 10:47:29 +0100559 no port is specified, 514 is used by default (the standard syslog
560 port).
561
David du Colombier24bb5f52011-03-17 10:40:23 +0100562 - An IPv6 address followed by a colon and optionally a UDP port. If
563 no port is specified, 514 is used by default (the standard syslog
564 port).
565
Robert Tsai81ae1952007-12-05 10:47:29 +0100566 - A filesystem path to a UNIX domain socket, keeping in mind
567 considerations for chroot (be sure the path is accessible inside
568 the chroot) and uid/gid (be sure the path is appropriately
569 writeable).
570
Willy Tarreaudad36a32013-03-11 01:20:04 +0100571 Any part of the address string may reference any number of environment
572 variables by preceding their name with a dollar sign ('$') and
573 optionally enclosing them with braces ('{}'), similarly to what is done
574 in Bourne shell.
575
Robert Tsai81ae1952007-12-05 10:47:29 +0100576 <facility> must be one of the 24 standard syslog facilities :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200577
578 kern user mail daemon auth syslog lpr news
579 uucp cron auth2 ftp ntp audit alert cron2
580 local0 local1 local2 local3 local4 local5 local6 local7
581
582 An optional level can be specified to filter outgoing messages. By default,
Willy Tarreauf7edefa2009-05-10 17:20:05 +0200583 all messages are sent. If a maximum level is specified, only messages with a
584 severity at least as important as this level will be sent. An optional minimum
585 level can be specified. If it is set, logs emitted with a more severe level
586 than this one will be capped to this level. This is used to avoid sending
587 "emerg" messages on all terminals on some default syslog configurations.
588 Eight levels are known :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200589
Cyril Bontédc4d9032012-04-08 21:57:39 +0200590 emerg alert crit err warning notice info debug
Willy Tarreau6a06a402007-07-15 20:15:28 +0200591
Joe Williamsdf5b38f2010-12-29 17:05:48 +0100592log-send-hostname [<string>]
593 Sets the hostname field in the syslog header. If optional "string" parameter
594 is set the header is set to the string contents, otherwise uses the hostname
595 of the system. Generally used if one is not relaying logs through an
596 intermediate syslog server or for simply customizing the hostname printed in
597 the logs.
598
Kevinm48936af2010-12-22 16:08:21 +0000599log-tag <string>
600 Sets the tag field in the syslog header to this string. It defaults to the
601 program name as launched from the command line, which usually is "haproxy".
602 Sometimes it can be useful to differentiate between multiple processes
603 running on the same host.
604
Willy Tarreau6a06a402007-07-15 20:15:28 +0200605nbproc <number>
606 Creates <number> processes when going daemon. This requires the "daemon"
607 mode. By default, only one process is created, which is the recommended mode
608 of operation. For systems limited to small sets of file descriptors per
609 process, it may be needed to fork multiple daemons. USING MULTIPLE PROCESSES
610 IS HARDER TO DEBUG AND IS REALLY DISCOURAGED. See also "daemon".
611
612pidfile <pidfile>
613 Writes pids of all daemons into file <pidfile>. This option is equivalent to
614 the "-p" command line argument. The file must be accessible to the user
615 starting the process. See also "daemon".
616
Willy Tarreau110ecc12012-11-15 17:50:01 +0100617stats bind-process [ all | odd | even | <number 1-32>[-<number 1-32>] ] ...
Willy Tarreau35b7b162012-10-22 23:17:18 +0200618 Limits the stats socket to a certain set of processes numbers. By default the
619 stats socket is bound to all processes, causing a warning to be emitted when
620 nbproc is greater than 1 because there is no way to select the target process
621 when connecting. However, by using this setting, it becomes possible to pin
622 the stats socket to a specific set of processes, typically the first one. The
623 warning will automatically be disabled when this setting is used, whatever
624 the number of processes used.
625
Willy Tarreauabb175f2012-09-24 12:43:26 +0200626stats socket [<address:port>|<path>] [param*]
627 Binds a UNIX socket to <path> or a TCPv4/v6 address to <address:port>.
628 Connections to this socket will return various statistics outputs and even
629 allow some commands to be issued to change some runtime settings. Please
630 consult section 9.2 "Unix Socket commands" for more details.
Willy Tarreau6162db22009-10-10 17:13:00 +0200631
Willy Tarreauabb175f2012-09-24 12:43:26 +0200632 All parameters supported by "bind" lines are supported, for instance to
633 restrict access to some users or their access rights. Please consult
634 section 5.1 for more information.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200635
636stats timeout <timeout, in milliseconds>
637 The default timeout on the stats socket is set to 10 seconds. It is possible
638 to change this value with "stats timeout". The value must be passed in
Willy Tarreaubefdff12007-12-02 22:27:38 +0100639 milliseconds, or be suffixed by a time unit among { us, ms, s, m, h, d }.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200640
641stats maxconn <connections>
642 By default, the stats socket is limited to 10 concurrent connections. It is
643 possible to change this value with "stats maxconn".
644
Willy Tarreau6a06a402007-07-15 20:15:28 +0200645uid <number>
646 Changes the process' user ID to <number>. It is recommended that the user ID
647 is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
648 be started with superuser privileges in order to be able to switch to another
649 one. See also "gid" and "user".
650
651ulimit-n <number>
652 Sets the maximum number of per-process file-descriptors to <number>. By
653 default, it is automatically computed, so it is recommended not to use this
654 option.
655
Willy Tarreauceb24bc2010-11-09 12:46:41 +0100656unix-bind [ prefix <prefix> ] [ mode <mode> ] [ user <user> ] [ uid <uid> ]
657 [ group <group> ] [ gid <gid> ]
658
659 Fixes common settings to UNIX listening sockets declared in "bind" statements.
660 This is mainly used to simplify declaration of those UNIX sockets and reduce
661 the risk of errors, since those settings are most commonly required but are
662 also process-specific. The <prefix> setting can be used to force all socket
663 path to be relative to that directory. This might be needed to access another
664 component's chroot. Note that those paths are resolved before haproxy chroots
665 itself, so they are absolute. The <mode>, <user>, <uid>, <group> and <gid>
666 all have the same meaning as their homonyms used by the "bind" statement. If
667 both are specified, the "bind" statement has priority, meaning that the
668 "unix-bind" settings may be seen as process-wide default settings.
669
Willy Tarreau6a06a402007-07-15 20:15:28 +0200670user <user name>
671 Similar to "uid" but uses the UID of user name <user name> from /etc/passwd.
672 See also "uid" and "group".
673
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +0200674node <name>
675 Only letters, digits, hyphen and underscore are allowed, like in DNS names.
676
677 This statement is useful in HA configurations where two or more processes or
678 servers share the same IP address. By setting a different node-name on all
679 nodes, it becomes easy to immediately spot what server is handling the
680 traffic.
681
682description <text>
683 Add a text that describes the instance.
684
685 Please note that it is required to escape certain characters (# for example)
686 and this text is inserted into a html page so you should avoid using
687 "<" and ">" characters.
688
Willy Tarreau6a06a402007-07-15 20:15:28 +0200689
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006903.2. Performance tuning
Willy Tarreau6a06a402007-07-15 20:15:28 +0200691-----------------------
692
693maxconn <number>
694 Sets the maximum per-process number of concurrent connections to <number>. It
695 is equivalent to the command-line argument "-n". Proxies will stop accepting
696 connections when this limit is reached. The "ulimit-n" parameter is
697 automatically adjusted according to this value. See also "ulimit-n".
698
Willy Tarreau81c25d02011-09-07 15:17:21 +0200699maxconnrate <number>
700 Sets the maximum per-process number of connections per second to <number>.
701 Proxies will stop accepting connections when this limit is reached. It can be
702 used to limit the global capacity regardless of each frontend capacity. It is
703 important to note that this can only be used as a service protection measure,
704 as there will not necessarily be a fair share between frontends when the
705 limit is reached, so it's a good idea to also limit each frontend to some
706 value close to its expected share. Also, lowering tune.maxaccept can improve
707 fairness.
708
William Lallemandd85f9172012-11-09 17:05:39 +0100709maxcomprate <number>
710 Sets the maximum per-process input compression rate to <number> kilobytes
711 pers second. For each session, if the maximum is reached, the compression
712 level will be decreased during the session. If the maximum is reached at the
713 beginning of a session, the session will not compress at all. If the maximum
714 is not reached, the compression level will be increased up to
715 tune.comp.maxlevel. A value of zero means there is no limit, this is the
716 default value.
717
William Lallemand072a2bf2012-11-20 17:01:01 +0100718maxcompcpuusage <number>
719 Sets the maximum CPU usage HAProxy can reach before stopping the compression
720 for new requests or decreasing the compression level of current requests.
721 It works like 'maxcomprate' but measures CPU usage instead of incoming data
722 bandwidth. The value is expressed in percent of the CPU used by haproxy. In
723 case of multiple processes (nbproc > 1), each process manages its individual
724 usage. A value of 100 disable the limit. The default value is 100. Setting
725 a lower value will prevent the compression work from slowing the whole
726 process down and from introducing high latencies.
727
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100728maxpipes <number>
729 Sets the maximum per-process number of pipes to <number>. Currently, pipes
730 are only used by kernel-based tcp splicing. Since a pipe contains two file
731 descriptors, the "ulimit-n" value will be increased accordingly. The default
732 value is maxconn/4, which seems to be more than enough for most heavy usages.
733 The splice code dynamically allocates and releases pipes, and can fall back
734 to standard copy, so setting this value too low may only impact performance.
735
Willy Tarreau403edff2012-09-06 11:58:37 +0200736maxsslconn <number>
737 Sets the maximum per-process number of concurrent SSL connections to
738 <number>. By default there is no SSL-specific limit, which means that the
739 global maxconn setting will apply to all connections. Setting this limit
740 avoids having openssl use too much memory and crash when malloc returns NULL
741 (since it unfortunately does not reliably check for such conditions). Note
742 that the limit applies both to incoming and outgoing connections, so one
743 connection which is deciphered then ciphered accounts for 2 SSL connections.
744
William Lallemand9d5f5482012-11-07 16:12:57 +0100745maxzlibmem <number>
746 Sets the maximum amount of RAM in megabytes per process usable by the zlib.
747 When the maximum amount is reached, future sessions will not compress as long
748 as RAM is unavailable. When sets to 0, there is no limit.
William Lallemande3a7d992012-11-20 11:25:20 +0100749 The default value is 0. The value is available in bytes on the UNIX socket
750 with "show info" on the line "MaxZlibMemUsage", the memory used by zlib is
751 "ZlibMemUsage" in bytes.
752
Willy Tarreau6a06a402007-07-15 20:15:28 +0200753noepoll
754 Disables the use of the "epoll" event polling system on Linux. It is
755 equivalent to the command-line argument "-de". The next polling system
Willy Tarreaue9f49e72012-11-11 17:42:00 +0100756 used will generally be "poll". See also "nopoll".
Willy Tarreau6a06a402007-07-15 20:15:28 +0200757
758nokqueue
759 Disables the use of the "kqueue" event polling system on BSD. It is
760 equivalent to the command-line argument "-dk". The next polling system
761 used will generally be "poll". See also "nopoll".
762
763nopoll
764 Disables the use of the "poll" event polling system. It is equivalent to the
765 command-line argument "-dp". The next polling system used will be "select".
Willy Tarreau0ba27502007-12-24 16:55:16 +0100766 It should never be needed to disable "poll" since it's available on all
Willy Tarreaue9f49e72012-11-11 17:42:00 +0100767 platforms supported by HAProxy. See also "nokqueue" and "noepoll".
Willy Tarreau6a06a402007-07-15 20:15:28 +0200768
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100769nosplice
770 Disables the use of kernel tcp splicing between sockets on Linux. It is
771 equivalent to the command line argument "-dS". Data will then be copied
772 using conventional and more portable recv/send calls. Kernel tcp splicing is
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +0100773 limited to some very recent instances of kernel 2.6. Most versions between
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100774 2.6.25 and 2.6.28 are buggy and will forward corrupted data, so they must not
775 be used. This option makes it easier to globally disable kernel splicing in
776 case of doubt. See also "option splice-auto", "option splice-request" and
777 "option splice-response".
778
Willy Tarreaufe255b72007-10-14 23:09:26 +0200779spread-checks <0..50, in percent>
Simon Hormand60d6912013-11-25 10:46:36 +0900780 Sometimes it is desirable to avoid sending agent and health checks to
781 servers at exact intervals, for instance when many logical servers are
782 located on the same physical server. With the help of this parameter, it
783 becomes possible to add some randomness in the check interval between 0
784 and +/- 50%. A value between 2 and 5 seems to show good results. The
785 default value remains at 0.
Willy Tarreaufe255b72007-10-14 23:09:26 +0200786
Willy Tarreau27a674e2009-08-17 07:23:33 +0200787tune.bufsize <number>
788 Sets the buffer size to this size (in bytes). Lower values allow more
789 sessions to coexist in the same amount of RAM, and higher values allow some
790 applications with very large cookies to work. The default value is 16384 and
791 can be changed at build time. It is strongly recommended not to change this
792 from the default value, as very low values will break some services such as
793 statistics, and values larger than default size will increase memory usage,
794 possibly causing the system to run out of memory. At least the global maxconn
795 parameter should be decreased by the same factor as this one is increased.
Dmitry Sivachenkof6f4f7b2012-10-21 18:10:25 +0400796 If HTTP request is larger than (tune.bufsize - tune.maxrewrite), haproxy will
797 return HTTP 400 (Bad Request) error. Similarly if an HTTP response is larger
798 than this size, haproxy will return HTTP 502 (Bad Gateway).
Willy Tarreau27a674e2009-08-17 07:23:33 +0200799
Willy Tarreau43961d52010-10-04 20:39:20 +0200800tune.chksize <number>
801 Sets the check buffer size to this size (in bytes). Higher values may help
802 find string or regex patterns in very large pages, though doing so may imply
803 more memory and CPU usage. The default value is 16384 and can be changed at
804 build time. It is not recommended to change this value, but to use better
805 checks whenever possible.
806
William Lallemandf3747832012-11-09 12:33:10 +0100807tune.comp.maxlevel <number>
808 Sets the maximum compression level. The compression level affects CPU
809 usage during compression. This value affects CPU usage during compression.
810 Each session using compression initializes the compression algorithm with
811 this value. The default value is 1.
812
Willy Tarreau193b8c62012-11-22 00:17:38 +0100813tune.http.cookielen <number>
814 Sets the maximum length of captured cookies. This is the maximum value that
815 the "capture cookie xxx len yyy" will be allowed to take, and any upper value
816 will automatically be truncated to this one. It is important not to set too
817 high a value because all cookie captures still allocate this size whatever
818 their configured value (they share a same pool). This value is per request
819 per response, so the memory allocated is twice this value per connection.
820 When not specified, the limit is set to 63 characters. It is recommended not
821 to change this value.
822
Willy Tarreauac1932d2011-10-24 19:14:41 +0200823tune.http.maxhdr <number>
824 Sets the maximum number of headers in a request. When a request comes with a
825 number of headers greater than this value (including the first line), it is
826 rejected with a "400 Bad Request" status code. Similarly, too large responses
827 are blocked with "502 Bad Gateway". The default value is 101, which is enough
828 for all usages, considering that the widely deployed Apache server uses the
829 same limit. It can be useful to push this limit further to temporarily allow
830 a buggy application to work by the time it gets fixed. Keep in mind that each
831 new header consumes 32bits of memory for each session, so don't push this
832 limit too high.
833
Willy Tarreaua0250ba2008-01-06 11:22:57 +0100834tune.maxaccept <number>
Willy Tarreau16a21472012-11-19 12:39:59 +0100835 Sets the maximum number of consecutive connections a process may accept in a
836 row before switching to other work. In single process mode, higher numbers
837 give better performance at high connection rates. However in multi-process
838 modes, keeping a bit of fairness between processes generally is better to
839 increase performance. This value applies individually to each listener, so
840 that the number of processes a listener is bound to is taken into account.
841 This value defaults to 64. In multi-process mode, it is divided by twice
842 the number of processes the listener is bound to. Setting this value to -1
843 completely disables the limitation. It should normally not be needed to tweak
844 this value.
Willy Tarreaua0250ba2008-01-06 11:22:57 +0100845
846tune.maxpollevents <number>
847 Sets the maximum amount of events that can be processed at once in a call to
848 the polling system. The default value is adapted to the operating system. It
849 has been noticed that reducing it below 200 tends to slightly decrease
850 latency at the expense of network bandwidth, and increasing it above 200
851 tends to trade latency for slightly increased bandwidth.
852
Willy Tarreau27a674e2009-08-17 07:23:33 +0200853tune.maxrewrite <number>
854 Sets the reserved buffer space to this size in bytes. The reserved space is
855 used for header rewriting or appending. The first reads on sockets will never
856 fill more than bufsize-maxrewrite. Historically it has defaulted to half of
857 bufsize, though that does not make much sense since there are rarely large
858 numbers of headers to add. Setting it too high prevents processing of large
859 requests or responses. Setting it too low prevents addition of new headers
860 to already large requests or to POST requests. It is generally wise to set it
861 to about 1024. It is automatically readjusted to half of bufsize if it is
862 larger than that. This means you don't have to worry about it when changing
863 bufsize.
864
Willy Tarreaubd9a0a72011-10-23 21:14:29 +0200865tune.pipesize <number>
866 Sets the kernel pipe buffer size to this size (in bytes). By default, pipes
867 are the default size for the system. But sometimes when using TCP splicing,
868 it can improve performance to increase pipe sizes, especially if it is
869 suspected that pipes are not filled and that many calls to splice() are
870 performed. This has an impact on the kernel's memory footprint, so this must
871 not be changed if impacts are not understood.
872
Willy Tarreaue803de22010-01-21 17:43:04 +0100873tune.rcvbuf.client <number>
874tune.rcvbuf.server <number>
875 Forces the kernel socket receive buffer size on the client or the server side
876 to the specified value in bytes. This value applies to all TCP/HTTP frontends
877 and backends. It should normally never be set, and the default size (0) lets
878 the kernel autotune this value depending on the amount of available memory.
879 However it can sometimes help to set it to very low values (eg: 4096) in
880 order to save kernel memory by preventing it from buffering too large amounts
881 of received data. Lower values will significantly increase CPU usage though.
882
883tune.sndbuf.client <number>
884tune.sndbuf.server <number>
885 Forces the kernel socket send buffer size on the client or the server side to
886 the specified value in bytes. This value applies to all TCP/HTTP frontends
887 and backends. It should normally never be set, and the default size (0) lets
888 the kernel autotune this value depending on the amount of available memory.
889 However it can sometimes help to set it to very low values (eg: 4096) in
890 order to save kernel memory by preventing it from buffering too large amounts
891 of received data. Lower values will significantly increase CPU usage though.
892 Another use case is to prevent write timeouts with extremely slow clients due
893 to the kernel waiting for a large part of the buffer to be read before
894 notifying haproxy again.
895
Willy Tarreau6ec58db2012-11-16 16:32:15 +0100896tune.ssl.cachesize <number>
Emeric Brunaf9619d2012-11-28 18:47:52 +0100897 Sets the size of the global SSL session cache, in a number of blocks. A block
898 is large enough to contain an encoded session without peer certificate.
899 An encoded session with peer certificate is stored in multiple blocks
900 depending on the size of the peer certificate. A block use approximatively
901 200 bytes of memory. The default value may be forced at build time, otherwise
902 defaults to 20000. When the cache is full, the most idle entries are purged
903 and reassigned. Higher values reduce the occurrence of such a purge, hence
904 the number of CPU-intensive SSL handshakes by ensuring that all users keep
905 their session as long as possible. All entries are pre-allocated upon startup
Emeric Brun22890a12012-12-28 14:41:32 +0100906 and are shared between all processes if "nbproc" is greater than 1. Setting
907 this value to 0 disables the SSL session cache.
Willy Tarreau6ec58db2012-11-16 16:32:15 +0100908
Emeric Brun4f65bff2012-11-16 15:11:00 +0100909tune.ssl.lifetime <timeout>
910 Sets how long a cached SSL session may remain valid. This time is expressed
911 in seconds and defaults to 300 (5 mn). It is important to understand that it
912 does not guarantee that sessions will last that long, because if the cache is
913 full, the longest idle sessions will be purged despite their configured
914 lifetime. The real usefulness of this setting is to prevent sessions from
915 being used for too long.
916
Willy Tarreaubfd59462013-02-21 07:46:09 +0100917tune.ssl.maxrecord <number>
918 Sets the maximum amount of bytes passed to SSL_write() at a time. Default
919 value 0 means there is no limit. Over SSL/TLS, the client can decipher the
920 data only once it has received a full record. With large records, it means
921 that clients might have to download up to 16kB of data before starting to
922 process them. Limiting the value can improve page load times on browsers
923 located over high latency or low bandwidth networks. It is suggested to find
924 optimal values which fit into 1 or 2 TCP segments (generally 1448 bytes over
925 Ethernet with TCP timestamps enabled, or 1460 when timestamps are disabled),
926 keeping in mind that SSL/TLS add some overhead. Typical values of 1419 and
927 2859 gave good results during tests. Use "strace -e trace=write" to find the
928 best value.
929
William Lallemanda509e4c2012-11-07 16:54:34 +0100930tune.zlib.memlevel <number>
931 Sets the memLevel parameter in zlib initialization for each session. It
932 defines how much memory should be allocated for the intenal compression
933 state. A value of 1 uses minimum memory but is slow and reduces compression
934 ratio, a value of 9 uses maximum memory for optimal speed. Can be a value
935 between 1 and 9. The default value is 8.
936
937tune.zlib.windowsize <number>
938 Sets the window size (the size of the history buffer) as a parameter of the
939 zlib initialization for each session. Larger values of this parameter result
940 in better compression at the expense of memory usage. Can be a value between
941 8 and 15. The default value is 15.
Willy Tarreau6a06a402007-07-15 20:15:28 +0200942
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009433.3. Debugging
944--------------
Willy Tarreau6a06a402007-07-15 20:15:28 +0200945
946debug
947 Enables debug mode which dumps to stdout all exchanges, and disables forking
948 into background. It is the equivalent of the command-line argument "-d". It
949 should never be used in a production configuration since it may prevent full
950 system startup.
951
952quiet
953 Do not display any message during startup. It is equivalent to the command-
954 line argument "-q".
955
Emeric Brunf099e792010-09-27 12:05:28 +0200956
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01009573.4. Userlists
958--------------
959It is possible to control access to frontend/backend/listen sections or to
960http stats by allowing only authenticated and authorized users. To do this,
961it is required to create at least one userlist and to define users.
962
963userlist <listname>
Cyril Bonté78caf842010-03-10 22:41:43 +0100964 Creates new userlist with name <listname>. Many independent userlists can be
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100965 used to store authentication & authorization data for independent customers.
966
967group <groupname> [users <user>,<user>,(...)]
Cyril Bonté78caf842010-03-10 22:41:43 +0100968 Adds group <groupname> to the current userlist. It is also possible to
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100969 attach users to this group by using a comma separated list of names
970 proceeded by "users" keyword.
971
Cyril Bontéf0c60612010-02-06 14:44:47 +0100972user <username> [password|insecure-password <password>]
973 [groups <group>,<group>,(...)]
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100974 Adds user <username> to the current userlist. Both secure (encrypted) and
975 insecure (unencrypted) passwords can be used. Encrypted passwords are
Cyril Bonté78caf842010-03-10 22:41:43 +0100976 evaluated using the crypt(3) function so depending of the system's
977 capabilities, different algorithms are supported. For example modern Glibc
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100978 based Linux system supports MD5, SHA-256, SHA-512 and of course classic,
979 DES-based method of crypting passwords.
980
981
982 Example:
Cyril Bontéf0c60612010-02-06 14:44:47 +0100983 userlist L1
984 group G1 users tiger,scott
985 group G2 users xdb,scott
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100986
Cyril Bontéf0c60612010-02-06 14:44:47 +0100987 user tiger password $6$k6y3o.eP$JlKBx9za9667qe4(...)xHSwRv6J.C0/D7cV91
988 user scott insecure-password elgato
989 user xdb insecure-password hello
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100990
Cyril Bontéf0c60612010-02-06 14:44:47 +0100991 userlist L2
992 group G1
993 group G2
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100994
Cyril Bontéf0c60612010-02-06 14:44:47 +0100995 user tiger password $6$k6y3o.eP$JlKBx(...)xHSwRv6J.C0/D7cV91 groups G1
996 user scott insecure-password elgato groups G1,G2
997 user xdb insecure-password hello groups G2
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100998
999 Please note that both lists are functionally identical.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001000
Emeric Brunf099e792010-09-27 12:05:28 +02001001
10023.5. Peers
Cyril Bontédc4d9032012-04-08 21:57:39 +02001003----------
Emeric Brunf099e792010-09-27 12:05:28 +02001004It is possible to synchronize server entries in stick tables between several
1005haproxy instances over TCP connections in a multi-master fashion. Each instance
1006pushes its local updates and insertions to remote peers. Server IDs are used to
1007identify servers remotely, so it is important that configurations look similar
1008or at least that the same IDs are forced on each server on all participants.
1009Interrupted exchanges are automatically detected and recovered from the last
1010known point. In addition, during a soft restart, the old process connects to
1011the new one using such a TCP connection to push all its entries before the new
1012process tries to connect to other peers. That ensures very fast replication
1013during a reload, it typically takes a fraction of a second even for large
1014tables.
1015
1016peers <peersect>
Jamie Gloudon801a0a32012-08-25 00:18:33 -04001017 Creates a new peer list with name <peersect>. It is an independent section,
Emeric Brunf099e792010-09-27 12:05:28 +02001018 which is referenced by one or more stick-tables.
1019
1020peer <peername> <ip>:<port>
1021 Defines a peer inside a peers section.
1022 If <peername> is set to the local peer name (by default hostname, or forced
1023 using "-L" command line option), haproxy will listen for incoming remote peer
1024 connection on <ip>:<port>. Otherwise, <ip>:<port> defines where to connect to
1025 to join the remote peer, and <peername> is used at the protocol level to
1026 identify and validate the remote peer on the server side.
1027
1028 During a soft restart, local peer <ip>:<port> is used by the old instance to
1029 connect the new one and initiate a complete replication (teaching process).
1030
1031 It is strongly recommended to have the exact same peers declaration on all
1032 peers and to only rely on the "-L" command line argument to change the local
1033 peer name. This makes it easier to maintain coherent configuration files
1034 across all peers.
1035
Willy Tarreaudad36a32013-03-11 01:20:04 +01001036 Any part of the address string may reference any number of environment
1037 variables by preceding their name with a dollar sign ('$') and optionally
1038 enclosing them with braces ('{}'), similarly to what is done in Bourne shell.
1039
Cyril Bontédc4d9032012-04-08 21:57:39 +02001040 Example:
Emeric Brunf099e792010-09-27 12:05:28 +02001041 peers mypeers
Willy Tarreauf7b30a92010-12-06 22:59:17 +01001042 peer haproxy1 192.168.0.1:1024
1043 peer haproxy2 192.168.0.2:1024
1044 peer haproxy3 10.2.0.1:1024
Emeric Brunf099e792010-09-27 12:05:28 +02001045
1046 backend mybackend
1047 mode tcp
1048 balance roundrobin
1049 stick-table type ip size 20k peers mypeers
1050 stick on src
1051
Willy Tarreauf7b30a92010-12-06 22:59:17 +01001052 server srv1 192.168.0.30:80
1053 server srv2 192.168.0.31:80
Emeric Brunf099e792010-09-27 12:05:28 +02001054
1055
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010564. Proxies
Willy Tarreau6a06a402007-07-15 20:15:28 +02001057----------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001058
Willy Tarreau6a06a402007-07-15 20:15:28 +02001059Proxy configuration can be located in a set of sections :
1060 - defaults <name>
1061 - frontend <name>
1062 - backend <name>
1063 - listen <name>
1064
1065A "defaults" section sets default parameters for all other sections following
1066its declaration. Those default parameters are reset by the next "defaults"
1067section. See below for the list of parameters which can be set in a "defaults"
Willy Tarreau0ba27502007-12-24 16:55:16 +01001068section. The name is optional but its use is encouraged for better readability.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001069
1070A "frontend" section describes a set of listening sockets accepting client
1071connections.
1072
1073A "backend" section describes a set of servers to which the proxy will connect
1074to forward incoming connections.
1075
1076A "listen" section defines a complete proxy with its frontend and backend
1077parts combined in one section. It is generally useful for TCP-only traffic.
1078
Willy Tarreau0ba27502007-12-24 16:55:16 +01001079All proxy names must be formed from upper and lower case letters, digits,
1080'-' (dash), '_' (underscore) , '.' (dot) and ':' (colon). ACL names are
1081case-sensitive, which means that "www" and "WWW" are two different proxies.
1082
1083Historically, all proxy names could overlap, it just caused troubles in the
1084logs. Since the introduction of content switching, it is mandatory that two
1085proxies with overlapping capabilities (frontend/backend) have different names.
1086However, it is still permitted that a frontend and a backend share the same
1087name, as this configuration seems to be commonly encountered.
1088
1089Right now, two major proxy modes are supported : "tcp", also known as layer 4,
1090and "http", also known as layer 7. In layer 4 mode, HAProxy simply forwards
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001091bidirectional traffic between two sides. In layer 7 mode, HAProxy analyzes the
Willy Tarreau0ba27502007-12-24 16:55:16 +01001092protocol, and can interact with it by allowing, blocking, switching, adding,
1093modifying, or removing arbitrary contents in requests or responses, based on
1094arbitrary criteria.
1095
Willy Tarreau0ba27502007-12-24 16:55:16 +01001096
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010974.1. Proxy keywords matrix
1098--------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001099
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001100The following list of keywords is supported. Most of them may only be used in a
1101limited set of section types. Some of them are marked as "deprecated" because
1102they are inherited from an old syntax which may be confusing or functionally
1103limited, and there are new recommended keywords to replace them. Keywords
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001104marked with "(*)" can be optionally inverted using the "no" prefix, eg. "no
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001105option contstats". This makes sense when the option has been enabled by default
Willy Tarreau3842f002009-06-14 11:39:52 +02001106and must be disabled for a specific instance. Such options may also be prefixed
1107with "default" in order to restore default settings regardless of what has been
1108specified in a previous "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001109
Willy Tarreau6a06a402007-07-15 20:15:28 +02001110
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001111 keyword defaults frontend listen backend
1112------------------------------------+----------+----------+---------+---------
1113acl - X X X
1114appsession - - X X
1115backlog X X X -
1116balance X - X X
1117bind - X X -
1118bind-process X X X X
1119block - X X X
1120capture cookie - X X -
1121capture request header - X X -
1122capture response header - X X -
1123clitimeout (deprecated) X X X -
William Lallemand82fe75c2012-10-23 10:25:10 +02001124compression X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001125contimeout (deprecated) X - X X
1126cookie X - X X
1127default-server X - X X
1128default_backend X X X -
1129description - X X X
1130disabled X X X X
1131dispatch - - X X
1132enabled X X X X
1133errorfile X X X X
1134errorloc X X X X
1135errorloc302 X X X X
1136-- keyword -------------------------- defaults - frontend - listen -- backend -
1137errorloc303 X X X X
Cyril Bonté0d4bf012010-04-25 23:21:46 +02001138force-persist - X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001139fullconn X - X X
1140grace X X X X
1141hash-type X - X X
1142http-check disable-on-404 X - X X
Willy Tarreaubd741542010-03-16 18:46:54 +01001143http-check expect - - X X
Willy Tarreau7ab6aff2010-10-12 06:30:16 +02001144http-check send-state X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001145http-request - X X X
Willy Tarreaue365c0b2013-06-11 16:06:12 +02001146http-response - X X X
Baptiste Assmann5ecb77f2013-10-06 23:24:13 +02001147tcp-check expect - - X X
1148tcp-check send - - X X
1149tcp-check send-binary - - X X
Baptiste Assmann2c42ef52013-10-09 21:57:02 +02001150http-send-name-header - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001151id - X X X
Cyril Bonté0d4bf012010-04-25 23:21:46 +02001152ignore-persist - X X X
William Lallemand0f99e342011-10-12 17:50:54 +02001153log (*) X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001154maxconn X X X -
1155mode X X X X
1156monitor fail - X X -
1157monitor-net X X X -
1158monitor-uri X X X -
1159option abortonclose (*) X - X X
1160option accept-invalid-http-request (*) X X X -
1161option accept-invalid-http-response (*) X - X X
1162option allbackups (*) X - X X
1163option checkcache (*) X - X X
1164option clitcpka (*) X X X -
1165option contstats (*) X X X -
1166option dontlog-normal (*) X X X -
1167option dontlognull (*) X X X -
1168option forceclose (*) X X X X
1169-- keyword -------------------------- defaults - frontend - listen -- backend -
1170option forwardfor X X X X
Baptiste Assmann5ecb77f2013-10-06 23:24:13 +02001171option tcp-check X - X X
Willy Tarreau96e31212011-05-30 18:10:30 +02001172option http-no-delay (*) X X X X
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02001173option http-pretend-keepalive (*) X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001174option http-server-close (*) X X X X
1175option http-use-proxy-header (*) X X X -
1176option httpchk X - X X
1177option httpclose (*) X X X X
1178option httplog X X X X
1179option http_proxy (*) X X X X
Jamie Gloudon801a0a32012-08-25 00:18:33 -04001180option independent-streams (*) X X X X
Gabor Lekenyb4c81e42010-09-29 18:17:05 +02001181option ldap-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001182option log-health-checks (*) X - X X
1183option log-separate-errors (*) X X X -
1184option logasap (*) X X X -
1185option mysql-check X - X X
Rauf Kuliyev38b41562011-01-04 15:14:13 +01001186option pgsql-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001187option nolinger (*) X X X X
1188option originalto X X X X
1189option persist (*) X - X X
1190option redispatch (*) X - X X
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02001191option redis-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001192option smtpchk X - X X
1193option socket-stats (*) X X X -
1194option splice-auto (*) X X X X
1195option splice-request (*) X X X X
1196option splice-response (*) X X X X
1197option srvtcpka (*) X - X X
1198option ssl-hello-chk X - X X
1199-- keyword -------------------------- defaults - frontend - listen -- backend -
1200option tcp-smart-accept (*) X X X -
1201option tcp-smart-connect (*) X - X X
1202option tcpka X X X X
1203option tcplog X X X X
1204option transparent (*) X - X X
1205persist rdp-cookie X - X X
1206rate-limit sessions X X X -
1207redirect - X X X
1208redisp (deprecated) X - X X
1209redispatch (deprecated) X - X X
1210reqadd - X X X
1211reqallow - X X X
1212reqdel - X X X
1213reqdeny - X X X
1214reqiallow - X X X
1215reqidel - X X X
1216reqideny - X X X
1217reqipass - X X X
1218reqirep - X X X
1219reqisetbe - X X X
1220reqitarpit - X X X
1221reqpass - X X X
1222reqrep - X X X
1223-- keyword -------------------------- defaults - frontend - listen -- backend -
1224reqsetbe - X X X
1225reqtarpit - X X X
1226retries X - X X
1227rspadd - X X X
1228rspdel - X X X
1229rspdeny - X X X
1230rspidel - X X X
1231rspideny - X X X
1232rspirep - X X X
1233rsprep - X X X
1234server - - X X
1235source X - X X
1236srvtimeout (deprecated) X - X X
Cyril Bonté66c327d2010-10-12 00:14:37 +02001237stats admin - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001238stats auth X - X X
1239stats enable X - X X
1240stats hide-version X - X X
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02001241stats http-request - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001242stats realm X - X X
1243stats refresh X - X X
1244stats scope X - X X
1245stats show-desc X - X X
1246stats show-legends X - X X
1247stats show-node X - X X
1248stats uri X - X X
1249-- keyword -------------------------- defaults - frontend - listen -- backend -
1250stick match - - X X
1251stick on - - X X
1252stick store-request - - X X
Willy Tarreaud8dc99f2011-07-01 11:33:25 +02001253stick store-response - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001254stick-table - - X X
Willy Tarreaue9656522010-08-17 15:40:09 +02001255tcp-request connection - X X -
1256tcp-request content - X X X
Willy Tarreaua56235c2010-09-14 11:31:36 +02001257tcp-request inspect-delay - X X X
Emeric Brun0a3b67f2010-09-24 15:34:53 +02001258tcp-response content - - X X
1259tcp-response inspect-delay - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001260timeout check X - X X
1261timeout client X X X -
1262timeout clitimeout (deprecated) X X X -
1263timeout connect X - X X
1264timeout contimeout (deprecated) X - X X
1265timeout http-keep-alive X X X X
1266timeout http-request X X X X
1267timeout queue X - X X
1268timeout server X - X X
1269timeout srvtimeout (deprecated) X - X X
1270timeout tarpit X X X X
Willy Tarreauce887fd2012-05-12 12:50:00 +02001271timeout tunnel X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001272transparent (deprecated) X - X X
William Lallemanda73203e2012-03-12 12:48:57 +01001273unique-id-format X X X -
1274unique-id-header X X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001275use_backend - X X -
Willy Tarreau4a5cade2012-04-05 21:09:48 +02001276use-server - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001277------------------------------------+----------+----------+---------+---------
1278 keyword defaults frontend listen backend
Willy Tarreau6a06a402007-07-15 20:15:28 +02001279
Willy Tarreau0ba27502007-12-24 16:55:16 +01001280
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012814.2. Alphabetically sorted keywords reference
1282---------------------------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001283
1284This section provides a description of each keyword and its usage.
1285
1286
1287acl <aclname> <criterion> [flags] [operator] <value> ...
1288 Declare or complete an access list.
1289 May be used in sections : defaults | frontend | listen | backend
1290 no | yes | yes | yes
1291 Example:
1292 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
1293 acl invalid_src src_port 0:1023
1294 acl local_dst hdr(host) -i localhost
1295
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001296 See section 7 about ACL usage.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001297
1298
Cyril Bontéb21570a2009-11-29 20:04:48 +01001299appsession <cookie> len <length> timeout <holdtime>
1300 [request-learn] [prefix] [mode <path-parameters|query-string>]
Willy Tarreau0ba27502007-12-24 16:55:16 +01001301 Define session stickiness on an existing application cookie.
1302 May be used in sections : defaults | frontend | listen | backend
1303 no | no | yes | yes
1304 Arguments :
1305 <cookie> this is the name of the cookie used by the application and which
1306 HAProxy will have to learn for each new session.
1307
Cyril Bontéb21570a2009-11-29 20:04:48 +01001308 <length> this is the max number of characters that will be memorized and
Willy Tarreau0ba27502007-12-24 16:55:16 +01001309 checked in each cookie value.
1310
1311 <holdtime> this is the time after which the cookie will be removed from
1312 memory if unused. If no unit is specified, this time is in
1313 milliseconds.
1314
Cyril Bontébf47aeb2009-10-15 00:15:40 +02001315 request-learn
1316 If this option is specified, then haproxy will be able to learn
1317 the cookie found in the request in case the server does not
1318 specify any in response. This is typically what happens with
1319 PHPSESSID cookies, or when haproxy's session expires before
1320 the application's session and the correct server is selected.
1321 It is recommended to specify this option to improve reliability.
1322
Cyril Bontéb21570a2009-11-29 20:04:48 +01001323 prefix When this option is specified, haproxy will match on the cookie
1324 prefix (or URL parameter prefix). The appsession value is the
1325 data following this prefix.
1326
1327 Example :
1328 appsession ASPSESSIONID len 64 timeout 3h prefix
1329
1330 This will match the cookie ASPSESSIONIDXXXX=XXXXX,
1331 the appsession value will be XXXX=XXXXX.
1332
1333 mode This option allows to change the URL parser mode.
1334 2 modes are currently supported :
1335 - path-parameters :
1336 The parser looks for the appsession in the path parameters
1337 part (each parameter is separated by a semi-colon), which is
1338 convenient for JSESSIONID for example.
1339 This is the default mode if the option is not set.
1340 - query-string :
1341 In this mode, the parser will look for the appsession in the
1342 query string.
1343
Willy Tarreau0ba27502007-12-24 16:55:16 +01001344 When an application cookie is defined in a backend, HAProxy will check when
1345 the server sets such a cookie, and will store its value in a table, and
1346 associate it with the server's identifier. Up to <length> characters from
1347 the value will be retained. On each connection, haproxy will look for this
Cyril Bontéb21570a2009-11-29 20:04:48 +01001348 cookie both in the "Cookie:" headers, and as a URL parameter (depending on
1349 the mode used). If a known value is found, the client will be directed to the
1350 server associated with this value. Otherwise, the load balancing algorithm is
Willy Tarreau0ba27502007-12-24 16:55:16 +01001351 applied. Cookies are automatically removed from memory when they have been
1352 unused for a duration longer than <holdtime>.
1353
1354 The definition of an application cookie is limited to one per backend.
1355
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01001356 Note : Consider not using this feature in multi-process mode (nbproc > 1)
1357 unless you know what you do : memory is not shared between the
1358 processes, which can result in random behaviours.
1359
Willy Tarreau0ba27502007-12-24 16:55:16 +01001360 Example :
1361 appsession JSESSIONID len 52 timeout 3h
1362
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01001363 See also : "cookie", "capture cookie", "balance", "stick", "stick-table",
1364 "ignore-persist", "nbproc" and "bind-process".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001365
1366
Willy Tarreauc73ce2b2008-01-06 10:55:10 +01001367backlog <conns>
1368 Give hints to the system about the approximate listen backlog desired size
1369 May be used in sections : defaults | frontend | listen | backend
1370 yes | yes | yes | no
1371 Arguments :
1372 <conns> is the number of pending connections. Depending on the operating
1373 system, it may represent the number of already acknowledged
Cyril Bontédc4d9032012-04-08 21:57:39 +02001374 connections, of non-acknowledged ones, or both.
Willy Tarreauc73ce2b2008-01-06 10:55:10 +01001375
1376 In order to protect against SYN flood attacks, one solution is to increase
1377 the system's SYN backlog size. Depending on the system, sometimes it is just
1378 tunable via a system parameter, sometimes it is not adjustable at all, and
1379 sometimes the system relies on hints given by the application at the time of
1380 the listen() syscall. By default, HAProxy passes the frontend's maxconn value
1381 to the listen() syscall. On systems which can make use of this value, it can
1382 sometimes be useful to be able to specify a different value, hence this
1383 backlog parameter.
1384
1385 On Linux 2.4, the parameter is ignored by the system. On Linux 2.6, it is
1386 used as a hint and the system accepts up to the smallest greater power of
1387 two, and never more than some limits (usually 32768).
1388
1389 See also : "maxconn" and the target operating system's tuning guide.
1390
1391
Willy Tarreau0ba27502007-12-24 16:55:16 +01001392balance <algorithm> [ <arguments> ]
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001393balance url_param <param> [check_post [<max_wait>]]
Willy Tarreau0ba27502007-12-24 16:55:16 +01001394 Define the load balancing algorithm to be used in a backend.
1395 May be used in sections : defaults | frontend | listen | backend
1396 yes | no | yes | yes
1397 Arguments :
1398 <algorithm> is the algorithm used to select a server when doing load
1399 balancing. This only applies when no persistence information
1400 is available, or when a connection is redispatched to another
1401 server. <algorithm> may be one of the following :
1402
1403 roundrobin Each server is used in turns, according to their weights.
1404 This is the smoothest and fairest algorithm when the server's
1405 processing time remains equally distributed. This algorithm
1406 is dynamic, which means that server weights may be adjusted
Willy Tarreau9757a382009-10-03 12:56:50 +02001407 on the fly for slow starts for instance. It is limited by
Godbacha34bdc02013-07-22 07:44:53 +08001408 design to 4095 active servers per backend. Note that in some
Willy Tarreau9757a382009-10-03 12:56:50 +02001409 large farms, when a server becomes up after having been down
1410 for a very short time, it may sometimes take a few hundreds
1411 requests for it to be re-integrated into the farm and start
1412 receiving traffic. This is normal, though very rare. It is
1413 indicated here in case you would have the chance to observe
1414 it, so that you don't worry.
1415
1416 static-rr Each server is used in turns, according to their weights.
1417 This algorithm is as similar to roundrobin except that it is
1418 static, which means that changing a server's weight on the
1419 fly will have no effect. On the other hand, it has no design
1420 limitation on the number of servers, and when a server goes
1421 up, it is always immediately reintroduced into the farm, once
1422 the full map is recomputed. It also uses slightly less CPU to
1423 run (around -1%).
Willy Tarreau0ba27502007-12-24 16:55:16 +01001424
Willy Tarreau2d2a7f82008-03-17 12:07:56 +01001425 leastconn The server with the lowest number of connections receives the
1426 connection. Round-robin is performed within groups of servers
1427 of the same load to ensure that all servers will be used. Use
1428 of this algorithm is recommended where very long sessions are
1429 expected, such as LDAP, SQL, TSE, etc... but is not very well
1430 suited for protocols using short sessions such as HTTP. This
1431 algorithm is dynamic, which means that server weights may be
1432 adjusted on the fly for slow starts for instance.
1433
Willy Tarreauf09c6602012-02-13 17:12:08 +01001434 first The first server with available connection slots receives the
1435 connection. The servers are choosen from the lowest numeric
1436 identifier to the highest (see server parameter "id"), which
1437 defaults to the server's position in the farm. Once a server
Willy Tarreau64559c52012-04-07 09:08:45 +02001438 reaches its maxconn value, the next server is used. It does
Willy Tarreauf09c6602012-02-13 17:12:08 +01001439 not make sense to use this algorithm without setting maxconn.
1440 The purpose of this algorithm is to always use the smallest
1441 number of servers so that extra servers can be powered off
1442 during non-intensive hours. This algorithm ignores the server
1443 weight, and brings more benefit to long session such as RDP
Willy Tarreau64559c52012-04-07 09:08:45 +02001444 or IMAP than HTTP, though it can be useful there too. In
1445 order to use this algorithm efficiently, it is recommended
1446 that a cloud controller regularly checks server usage to turn
1447 them off when unused, and regularly checks backend queue to
1448 turn new servers on when the queue inflates. Alternatively,
1449 using "http-check send-state" may inform servers on the load.
Willy Tarreauf09c6602012-02-13 17:12:08 +01001450
Willy Tarreau0ba27502007-12-24 16:55:16 +01001451 source The source IP address is hashed and divided by the total
1452 weight of the running servers to designate which server will
1453 receive the request. This ensures that the same client IP
1454 address will always reach the same server as long as no
1455 server goes down or up. If the hash result changes due to the
1456 number of running servers changing, many clients will be
1457 directed to a different server. This algorithm is generally
1458 used in TCP mode where no cookie may be inserted. It may also
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001459 be used on the Internet to provide a best-effort stickiness
Willy Tarreau0ba27502007-12-24 16:55:16 +01001460 to clients which refuse session cookies. This algorithm is
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02001461 static by default, which means that changing a server's
1462 weight on the fly will have no effect, but this can be
1463 changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001464
Oskar Stolc8dc41842012-05-19 10:19:54 +01001465 uri This algorithm hashes either the left part of the URI (before
1466 the question mark) or the whole URI (if the "whole" parameter
1467 is present) and divides the hash value by the total weight of
1468 the running servers. The result designates which server will
1469 receive the request. This ensures that the same URI will
1470 always be directed to the same server as long as no server
1471 goes up or down. This is used with proxy caches and
1472 anti-virus proxies in order to maximize the cache hit rate.
1473 Note that this algorithm may only be used in an HTTP backend.
1474 This algorithm is static by default, which means that
1475 changing a server's weight on the fly will have no effect,
1476 but this can be changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001477
Oskar Stolc8dc41842012-05-19 10:19:54 +01001478 This algorithm supports two optional parameters "len" and
Marek Majkowski9c30fc12008-04-27 23:25:55 +02001479 "depth", both followed by a positive integer number. These
1480 options may be helpful when it is needed to balance servers
1481 based on the beginning of the URI only. The "len" parameter
1482 indicates that the algorithm should only consider that many
1483 characters at the beginning of the URI to compute the hash.
1484 Note that having "len" set to 1 rarely makes sense since most
1485 URIs start with a leading "/".
1486
1487 The "depth" parameter indicates the maximum directory depth
1488 to be used to compute the hash. One level is counted for each
1489 slash in the request. If both parameters are specified, the
1490 evaluation stops when either is reached.
1491
Willy Tarreau0ba27502007-12-24 16:55:16 +01001492 url_param The URL parameter specified in argument will be looked up in
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001493 the query string of each HTTP GET request.
1494
1495 If the modifier "check_post" is used, then an HTTP POST
Cyril Bontédc4d9032012-04-08 21:57:39 +02001496 request entity will be searched for the parameter argument,
1497 when it is not found in a query string after a question mark
1498 ('?') in the URL. Optionally, specify a number of octets to
1499 wait for before attempting to search the message body. If the
1500 entity can not be searched, then round robin is used for each
1501 request. For instance, if your clients always send the LB
1502 parameter in the first 128 bytes, then specify that. The
1503 default is 48. The entity data will not be scanned until the
1504 required number of octets have arrived at the gateway, this
1505 is the minimum of: (default/max_wait, Content-Length or first
1506 chunk length). If Content-Length is missing or zero, it does
1507 not need to wait for more data than the client promised to
1508 send. When Content-Length is present and larger than
1509 <max_wait>, then waiting is limited to <max_wait> and it is
1510 assumed that this will be enough data to search for the
1511 presence of the parameter. In the unlikely event that
1512 Transfer-Encoding: chunked is used, only the first chunk is
1513 scanned. Parameter values separated by a chunk boundary, may
1514 be randomly balanced if at all.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001515
1516 If the parameter is found followed by an equal sign ('=') and
1517 a value, then the value is hashed and divided by the total
1518 weight of the running servers. The result designates which
1519 server will receive the request.
1520
1521 This is used to track user identifiers in requests and ensure
1522 that a same user ID will always be sent to the same server as
1523 long as no server goes up or down. If no value is found or if
1524 the parameter is not found, then a round robin algorithm is
1525 applied. Note that this algorithm may only be used in an HTTP
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02001526 backend. This algorithm is static by default, which means
1527 that changing a server's weight on the fly will have no
1528 effect, but this can be changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001529
Cyril Bontédc4d9032012-04-08 21:57:39 +02001530 hdr(<name>) The HTTP header <name> will be looked up in each HTTP
1531 request. Just as with the equivalent ACL 'hdr()' function,
1532 the header name in parenthesis is not case sensitive. If the
1533 header is absent or if it does not contain any value, the
1534 roundrobin algorithm is applied instead.
Benoitaffb4812009-03-25 13:02:10 +01001535
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001536 An optional 'use_domain_only' parameter is available, for
Benoitaffb4812009-03-25 13:02:10 +01001537 reducing the hash algorithm to the main domain part with some
1538 specific headers such as 'Host'. For instance, in the Host
1539 value "haproxy.1wt.eu", only "1wt" will be considered.
1540
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02001541 This algorithm is static by default, which means that
1542 changing a server's weight on the fly will have no effect,
1543 but this can be changed using "hash-type".
1544
Emeric Brun736aa232009-06-30 17:56:00 +02001545 rdp-cookie
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02001546 rdp-cookie(<name>)
Emeric Brun736aa232009-06-30 17:56:00 +02001547 The RDP cookie <name> (or "mstshash" if omitted) will be
1548 looked up and hashed for each incoming TCP request. Just as
1549 with the equivalent ACL 'req_rdp_cookie()' function, the name
1550 is not case-sensitive. This mechanism is useful as a degraded
1551 persistence mode, as it makes it possible to always send the
1552 same user (or the same session ID) to the same server. If the
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001553 cookie is not found, the normal roundrobin algorithm is
Emeric Brun736aa232009-06-30 17:56:00 +02001554 used instead.
1555
1556 Note that for this to work, the frontend must ensure that an
1557 RDP cookie is already present in the request buffer. For this
1558 you must use 'tcp-request content accept' rule combined with
1559 a 'req_rdp_cookie_cnt' ACL.
1560
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02001561 This algorithm is static by default, which means that
1562 changing a server's weight on the fly will have no effect,
1563 but this can be changed using "hash-type".
1564
Cyril Bontédc4d9032012-04-08 21:57:39 +02001565 See also the rdp_cookie pattern fetch function.
Simon Hormanab814e02011-06-24 14:50:20 +09001566
Willy Tarreau0ba27502007-12-24 16:55:16 +01001567 <arguments> is an optional list of arguments which may be needed by some
Marek Majkowski9c30fc12008-04-27 23:25:55 +02001568 algorithms. Right now, only "url_param" and "uri" support an
1569 optional argument.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001570
Marek Majkowski9c30fc12008-04-27 23:25:55 +02001571 balance uri [len <len>] [depth <depth>]
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001572 balance url_param <param> [check_post [<max_wait>]]
Willy Tarreau0ba27502007-12-24 16:55:16 +01001573
Willy Tarreau3cd9af22009-03-15 14:06:41 +01001574 The load balancing algorithm of a backend is set to roundrobin when no other
1575 algorithm, mode nor option have been set. The algorithm may only be set once
1576 for each backend.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001577
1578 Examples :
1579 balance roundrobin
1580 balance url_param userid
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001581 balance url_param session_id check_post 64
Benoitaffb4812009-03-25 13:02:10 +01001582 balance hdr(User-Agent)
1583 balance hdr(host)
1584 balance hdr(Host) use_domain_only
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001585
1586 Note: the following caveats and limitations on using the "check_post"
1587 extension with "url_param" must be considered :
1588
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001589 - all POST requests are eligible for consideration, because there is no way
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001590 to determine if the parameters will be found in the body or entity which
1591 may contain binary data. Therefore another method may be required to
1592 restrict consideration of POST requests that have no URL parameters in
1593 the body. (see acl reqideny http_end)
1594
1595 - using a <max_wait> value larger than the request buffer size does not
1596 make sense and is useless. The buffer size is set at build time, and
1597 defaults to 16 kB.
1598
1599 - Content-Encoding is not supported, the parameter search will probably
1600 fail; and load balancing will fall back to Round Robin.
1601
1602 - Expect: 100-continue is not supported, load balancing will fall back to
1603 Round Robin.
1604
1605 - Transfer-Encoding (RFC2616 3.6.1) is only supported in the first chunk.
1606 If the entire parameter value is not present in the first chunk, the
1607 selection of server is undefined (actually, defined by how little
1608 actually appeared in the first chunk).
1609
1610 - This feature does not support generation of a 100, 411 or 501 response.
1611
1612 - In some cases, requesting "check_post" MAY attempt to scan the entire
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001613 contents of a message body. Scanning normally terminates when linear
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001614 white space or control characters are found, indicating the end of what
1615 might be a URL parameter list. This is probably not a concern with SGML
1616 type message bodies.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001617
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02001618 See also : "dispatch", "cookie", "appsession", "transparent", "hash-type" and
1619 "http_proxy".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001620
1621
Willy Tarreaub6205fd2012-09-24 12:27:33 +02001622bind [<address>]:<port_range> [, ...] [param*]
1623bind /<path> [, ...] [param*]
Willy Tarreau0ba27502007-12-24 16:55:16 +01001624 Define one or several listening addresses and/or ports in a frontend.
1625 May be used in sections : defaults | frontend | listen | backend
1626 no | yes | yes | no
1627 Arguments :
Willy Tarreaub1e52e82008-01-13 14:49:51 +01001628 <address> is optional and can be a host name, an IPv4 address, an IPv6
1629 address, or '*'. It designates the address the frontend will
1630 listen on. If unset, all IPv4 addresses of the system will be
1631 listened on. The same will apply for '*' or the system's
David du Colombier9c938da2011-03-17 10:40:27 +01001632 special address "0.0.0.0". The IPv6 equivalent is '::'.
Willy Tarreau24709282013-03-10 21:32:12 +01001633 Optionally, an address family prefix may be used before the
1634 address to force the family regardless of the address format,
1635 which can be useful to specify a path to a unix socket with
1636 no slash ('/'). Currently supported prefixes are :
1637 - 'ipv4@' -> address is always IPv4
1638 - 'ipv6@' -> address is always IPv6
1639 - 'unix@' -> address is a path to a local unix socket
Willy Tarreau40aa0702013-03-10 23:51:38 +01001640 - 'fd@<n>' -> use file descriptor <n> inherited from the
1641 parent. The fd must be bound and may or may not already
1642 be listening.
Willy Tarreaudad36a32013-03-11 01:20:04 +01001643 Any part of the address string may reference any number of
1644 environment variables by preceding their name with a dollar
1645 sign ('$') and optionally enclosing them with braces ('{}'),
1646 similarly to what is done in Bourne shell.
Willy Tarreaub1e52e82008-01-13 14:49:51 +01001647
Willy Tarreauc5011ca2010-03-22 11:53:56 +01001648 <port_range> is either a unique TCP port, or a port range for which the
1649 proxy will accept connections for the IP address specified
Willy Tarreauceb24bc2010-11-09 12:46:41 +01001650 above. The port is mandatory for TCP listeners. Note that in
1651 the case of an IPv6 address, the port is always the number
1652 after the last colon (':'). A range can either be :
Willy Tarreauc5011ca2010-03-22 11:53:56 +01001653 - a numerical port (ex: '80')
1654 - a dash-delimited ports range explicitly stating the lower
1655 and upper bounds (ex: '2000-2100') which are included in
1656 the range.
1657
1658 Particular care must be taken against port ranges, because
1659 every <address:port> couple consumes one socket (= a file
1660 descriptor), so it's easy to consume lots of descriptors
1661 with a simple range, and to run out of sockets. Also, each
1662 <address:port> couple must be used only once among all
1663 instances running on a same system. Please note that binding
1664 to ports lower than 1024 generally require particular
Jamie Gloudon801a0a32012-08-25 00:18:33 -04001665 privileges to start the program, which are independent of
Willy Tarreauc5011ca2010-03-22 11:53:56 +01001666 the 'uid' parameter.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001667
Willy Tarreauceb24bc2010-11-09 12:46:41 +01001668 <path> is a UNIX socket path beginning with a slash ('/'). This is
1669 alternative to the TCP listening port. Haproxy will then
1670 receive UNIX connections on the socket located at this place.
1671 The path must begin with a slash and by default is absolute.
1672 It can be relative to the prefix defined by "unix-bind" in
1673 the global section. Note that the total length of the prefix
1674 followed by the socket path cannot exceed some system limits
1675 for UNIX sockets, which commonly are set to 107 characters.
1676
Willy Tarreaub6205fd2012-09-24 12:27:33 +02001677 <param*> is a list of parameters common to all sockets declared on the
1678 same line. These numerous parameters depend on OS and build
1679 options and have a complete section dedicated to them. Please
1680 refer to section 5 to for more details.
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02001681
Willy Tarreau0ba27502007-12-24 16:55:16 +01001682 It is possible to specify a list of address:port combinations delimited by
1683 commas. The frontend will then listen on all of these addresses. There is no
1684 fixed limit to the number of addresses and ports which can be listened on in
1685 a frontend, as well as there is no limit to the number of "bind" statements
1686 in a frontend.
1687
1688 Example :
1689 listen http_proxy
1690 bind :80,:443
1691 bind 10.0.0.1:10080,10.0.0.1:10443
Willy Tarreauceb24bc2010-11-09 12:46:41 +01001692 bind /var/run/ssl-frontend.sock user root mode 600 accept-proxy
Willy Tarreau0ba27502007-12-24 16:55:16 +01001693
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02001694 listen http_https_proxy
1695 bind :80
Cyril Bonté0d44fc62012-10-09 22:45:33 +02001696 bind :443 ssl crt /etc/haproxy/site.pem
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02001697
Willy Tarreau24709282013-03-10 21:32:12 +01001698 listen http_https_proxy_explicit
1699 bind ipv6@:80
1700 bind ipv4@public_ssl:443 ssl crt /etc/haproxy/site.pem
1701 bind unix@ssl-frontend.sock user root mode 600 accept-proxy
1702
Willy Tarreaudad36a32013-03-11 01:20:04 +01001703 listen external_bind_app1
1704 bind fd@${FD_APP1}
1705
Willy Tarreauceb24bc2010-11-09 12:46:41 +01001706 See also : "source", "option forwardfor", "unix-bind" and the PROXY protocol
Willy Tarreaub6205fd2012-09-24 12:27:33 +02001707 documentation, and section 5 about bind options.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001708
1709
Willy Tarreau110ecc12012-11-15 17:50:01 +01001710bind-process [ all | odd | even | <number 1-32>[-<number 1-32>] ] ...
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01001711 Limit visibility of an instance to a certain set of processes numbers.
1712 May be used in sections : defaults | frontend | listen | backend
1713 yes | yes | yes | yes
1714 Arguments :
1715 all All process will see this instance. This is the default. It
1716 may be used to override a default value.
1717
1718 odd This instance will be enabled on processes 1,3,5,...31. This
1719 option may be combined with other numbers.
1720
1721 even This instance will be enabled on processes 2,4,6,...32. This
1722 option may be combined with other numbers. Do not use it
1723 with less than 2 processes otherwise some instances might be
1724 missing from all processes.
1725
Willy Tarreau110ecc12012-11-15 17:50:01 +01001726 number The instance will be enabled on this process number or range,
1727 whose values must all be between 1 and 32. You must be
1728 careful not to reference a process number greater than the
1729 configured global.nbproc, otherwise some instances might be
1730 missing from all processes.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01001731
1732 This keyword limits binding of certain instances to certain processes. This
1733 is useful in order not to have too many processes listening to the same
1734 ports. For instance, on a dual-core machine, it might make sense to set
1735 'nbproc 2' in the global section, then distributes the listeners among 'odd'
1736 and 'even' instances.
1737
1738 At the moment, it is not possible to reference more than 32 processes using
1739 this keyword, but this should be more than enough for most setups. Please
1740 note that 'all' really means all processes and is not limited to the first
1741 32.
1742
1743 If some backends are referenced by frontends bound to other processes, the
1744 backend automatically inherits the frontend's processes.
1745
1746 Example :
1747 listen app_ip1
1748 bind 10.0.0.1:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02001749 bind-process odd
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01001750
1751 listen app_ip2
1752 bind 10.0.0.2:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02001753 bind-process even
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01001754
1755 listen management
1756 bind 10.0.0.3:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02001757 bind-process 1 2 3 4
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01001758
Willy Tarreau110ecc12012-11-15 17:50:01 +01001759 listen management
1760 bind 10.0.0.4:80
1761 bind-process 1-4
1762
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01001763 See also : "nbproc" in global section.
1764
1765
Willy Tarreau0ba27502007-12-24 16:55:16 +01001766block { if | unless } <condition>
1767 Block a layer 7 request if/unless a condition is matched
1768 May be used in sections : defaults | frontend | listen | backend
1769 no | yes | yes | yes
1770
1771 The HTTP request will be blocked very early in the layer 7 processing
1772 if/unless <condition> is matched. A 403 error will be returned if the request
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001773 is blocked. The condition has to reference ACLs (see section 7). This is
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02001774 typically used to deny access to certain sensitive resources if some
Willy Tarreau0ba27502007-12-24 16:55:16 +01001775 conditions are met or not met. There is no fixed limit to the number of
1776 "block" statements per instance.
1777
1778 Example:
1779 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
1780 acl invalid_src src_port 0:1023
1781 acl local_dst hdr(host) -i localhost
1782 block if invalid_src || local_dst
1783
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001784 See section 7 about ACL usage.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001785
1786
1787capture cookie <name> len <length>
1788 Capture and log a cookie in the request and in the response.
1789 May be used in sections : defaults | frontend | listen | backend
1790 no | yes | yes | no
1791 Arguments :
1792 <name> is the beginning of the name of the cookie to capture. In order
1793 to match the exact name, simply suffix the name with an equal
1794 sign ('='). The full name will appear in the logs, which is
1795 useful with application servers which adjust both the cookie name
1796 and value (eg: ASPSESSIONXXXXX).
1797
1798 <length> is the maximum number of characters to report in the logs, which
1799 include the cookie name, the equal sign and the value, all in the
1800 standard "name=value" form. The string will be truncated on the
1801 right if it exceeds <length>.
1802
1803 Only the first cookie is captured. Both the "cookie" request headers and the
1804 "set-cookie" response headers are monitored. This is particularly useful to
1805 check for application bugs causing session crossing or stealing between
1806 users, because generally the user's cookies can only change on a login page.
1807
1808 When the cookie was not presented by the client, the associated log column
1809 will report "-". When a request does not cause a cookie to be assigned by the
1810 server, a "-" is reported in the response column.
1811
1812 The capture is performed in the frontend only because it is necessary that
1813 the log format does not change for a given frontend depending on the
1814 backends. This may change in the future. Note that there can be only one
Willy Tarreau193b8c62012-11-22 00:17:38 +01001815 "capture cookie" statement in a frontend. The maximum capture length is set
1816 by the global "tune.http.cookielen" setting and defaults to 63 characters. It
1817 is not possible to specify a capture in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001818
1819 Example:
1820 capture cookie ASPSESSION len 32
1821
1822 See also : "capture request header", "capture response header" as well as
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001823 section 8 about logging.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001824
1825
1826capture request header <name> len <length>
Willy Tarreau4460d032012-11-21 23:37:37 +01001827 Capture and log the last occurrence of the specified request header.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001828 May be used in sections : defaults | frontend | listen | backend
1829 no | yes | yes | no
1830 Arguments :
1831 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001832 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +01001833 appear in the requests, with the first letter of each word in
1834 upper case. The header name will not appear in the logs, only the
1835 value is reported, but the position in the logs is respected.
1836
1837 <length> is the maximum number of characters to extract from the value and
1838 report in the logs. The string will be truncated on the right if
1839 it exceeds <length>.
1840
Willy Tarreau4460d032012-11-21 23:37:37 +01001841 The complete value of the last occurrence of the header is captured. The
Willy Tarreau0ba27502007-12-24 16:55:16 +01001842 value will be added to the logs between braces ('{}'). If multiple headers
1843 are captured, they will be delimited by a vertical bar ('|') and will appear
Willy Tarreaucc6c8912009-02-22 10:53:55 +01001844 in the same order they were declared in the configuration. Non-existent
1845 headers will be logged just as an empty string. Common uses for request
1846 header captures include the "Host" field in virtual hosting environments, the
1847 "Content-length" when uploads are supported, "User-agent" to quickly
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001848 differentiate between real users and robots, and "X-Forwarded-For" in proxied
Willy Tarreaucc6c8912009-02-22 10:53:55 +01001849 environments to find where the request came from.
1850
1851 Note that when capturing headers such as "User-agent", some spaces may be
1852 logged, making the log analysis more difficult. Thus be careful about what
1853 you log if you know your log parser is not smart enough to rely on the
1854 braces.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001855
Willy Tarreau0900abb2012-11-22 00:21:46 +01001856 There is no limit to the number of captured request headers nor to their
1857 length, though it is wise to keep them low to limit memory usage per session.
1858 In order to keep log format consistent for a same frontend, header captures
1859 can only be declared in a frontend. It is not possible to specify a capture
1860 in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001861
1862 Example:
1863 capture request header Host len 15
1864 capture request header X-Forwarded-For len 15
1865 capture request header Referrer len 15
1866
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001867 See also : "capture cookie", "capture response header" as well as section 8
Willy Tarreau0ba27502007-12-24 16:55:16 +01001868 about logging.
1869
1870
1871capture response header <name> len <length>
Willy Tarreau4460d032012-11-21 23:37:37 +01001872 Capture and log the last occurrence of the specified response header.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001873 May be used in sections : defaults | frontend | listen | backend
1874 no | yes | yes | no
1875 Arguments :
1876 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001877 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +01001878 appear in the response, with the first letter of each word in
1879 upper case. The header name will not appear in the logs, only the
1880 value is reported, but the position in the logs is respected.
1881
1882 <length> is the maximum number of characters to extract from the value and
1883 report in the logs. The string will be truncated on the right if
1884 it exceeds <length>.
1885
Willy Tarreau4460d032012-11-21 23:37:37 +01001886 The complete value of the last occurrence of the header is captured. The
Willy Tarreau0ba27502007-12-24 16:55:16 +01001887 result will be added to the logs between braces ('{}') after the captured
1888 request headers. If multiple headers are captured, they will be delimited by
1889 a vertical bar ('|') and will appear in the same order they were declared in
Willy Tarreaucc6c8912009-02-22 10:53:55 +01001890 the configuration. Non-existent headers will be logged just as an empty
1891 string. Common uses for response header captures include the "Content-length"
1892 header which indicates how many bytes are expected to be returned, the
1893 "Location" header to track redirections.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001894
Willy Tarreau0900abb2012-11-22 00:21:46 +01001895 There is no limit to the number of captured response headers nor to their
1896 length, though it is wise to keep them low to limit memory usage per session.
1897 In order to keep log format consistent for a same frontend, header captures
1898 can only be declared in a frontend. It is not possible to specify a capture
1899 in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001900
1901 Example:
1902 capture response header Content-length len 9
1903 capture response header Location len 15
1904
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001905 See also : "capture cookie", "capture request header" as well as section 8
Willy Tarreau0ba27502007-12-24 16:55:16 +01001906 about logging.
1907
1908
Cyril Bontéf0c60612010-02-06 14:44:47 +01001909clitimeout <timeout> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01001910 Set the maximum inactivity time on the client side.
1911 May be used in sections : defaults | frontend | listen | backend
1912 yes | yes | yes | no
1913 Arguments :
1914 <timeout> is the timeout value is specified in milliseconds by default, but
1915 can be in any other unit if the number is suffixed by the unit,
1916 as explained at the top of this document.
1917
1918 The inactivity timeout applies when the client is expected to acknowledge or
1919 send data. In HTTP mode, this timeout is particularly important to consider
1920 during the first phase, when the client sends the request, and during the
1921 response while it is reading data sent by the server. The value is specified
1922 in milliseconds by default, but can be in any other unit if the number is
1923 suffixed by the unit, as specified at the top of this document. In TCP mode
1924 (and to a lesser extent, in HTTP mode), it is highly recommended that the
1925 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001926 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01001927 losses by specifying timeouts that are slightly above multiples of 3 seconds
1928 (eg: 4 or 5 seconds).
1929
1930 This parameter is specific to frontends, but can be specified once for all in
1931 "defaults" sections. This is in fact one of the easiest solutions not to
1932 forget about it. An unspecified timeout results in an infinite timeout, which
1933 is not recommended. Such a usage is accepted and works but reports a warning
1934 during startup because it may results in accumulation of expired sessions in
1935 the system if the system's timeouts are not configured either.
1936
1937 This parameter is provided for compatibility but is currently deprecated.
1938 Please use "timeout client" instead.
1939
Willy Tarreau036fae02008-01-06 13:24:40 +01001940 See also : "timeout client", "timeout http-request", "timeout server", and
1941 "srvtimeout".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001942
Cyril Bonté316a8cf2012-11-11 13:38:27 +01001943compression algo <algorithm> ...
1944compression type <mime type> ...
Willy Tarreau70737d12012-10-27 00:34:28 +02001945compression offload
William Lallemand82fe75c2012-10-23 10:25:10 +02001946 Enable HTTP compression.
1947 May be used in sections : defaults | frontend | listen | backend
1948 yes | yes | yes | yes
1949 Arguments :
Cyril Bonté316a8cf2012-11-11 13:38:27 +01001950 algo is followed by the list of supported compression algorithms.
1951 type is followed by the list of MIME types that will be compressed.
1952 offload makes haproxy work as a compression offloader only (see notes).
1953
1954 The currently supported algorithms are :
Dmitry Sivachenko87c208b2012-11-22 20:03:26 +04001955 identity this is mostly for debugging, and it was useful for developing
Cyril Bonté316a8cf2012-11-11 13:38:27 +01001956 the compression feature. Identity does not apply any change on
1957 data.
1958
1959 gzip applies gzip compression. This setting is only available when
1960 support for zlib was built in.
1961
1962 deflate same as gzip, but with deflate algorithm and zlib format.
1963 Note that this algorithm has ambiguous support on many browsers
1964 and no support at all from recent ones. It is strongly
1965 recommended not to use it for anything else than experimentation.
1966 This setting is only available when support for zlib was built
1967 in.
1968
Dmitry Sivachenko87c208b2012-11-22 20:03:26 +04001969 Compression will be activated depending on the Accept-Encoding request
Cyril Bonté316a8cf2012-11-11 13:38:27 +01001970 header. With identity, it does not take care of that header.
Dmitry Sivachenkoc9f3b452012-11-28 17:47:11 +04001971 If backend servers support HTTP compression, these directives
1972 will be no-op: haproxy will see the compressed response and will not
1973 compress again. If backend servers do not support HTTP compression and
1974 there is Accept-Encoding header in request, haproxy will compress the
1975 matching response.
Willy Tarreau70737d12012-10-27 00:34:28 +02001976
1977 The "offload" setting makes haproxy remove the Accept-Encoding header to
1978 prevent backend servers from compressing responses. It is strongly
1979 recommended not to do this because this means that all the compression work
1980 will be done on the single point where haproxy is located. However in some
1981 deployment scenarios, haproxy may be installed in front of a buggy gateway
Dmitry Sivachenkoc9f3b452012-11-28 17:47:11 +04001982 with broken HTTP compression implementation which can't be turned off.
1983 In that case haproxy can be used to prevent that gateway from emitting
1984 invalid payloads. In this case, simply removing the header in the
1985 configuration does not work because it applies before the header is parsed,
1986 so that prevents haproxy from compressing. The "offload" setting should
1987 then be used for such scenarios.
William Lallemand82fe75c2012-10-23 10:25:10 +02001988
William Lallemand05097442012-11-20 12:14:28 +01001989 Compression is disabled when:
Baptiste Assmann650d53d2013-01-05 15:44:44 +01001990 * the request does not advertise a supported compression algorithm in the
1991 "Accept-Encoding" header
1992 * the response message is not HTTP/1.1
William Lallemandd3002612012-11-26 14:34:47 +01001993 * HTTP status code is not 200
Baptiste Assmann650d53d2013-01-05 15:44:44 +01001994 * response contain neither a "Content-Length" header nor a
1995 "Transfer-Encoding" whose last value is "chunked"
1996 * response contains a "Content-Type" header whose first value starts with
1997 "multipart"
1998 * the response contains the "no-transform" value in the "Cache-control"
1999 header
2000 * User-Agent matches "Mozilla/4" unless it is MSIE 6 with XP SP2, or MSIE 7
2001 and later
2002 * The response contains a "Content-Encoding" header, indicating that the
2003 response is already compressed (see compression offload)
William Lallemand05097442012-11-20 12:14:28 +01002004
Baptiste Assmann650d53d2013-01-05 15:44:44 +01002005 Note: The compression does not rewrite Etag headers, and does not emit the
2006 Warning header.
William Lallemand05097442012-11-20 12:14:28 +01002007
William Lallemand82fe75c2012-10-23 10:25:10 +02002008 Examples :
2009 compression algo gzip
2010 compression type text/html text/plain
Willy Tarreau0ba27502007-12-24 16:55:16 +01002011
Cyril Bontéf0c60612010-02-06 14:44:47 +01002012contimeout <timeout> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01002013 Set the maximum time to wait for a connection attempt to a server to succeed.
2014 May be used in sections : defaults | frontend | listen | backend
2015 yes | no | yes | yes
2016 Arguments :
2017 <timeout> is the timeout value is specified in milliseconds by default, but
2018 can be in any other unit if the number is suffixed by the unit,
2019 as explained at the top of this document.
2020
2021 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002022 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreaud72758d2010-01-12 10:42:19 +01002023 cover one or several TCP packet losses by specifying timeouts that are
Willy Tarreau0ba27502007-12-24 16:55:16 +01002024 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
2025 connect timeout also presets the queue timeout to the same value if this one
2026 has not been specified. Historically, the contimeout was also used to set the
2027 tarpit timeout in a listen section, which is not possible in a pure frontend.
2028
2029 This parameter is specific to backends, but can be specified once for all in
2030 "defaults" sections. This is in fact one of the easiest solutions not to
2031 forget about it. An unspecified timeout results in an infinite timeout, which
2032 is not recommended. Such a usage is accepted and works but reports a warning
2033 during startup because it may results in accumulation of failed sessions in
2034 the system if the system's timeouts are not configured either.
2035
2036 This parameter is provided for backwards compatibility but is currently
2037 deprecated. Please use "timeout connect", "timeout queue" or "timeout tarpit"
2038 instead.
2039
2040 See also : "timeout connect", "timeout queue", "timeout tarpit",
2041 "timeout server", "contimeout".
2042
2043
Willy Tarreau55165fe2009-05-10 12:02:55 +02002044cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
Willy Tarreau4992dd22012-05-31 21:02:17 +02002045 [ postonly ] [ preserve ] [ httponly ] [ secure ]
2046 [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002047 Enable cookie-based persistence in a backend.
2048 May be used in sections : defaults | frontend | listen | backend
2049 yes | no | yes | yes
2050 Arguments :
2051 <name> is the name of the cookie which will be monitored, modified or
2052 inserted in order to bring persistence. This cookie is sent to
2053 the client via a "Set-Cookie" header in the response, and is
2054 brought back by the client in a "Cookie" header in all requests.
2055 Special care should be taken to choose a name which does not
2056 conflict with any likely application cookie. Also, if the same
2057 backends are subject to be used by the same clients (eg:
2058 HTTP/HTTPS), care should be taken to use different cookie names
2059 between all backends if persistence between them is not desired.
2060
2061 rewrite This keyword indicates that the cookie will be provided by the
2062 server and that haproxy will have to modify its value to set the
2063 server's identifier in it. This mode is handy when the management
2064 of complex combinations of "Set-cookie" and "Cache-control"
2065 headers is left to the application. The application can then
2066 decide whether or not it is appropriate to emit a persistence
2067 cookie. Since all responses should be monitored, this mode only
2068 works in HTTP close mode. Unless the application behaviour is
2069 very complex and/or broken, it is advised not to start with this
2070 mode for new deployments. This keyword is incompatible with
2071 "insert" and "prefix".
2072
2073 insert This keyword indicates that the persistence cookie will have to
Willy Tarreaua79094d2010-08-31 22:54:15 +02002074 be inserted by haproxy in server responses if the client did not
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002075
Willy Tarreaua79094d2010-08-31 22:54:15 +02002076 already have a cookie that would have permitted it to access this
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002077 server. When used without the "preserve" option, if the server
2078 emits a cookie with the same name, it will be remove before
2079 processing. For this reason, this mode can be used to upgrade
2080 existing configurations running in the "rewrite" mode. The cookie
2081 will only be a session cookie and will not be stored on the
2082 client's disk. By default, unless the "indirect" option is added,
2083 the server will see the cookies emitted by the client. Due to
2084 caching effects, it is generally wise to add the "nocache" or
2085 "postonly" keywords (see below). The "insert" keyword is not
2086 compatible with "rewrite" and "prefix".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002087
2088 prefix This keyword indicates that instead of relying on a dedicated
2089 cookie for the persistence, an existing one will be completed.
2090 This may be needed in some specific environments where the client
2091 does not support more than one single cookie and the application
2092 already needs it. In this case, whenever the server sets a cookie
2093 named <name>, it will be prefixed with the server's identifier
2094 and a delimiter. The prefix will be removed from all client
2095 requests so that the server still finds the cookie it emitted.
2096 Since all requests and responses are subject to being modified,
2097 this mode requires the HTTP close mode. The "prefix" keyword is
Willy Tarreau37229df2011-10-17 12:24:55 +02002098 not compatible with "rewrite" and "insert". Note: it is highly
2099 recommended not to use "indirect" with "prefix", otherwise server
2100 cookie updates would not be sent to clients.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002101
Willy Tarreaua79094d2010-08-31 22:54:15 +02002102 indirect When this option is specified, no cookie will be emitted to a
2103 client which already has a valid one for the server which has
2104 processed the request. If the server sets such a cookie itself,
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002105 it will be removed, unless the "preserve" option is also set. In
2106 "insert" mode, this will additionally remove cookies from the
2107 requests transmitted to the server, making the persistence
2108 mechanism totally transparent from an application point of view.
Willy Tarreau37229df2011-10-17 12:24:55 +02002109 Note: it is highly recommended not to use "indirect" with
2110 "prefix", otherwise server cookie updates would not be sent to
2111 clients.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002112
2113 nocache This option is recommended in conjunction with the insert mode
2114 when there is a cache between the client and HAProxy, as it
2115 ensures that a cacheable response will be tagged non-cacheable if
2116 a cookie needs to be inserted. This is important because if all
2117 persistence cookies are added on a cacheable home page for
2118 instance, then all customers will then fetch the page from an
2119 outer cache and will all share the same persistence cookie,
2120 leading to one server receiving much more traffic than others.
2121 See also the "insert" and "postonly" options.
2122
2123 postonly This option ensures that cookie insertion will only be performed
2124 on responses to POST requests. It is an alternative to the
2125 "nocache" option, because POST responses are not cacheable, so
2126 this ensures that the persistence cookie will never get cached.
2127 Since most sites do not need any sort of persistence before the
2128 first POST which generally is a login request, this is a very
2129 efficient method to optimize caching without risking to find a
2130 persistence cookie in the cache.
2131 See also the "insert" and "nocache" options.
2132
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002133 preserve This option may only be used with "insert" and/or "indirect". It
2134 allows the server to emit the persistence cookie itself. In this
2135 case, if a cookie is found in the response, haproxy will leave it
2136 untouched. This is useful in order to end persistence after a
2137 logout request for instance. For this, the server just has to
2138 emit a cookie with an invalid value (eg: empty) or with a date in
2139 the past. By combining this mechanism with the "disable-on-404"
2140 check option, it is possible to perform a completely graceful
2141 shutdown because users will definitely leave the server after
2142 they logout.
2143
Willy Tarreau4992dd22012-05-31 21:02:17 +02002144 httponly This option tells haproxy to add an "HttpOnly" cookie attribute
2145 when a cookie is inserted. This attribute is used so that a
2146 user agent doesn't share the cookie with non-HTTP components.
2147 Please check RFC6265 for more information on this attribute.
2148
2149 secure This option tells haproxy to add a "Secure" cookie attribute when
2150 a cookie is inserted. This attribute is used so that a user agent
2151 never emits this cookie over non-secure channels, which means
2152 that a cookie learned with this flag will be presented only over
2153 SSL/TLS connections. Please check RFC6265 for more information on
2154 this attribute.
2155
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02002156 domain This option allows to specify the domain at which a cookie is
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002157 inserted. It requires exactly one parameter: a valid domain
Willy Tarreau68a897b2009-12-03 23:28:34 +01002158 name. If the domain begins with a dot, the browser is allowed to
2159 use it for any host ending with that name. It is also possible to
2160 specify several domain names by invoking this option multiple
2161 times. Some browsers might have small limits on the number of
2162 domains, so be careful when doing that. For the record, sending
2163 10 domains to MSIE 6 or Firefox 2 works as expected.
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02002164
Willy Tarreau996a92c2010-10-13 19:30:47 +02002165 maxidle This option allows inserted cookies to be ignored after some idle
2166 time. It only works with insert-mode cookies. When a cookie is
2167 sent to the client, the date this cookie was emitted is sent too.
2168 Upon further presentations of this cookie, if the date is older
2169 than the delay indicated by the parameter (in seconds), it will
2170 be ignored. Otherwise, it will be refreshed if needed when the
2171 response is sent to the client. This is particularly useful to
2172 prevent users who never close their browsers from remaining for
2173 too long on the same server (eg: after a farm size change). When
2174 this option is set and a cookie has no date, it is always
2175 accepted, but gets refreshed in the response. This maintains the
2176 ability for admins to access their sites. Cookies that have a
2177 date in the future further than 24 hours are ignored. Doing so
2178 lets admins fix timezone issues without risking kicking users off
2179 the site.
2180
2181 maxlife This option allows inserted cookies to be ignored after some life
2182 time, whether they're in use or not. It only works with insert
2183 mode cookies. When a cookie is first sent to the client, the date
2184 this cookie was emitted is sent too. Upon further presentations
2185 of this cookie, if the date is older than the delay indicated by
2186 the parameter (in seconds), it will be ignored. If the cookie in
2187 the request has no date, it is accepted and a date will be set.
2188 Cookies that have a date in the future further than 24 hours are
2189 ignored. Doing so lets admins fix timezone issues without risking
2190 kicking users off the site. Contrary to maxidle, this value is
2191 not refreshed, only the first visit date counts. Both maxidle and
2192 maxlife may be used at the time. This is particularly useful to
2193 prevent users who never close their browsers from remaining for
2194 too long on the same server (eg: after a farm size change). This
2195 is stronger than the maxidle method in that it forces a
2196 redispatch after some absolute delay.
2197
Willy Tarreau0ba27502007-12-24 16:55:16 +01002198 There can be only one persistence cookie per HTTP backend, and it can be
2199 declared in a defaults section. The value of the cookie will be the value
2200 indicated after the "cookie" keyword in a "server" statement. If no cookie
2201 is declared for a given server, the cookie is not set.
Willy Tarreau6a06a402007-07-15 20:15:28 +02002202
Willy Tarreau0ba27502007-12-24 16:55:16 +01002203 Examples :
2204 cookie JSESSIONID prefix
2205 cookie SRV insert indirect nocache
2206 cookie SRV insert postonly indirect
Willy Tarreau996a92c2010-10-13 19:30:47 +02002207 cookie SRV insert indirect nocache maxidle 30m maxlife 8h
Willy Tarreau0ba27502007-12-24 16:55:16 +01002208
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +02002209 See also : "appsession", "balance source", "capture cookie", "server"
Cyril Bonté0d4bf012010-04-25 23:21:46 +02002210 and "ignore-persist".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002211
Willy Tarreau983e01e2010-01-11 18:42:06 +01002212
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01002213default-server [param*]
2214 Change default options for a server in a backend
2215 May be used in sections : defaults | frontend | listen | backend
2216 yes | no | yes | yes
2217 Arguments:
Willy Tarreau983e01e2010-01-11 18:42:06 +01002218 <param*> is a list of parameters for this server. The "default-server"
2219 keyword accepts an important number of options and has a complete
2220 section dedicated to it. Please refer to section 5 for more
2221 details.
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01002222
Willy Tarreau983e01e2010-01-11 18:42:06 +01002223 Example :
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01002224 default-server inter 1000 weight 13
2225
2226 See also: "server" and section 5 about server options
Willy Tarreau0ba27502007-12-24 16:55:16 +01002227
Willy Tarreau983e01e2010-01-11 18:42:06 +01002228
Willy Tarreau0ba27502007-12-24 16:55:16 +01002229default_backend <backend>
2230 Specify the backend to use when no "use_backend" rule has been matched.
2231 May be used in sections : defaults | frontend | listen | backend
2232 yes | yes | yes | no
2233 Arguments :
2234 <backend> is the name of the backend to use.
2235
2236 When doing content-switching between frontend and backends using the
2237 "use_backend" keyword, it is often useful to indicate which backend will be
2238 used when no rule has matched. It generally is the dynamic backend which
2239 will catch all undetermined requests.
2240
Willy Tarreau0ba27502007-12-24 16:55:16 +01002241 Example :
2242
2243 use_backend dynamic if url_dyn
2244 use_backend static if url_css url_img extension_img
2245 default_backend dynamic
2246
Willy Tarreau2769aa02007-12-27 18:26:09 +01002247 See also : "use_backend", "reqsetbe", "reqisetbe"
2248
Willy Tarreau0ba27502007-12-24 16:55:16 +01002249
Baptiste Assmann27f51342013-10-09 06:51:49 +02002250description <string>
2251 Describe a listen, frontend or backend.
2252 May be used in sections : defaults | frontend | listen | backend
2253 no | yes | yes | yes
2254 Arguments : string
2255
2256 Allows to add a sentence to describe the related object in the HAProxy HTML
2257 stats page. The description will be printed on the right of the object name
2258 it describes.
2259 No need to backslash spaces in the <string> arguments.
2260
2261
Willy Tarreau0ba27502007-12-24 16:55:16 +01002262disabled
2263 Disable a proxy, frontend or backend.
2264 May be used in sections : defaults | frontend | listen | backend
2265 yes | yes | yes | yes
2266 Arguments : none
2267
2268 The "disabled" keyword is used to disable an instance, mainly in order to
2269 liberate a listening port or to temporarily disable a service. The instance
2270 will still be created and its configuration will be checked, but it will be
2271 created in the "stopped" state and will appear as such in the statistics. It
2272 will not receive any traffic nor will it send any health-checks or logs. It
2273 is possible to disable many instances at once by adding the "disabled"
2274 keyword in a "defaults" section.
2275
2276 See also : "enabled"
2277
2278
Willy Tarreau5ce94572010-06-07 14:35:41 +02002279dispatch <address>:<port>
2280 Set a default server address
2281 May be used in sections : defaults | frontend | listen | backend
2282 no | no | yes | yes
Cyril Bonté108cf6e2012-04-21 23:30:29 +02002283 Arguments :
Willy Tarreau5ce94572010-06-07 14:35:41 +02002284
2285 <address> is the IPv4 address of the default server. Alternatively, a
2286 resolvable hostname is supported, but this name will be resolved
2287 during start-up.
2288
2289 <ports> is a mandatory port specification. All connections will be sent
2290 to this port, and it is not permitted to use port offsets as is
2291 possible with normal servers.
2292
Willy Tarreau787aed52011-04-15 06:45:37 +02002293 The "dispatch" keyword designates a default server for use when no other
Willy Tarreau5ce94572010-06-07 14:35:41 +02002294 server can take the connection. In the past it was used to forward non
2295 persistent connections to an auxiliary load balancer. Due to its simple
2296 syntax, it has also been used for simple TCP relays. It is recommended not to
2297 use it for more clarity, and to use the "server" directive instead.
2298
2299 See also : "server"
2300
2301
Willy Tarreau0ba27502007-12-24 16:55:16 +01002302enabled
2303 Enable a proxy, frontend or backend.
2304 May be used in sections : defaults | frontend | listen | backend
2305 yes | yes | yes | yes
2306 Arguments : none
2307
2308 The "enabled" keyword is used to explicitly enable an instance, when the
2309 defaults has been set to "disabled". This is very rarely used.
2310
2311 See also : "disabled"
2312
2313
2314errorfile <code> <file>
2315 Return a file contents instead of errors generated by HAProxy
2316 May be used in sections : defaults | frontend | listen | backend
2317 yes | yes | yes | yes
2318 Arguments :
2319 <code> is the HTTP status code. Currently, HAProxy is capable of
Willy Tarreauae94d4d2011-05-11 16:28:49 +02002320 generating codes 200, 400, 403, 408, 500, 502, 503, and 504.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002321
2322 <file> designates a file containing the full HTTP response. It is
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002323 recommended to follow the common practice of appending ".http" to
Willy Tarreau0ba27502007-12-24 16:55:16 +01002324 the filename so that people do not confuse the response with HTML
Willy Tarreau59140a22009-02-22 12:02:30 +01002325 error pages, and to use absolute paths, since files are read
2326 before any chroot is performed.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002327
2328 It is important to understand that this keyword is not meant to rewrite
2329 errors returned by the server, but errors detected and returned by HAProxy.
2330 This is why the list of supported errors is limited to a small set.
2331
Willy Tarreauae94d4d2011-05-11 16:28:49 +02002332 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
2333
Willy Tarreau0ba27502007-12-24 16:55:16 +01002334 The files are returned verbatim on the TCP socket. This allows any trick such
2335 as redirections to another URL or site, as well as tricks to clean cookies,
2336 force enable or disable caching, etc... The package provides default error
2337 files returning the same contents as default errors.
2338
Willy Tarreau59140a22009-02-22 12:02:30 +01002339 The files should not exceed the configured buffer size (BUFSIZE), which
2340 generally is 8 or 16 kB, otherwise they will be truncated. It is also wise
2341 not to put any reference to local contents (eg: images) in order to avoid
2342 loops between the client and HAProxy when all servers are down, causing an
2343 error to be returned instead of an image. For better HTTP compliance, it is
2344 recommended that all header lines end with CR-LF and not LF alone.
2345
Willy Tarreau0ba27502007-12-24 16:55:16 +01002346 The files are read at the same time as the configuration and kept in memory.
2347 For this reason, the errors continue to be returned even when the process is
2348 chrooted, and no file change is considered while the process is running. A
Willy Tarreauc27debf2008-01-06 08:57:02 +01002349 simple method for developing those files consists in associating them to the
Willy Tarreau0ba27502007-12-24 16:55:16 +01002350 403 status code and interrogating a blocked URL.
2351
2352 See also : "errorloc", "errorloc302", "errorloc303"
2353
Willy Tarreau59140a22009-02-22 12:02:30 +01002354 Example :
2355 errorfile 400 /etc/haproxy/errorfiles/400badreq.http
2356 errorfile 403 /etc/haproxy/errorfiles/403forbid.http
2357 errorfile 503 /etc/haproxy/errorfiles/503sorry.http
2358
Willy Tarreau2769aa02007-12-27 18:26:09 +01002359
2360errorloc <code> <url>
2361errorloc302 <code> <url>
2362 Return an HTTP redirection to a URL instead of errors generated by HAProxy
2363 May be used in sections : defaults | frontend | listen | backend
2364 yes | yes | yes | yes
2365 Arguments :
2366 <code> is the HTTP status code. Currently, HAProxy is capable of
Willy Tarreauae94d4d2011-05-11 16:28:49 +02002367 generating codes 200, 400, 403, 408, 500, 502, 503, and 504.
Willy Tarreau2769aa02007-12-27 18:26:09 +01002368
2369 <url> it is the exact contents of the "Location" header. It may contain
2370 either a relative URI to an error page hosted on the same site,
2371 or an absolute URI designating an error page on another site.
2372 Special care should be given to relative URIs to avoid redirect
2373 loops if the URI itself may generate the same error (eg: 500).
2374
2375 It is important to understand that this keyword is not meant to rewrite
2376 errors returned by the server, but errors detected and returned by HAProxy.
2377 This is why the list of supported errors is limited to a small set.
2378
Willy Tarreauae94d4d2011-05-11 16:28:49 +02002379 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
2380
Willy Tarreau2769aa02007-12-27 18:26:09 +01002381 Note that both keyword return the HTTP 302 status code, which tells the
2382 client to fetch the designated URL using the same HTTP method. This can be
2383 quite problematic in case of non-GET methods such as POST, because the URL
2384 sent to the client might not be allowed for something other than GET. To
2385 workaround this problem, please use "errorloc303" which send the HTTP 303
2386 status code, indicating to the client that the URL must be fetched with a GET
2387 request.
2388
2389 See also : "errorfile", "errorloc303"
2390
2391
2392errorloc303 <code> <url>
2393 Return an HTTP redirection to a URL instead of errors generated by HAProxy
2394 May be used in sections : defaults | frontend | listen | backend
2395 yes | yes | yes | yes
2396 Arguments :
2397 <code> is the HTTP status code. Currently, HAProxy is capable of
2398 generating codes 400, 403, 408, 500, 502, 503, and 504.
2399
2400 <url> it is the exact contents of the "Location" header. It may contain
2401 either a relative URI to an error page hosted on the same site,
2402 or an absolute URI designating an error page on another site.
2403 Special care should be given to relative URIs to avoid redirect
2404 loops if the URI itself may generate the same error (eg: 500).
2405
2406 It is important to understand that this keyword is not meant to rewrite
2407 errors returned by the server, but errors detected and returned by HAProxy.
2408 This is why the list of supported errors is limited to a small set.
2409
Willy Tarreauae94d4d2011-05-11 16:28:49 +02002410 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
2411
Willy Tarreau2769aa02007-12-27 18:26:09 +01002412 Note that both keyword return the HTTP 303 status code, which tells the
2413 client to fetch the designated URL using the same HTTP GET method. This
2414 solves the usual problems associated with "errorloc" and the 302 code. It is
2415 possible that some very old browsers designed before HTTP/1.1 do not support
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002416 it, but no such problem has been reported till now.
Willy Tarreau2769aa02007-12-27 18:26:09 +01002417
2418 See also : "errorfile", "errorloc", "errorloc302"
2419
2420
Willy Tarreau4de91492010-01-22 19:10:05 +01002421force-persist { if | unless } <condition>
2422 Declare a condition to force persistence on down servers
2423 May be used in sections: defaults | frontend | listen | backend
2424 no | yes | yes | yes
2425
2426 By default, requests are not dispatched to down servers. It is possible to
2427 force this using "option persist", but it is unconditional and redispatches
2428 to a valid server if "option redispatch" is set. That leaves with very little
2429 possibilities to force some requests to reach a server which is artificially
2430 marked down for maintenance operations.
2431
2432 The "force-persist" statement allows one to declare various ACL-based
2433 conditions which, when met, will cause a request to ignore the down status of
2434 a server and still try to connect to it. That makes it possible to start a
2435 server, still replying an error to the health checks, and run a specially
2436 configured browser to test the service. Among the handy methods, one could
2437 use a specific source IP address, or a specific cookie. The cookie also has
2438 the advantage that it can easily be added/removed on the browser from a test
2439 page. Once the service is validated, it is then possible to open the service
2440 to the world by returning a valid response to health checks.
2441
2442 The forced persistence is enabled when an "if" condition is met, or unless an
2443 "unless" condition is met. The final redispatch is always disabled when this
2444 is used.
2445
Cyril Bonté0d4bf012010-04-25 23:21:46 +02002446 See also : "option redispatch", "ignore-persist", "persist",
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +02002447 and section 7 about ACL usage.
Willy Tarreau4de91492010-01-22 19:10:05 +01002448
2449
Willy Tarreau2769aa02007-12-27 18:26:09 +01002450fullconn <conns>
2451 Specify at what backend load the servers will reach their maxconn
2452 May be used in sections : defaults | frontend | listen | backend
2453 yes | no | yes | yes
2454 Arguments :
2455 <conns> is the number of connections on the backend which will make the
2456 servers use the maximal number of connections.
2457
Willy Tarreau198a7442008-01-17 12:05:32 +01002458 When a server has a "maxconn" parameter specified, it means that its number
Willy Tarreau2769aa02007-12-27 18:26:09 +01002459 of concurrent connections will never go higher. Additionally, if it has a
Willy Tarreau198a7442008-01-17 12:05:32 +01002460 "minconn" parameter, it indicates a dynamic limit following the backend's
Willy Tarreau2769aa02007-12-27 18:26:09 +01002461 load. The server will then always accept at least <minconn> connections,
2462 never more than <maxconn>, and the limit will be on the ramp between both
2463 values when the backend has less than <conns> concurrent connections. This
2464 makes it possible to limit the load on the servers during normal loads, but
2465 push it further for important loads without overloading the servers during
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002466 exceptional loads.
Willy Tarreau2769aa02007-12-27 18:26:09 +01002467
Willy Tarreaufbb78422011-06-05 15:38:35 +02002468 Since it's hard to get this value right, haproxy automatically sets it to
2469 10% of the sum of the maxconns of all frontends that may branch to this
2470 backend. That way it's safe to leave it unset.
2471
Willy Tarreau2769aa02007-12-27 18:26:09 +01002472 Example :
2473 # The servers will accept between 100 and 1000 concurrent connections each
2474 # and the maximum of 1000 will be reached when the backend reaches 10000
2475 # connections.
2476 backend dynamic
2477 fullconn 10000
2478 server srv1 dyn1:80 minconn 100 maxconn 1000
2479 server srv2 dyn2:80 minconn 100 maxconn 1000
2480
2481 See also : "maxconn", "server"
2482
2483
2484grace <time>
2485 Maintain a proxy operational for some time after a soft stop
2486 May be used in sections : defaults | frontend | listen | backend
Cyril Bonté99ed3272010-01-24 23:29:44 +01002487 yes | yes | yes | yes
Willy Tarreau2769aa02007-12-27 18:26:09 +01002488 Arguments :
2489 <time> is the time (by default in milliseconds) for which the instance
2490 will remain operational with the frontend sockets still listening
2491 when a soft-stop is received via the SIGUSR1 signal.
2492
2493 This may be used to ensure that the services disappear in a certain order.
2494 This was designed so that frontends which are dedicated to monitoring by an
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002495 external equipment fail immediately while other ones remain up for the time
Willy Tarreau2769aa02007-12-27 18:26:09 +01002496 needed by the equipment to detect the failure.
2497
2498 Note that currently, there is very little benefit in using this parameter,
2499 and it may in fact complicate the soft-reconfiguration process more than
2500 simplify it.
2501
Willy Tarreau0ba27502007-12-24 16:55:16 +01002502
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05002503hash-type <method> <function> <modifier>
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002504 Specify a method to use for mapping hashes to servers
2505 May be used in sections : defaults | frontend | listen | backend
2506 yes | no | yes | yes
2507 Arguments :
Bhaskar98634f02013-10-29 23:30:51 -04002508 <method> is the method used to select a server from the hash computed by
2509 the <function> :
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002510
Bhaskar98634f02013-10-29 23:30:51 -04002511 map-based the hash table is a static array containing all alive servers.
2512 The hashes will be very smooth, will consider weights, but
2513 will be static in that weight changes while a server is up
2514 will be ignored. This means that there will be no slow start.
2515 Also, since a server is selected by its position in the array,
2516 most mappings are changed when the server count changes. This
2517 means that when a server goes up or down, or when a server is
2518 added to a farm, most connections will be redistributed to
2519 different servers. This can be inconvenient with caches for
2520 instance.
Willy Tarreau798a39c2010-11-24 15:04:29 +01002521
Bhaskar98634f02013-10-29 23:30:51 -04002522 consistent the hash table is a tree filled with many occurrences of each
2523 server. The hash key is looked up in the tree and the closest
2524 server is chosen. This hash is dynamic, it supports changing
2525 weights while the servers are up, so it is compatible with the
2526 slow start feature. It has the advantage that when a server
2527 goes up or down, only its associations are moved. When a
2528 server is added to the farm, only a few part of the mappings
2529 are redistributed, making it an ideal method for caches.
2530 However, due to its principle, the distribution will never be
2531 very smooth and it may sometimes be necessary to adjust a
2532 server's weight or its ID to get a more balanced distribution.
2533 In order to get the same distribution on multiple load
2534 balancers, it is important that all servers have the exact
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05002535 same IDs. Note: consistent hash uses sdbm and avalanche if no
2536 hash function is specified.
Bhaskar98634f02013-10-29 23:30:51 -04002537
2538 <function> is the hash function to be used :
2539
2540 sdbm this function was created intially for sdbm (a public-domain
2541 reimplementation of ndbm) database library. It was found to do
2542 well in scrambling bits, causing better distribution of the keys
2543 and fewer splits. It also happens to be a good general hashing
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05002544 function with good distribution, unless the total server weight
2545 is a multiple of 64, in which case applying the avalanche
2546 modifier may help.
Bhaskar98634f02013-10-29 23:30:51 -04002547
2548 djb2 this function was first proposed by Dan Bernstein many years ago
2549 on comp.lang.c. Studies have shown that for certain workload this
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05002550 function provides a better distribution than sdbm. It generally
2551 works well with text-based inputs though it can perform extremely
2552 poorly with numeric-only input or when the total server weight is
2553 a multiple of 33, unless the avalanche modifier is also used.
2554
Willy Tarreaua0f42712013-11-14 14:30:35 +01002555 wt6 this function was designed for haproxy while testing other
2556 functions in the past. It is not as smooth as the other ones, but
2557 is much less sensible to the input data set or to the number of
2558 servers. It can make sense as an alternative to sdbm+avalanche or
2559 djb2+avalanche for consistent hashing or when hashing on numeric
2560 data such as a source IP address or a visitor identifier in a URL
2561 parameter.
2562
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05002563 <modifier> indicates an optional method applied after hashing the key :
2564
2565 avalanche This directive indicates that the result from the hash
2566 function above should not be used in its raw form but that
2567 a 4-byte full avalanche hash must be applied first. The
2568 purpose of this step is to mix the resulting bits from the
2569 previous hash in order to avoid any undesired effect when
2570 the input contains some limited values or when the number of
2571 servers is a multiple of one of the hash's components (64
2572 for SDBM, 33 for DJB2). Enabling avalanche tends to make the
2573 result less predictable, but it's also not as smooth as when
2574 using the original function. Some testing might be needed
2575 with some workloads. This hash is one of the many proposed
2576 by Bob Jenkins.
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002577
Bhaskar98634f02013-10-29 23:30:51 -04002578 The default hash type is "map-based" and is recommended for most usages. The
2579 default function is "sdbm", the selection of a function should be based on
2580 the range of the values being hashed.
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002581
2582 See also : "balance", "server"
2583
2584
Willy Tarreau0ba27502007-12-24 16:55:16 +01002585http-check disable-on-404
2586 Enable a maintenance mode upon HTTP/404 response to health-checks
2587 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau2769aa02007-12-27 18:26:09 +01002588 yes | no | yes | yes
Willy Tarreau0ba27502007-12-24 16:55:16 +01002589 Arguments : none
2590
2591 When this option is set, a server which returns an HTTP code 404 will be
2592 excluded from further load-balancing, but will still receive persistent
2593 connections. This provides a very convenient method for Web administrators
2594 to perform a graceful shutdown of their servers. It is also important to note
2595 that a server which is detected as failed while it was in this mode will not
2596 generate an alert, just a notice. If the server responds 2xx or 3xx again, it
2597 will immediately be reinserted into the farm. The status on the stats page
2598 reports "NOLB" for a server in this mode. It is important to note that this
Willy Tarreaubd741542010-03-16 18:46:54 +01002599 option only works in conjunction with the "httpchk" option. If this option
2600 is used with "http-check expect", then it has precedence over it so that 404
2601 responses will still be considered as soft-stop.
2602
2603 See also : "option httpchk", "http-check expect"
2604
2605
2606http-check expect [!] <match> <pattern>
Jamie Gloudonaaa21002012-08-25 00:18:33 -04002607 Make HTTP health checks consider response contents or specific status codes
Willy Tarreaubd741542010-03-16 18:46:54 +01002608 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau1ee51a62011-08-19 20:04:17 +02002609 yes | no | yes | yes
Willy Tarreaubd741542010-03-16 18:46:54 +01002610 Arguments :
2611 <match> is a keyword indicating how to look for a specific pattern in the
2612 response. The keyword may be one of "status", "rstatus",
Jamie Gloudonaaa21002012-08-25 00:18:33 -04002613 "string", or "rstring". The keyword may be preceded by an
Willy Tarreaubd741542010-03-16 18:46:54 +01002614 exclamation mark ("!") to negate the match. Spaces are allowed
2615 between the exclamation mark and the keyword. See below for more
2616 details on the supported keywords.
2617
2618 <pattern> is the pattern to look for. It may be a string or a regular
2619 expression. If the pattern contains spaces, they must be escaped
2620 with the usual backslash ('\').
2621
2622 By default, "option httpchk" considers that response statuses 2xx and 3xx
2623 are valid, and that others are invalid. When "http-check expect" is used,
2624 it defines what is considered valid or invalid. Only one "http-check"
2625 statement is supported in a backend. If a server fails to respond or times
2626 out, the check obviously fails. The available matches are :
2627
2628 status <string> : test the exact string match for the HTTP status code.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04002629 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01002630 response's status code is exactly this string. If the
2631 "status" keyword is prefixed with "!", then the response
2632 will be considered invalid if the status code matches.
2633
2634 rstatus <regex> : test a regular expression for the HTTP status code.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04002635 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01002636 response's status code matches the expression. If the
2637 "rstatus" keyword is prefixed with "!", then the response
2638 will be considered invalid if the status code matches.
2639 This is mostly used to check for multiple codes.
2640
2641 string <string> : test the exact string match in the HTTP response body.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04002642 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01002643 response's body contains this exact string. If the
2644 "string" keyword is prefixed with "!", then the response
2645 will be considered invalid if the body contains this
2646 string. This can be used to look for a mandatory word at
2647 the end of a dynamic page, or to detect a failure when a
2648 specific error appears on the check page (eg: a stack
2649 trace).
2650
2651 rstring <regex> : test a regular expression on the HTTP response body.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04002652 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01002653 response's body matches this expression. If the "rstring"
2654 keyword is prefixed with "!", then the response will be
2655 considered invalid if the body matches the expression.
2656 This can be used to look for a mandatory word at the end
2657 of a dynamic page, or to detect a failure when a specific
2658 error appears on the check page (eg: a stack trace).
2659
2660 It is important to note that the responses will be limited to a certain size
2661 defined by the global "tune.chksize" option, which defaults to 16384 bytes.
2662 Thus, too large responses may not contain the mandatory pattern when using
2663 "string" or "rstring". If a large response is absolutely required, it is
2664 possible to change the default max size by setting the global variable.
2665 However, it is worth keeping in mind that parsing very large responses can
2666 waste some CPU cycles, especially when regular expressions are used, and that
2667 it is always better to focus the checks on smaller resources.
2668
2669 Last, if "http-check expect" is combined with "http-check disable-on-404",
2670 then this last one has precedence when the server responds with 404.
2671
2672 Examples :
2673 # only accept status 200 as valid
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01002674 http-check expect status 200
Willy Tarreaubd741542010-03-16 18:46:54 +01002675
2676 # consider SQL errors as errors
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01002677 http-check expect ! string SQL\ Error
Willy Tarreaubd741542010-03-16 18:46:54 +01002678
2679 # consider status 5xx only as errors
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01002680 http-check expect ! rstatus ^5
Willy Tarreaubd741542010-03-16 18:46:54 +01002681
2682 # check that we have a correct hexadecimal tag before /html
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01002683 http-check expect rstring <!--tag:[0-9a-f]*</html>
Willy Tarreau0ba27502007-12-24 16:55:16 +01002684
Willy Tarreaubd741542010-03-16 18:46:54 +01002685 See also : "option httpchk", "http-check disable-on-404"
Willy Tarreau2769aa02007-12-27 18:26:09 +01002686
2687
Willy Tarreauef781042010-01-27 11:53:01 +01002688http-check send-state
2689 Enable emission of a state header with HTTP health checks
2690 May be used in sections : defaults | frontend | listen | backend
2691 yes | no | yes | yes
2692 Arguments : none
2693
2694 When this option is set, haproxy will systematically send a special header
2695 "X-Haproxy-Server-State" with a list of parameters indicating to each server
2696 how they are seen by haproxy. This can be used for instance when a server is
2697 manipulated without access to haproxy and the operator needs to know whether
2698 haproxy still sees it up or not, or if the server is the last one in a farm.
2699
2700 The header is composed of fields delimited by semi-colons, the first of which
2701 is a word ("UP", "DOWN", "NOLB"), possibly followed by a number of valid
2702 checks on the total number before transition, just as appears in the stats
2703 interface. Next headers are in the form "<variable>=<value>", indicating in
2704 no specific order some values available in the stats interface :
2705 - a variable "name", containing the name of the backend followed by a slash
2706 ("/") then the name of the server. This can be used when a server is
2707 checked in multiple backends.
2708
2709 - a variable "node" containing the name of the haproxy node, as set in the
2710 global "node" variable, otherwise the system's hostname if unspecified.
2711
2712 - a variable "weight" indicating the weight of the server, a slash ("/")
2713 and the total weight of the farm (just counting usable servers). This
2714 helps to know if other servers are available to handle the load when this
2715 one fails.
2716
2717 - a variable "scur" indicating the current number of concurrent connections
2718 on the server, followed by a slash ("/") then the total number of
2719 connections on all servers of the same backend.
2720
2721 - a variable "qcur" indicating the current number of requests in the
2722 server's queue.
2723
2724 Example of a header received by the application server :
2725 >>> X-Haproxy-Server-State: UP 2/3; name=bck/srv2; node=lb1; weight=1/2; \
2726 scur=13/22; qcur=0
2727
2728 See also : "option httpchk", "http-check disable-on-404"
2729
Willy Tarreauccbcc372012-12-27 12:37:57 +01002730http-request { allow | deny | tarpit | auth [realm <realm>] | redirect <rule> |
Willy Tarreauf4c43c12013-06-11 17:01:13 +02002731 add-header <name> <fmt> | set-header <name> <fmt> |
Willy Tarreau51347ed2013-06-11 19:34:13 +02002732 set-nice <nice> | set-log-level <level> | set-tos <tos> |
2733 set-mark <mark> }
Cyril Bontéf0c60612010-02-06 14:44:47 +01002734 [ { if | unless } <condition> ]
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01002735 Access control for Layer 7 requests
2736
2737 May be used in sections: defaults | frontend | listen | backend
2738 no | yes | yes | yes
2739
Willy Tarreau20b0de52012-12-24 15:45:22 +01002740 The http-request statement defines a set of rules which apply to layer 7
2741 processing. The rules are evaluated in their declaration order when they are
2742 met in a frontend, listen or backend section. Any rule may optionally be
2743 followed by an ACL-based condition, in which case it will only be evaluated
2744 if the condition is true.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01002745
Willy Tarreau20b0de52012-12-24 15:45:22 +01002746 The first keyword is the rule's action. Currently supported actions include :
2747 - "allow" : this stops the evaluation of the rules and lets the request
2748 pass the check. No further "http-request" rules are evaluated.
2749
2750 - "deny" : this stops the evaluation of the rules and immediately rejects
2751 the request and emits an HTTP 403 error. No further "http-request" rules
2752 are evaluated.
2753
Willy Tarreauccbcc372012-12-27 12:37:57 +01002754 - "tarpit" : this stops the evaluation of the rules and immediately blocks
2755 the request without responding for a delay specified by "timeout tarpit"
2756 or "timeout connect" if the former is not set. After that delay, if the
2757 client is still connected, an HTTP error 500 is returned so that the
2758 client does not suspect it has been tarpitted. Logs will report the flags
2759 "PT". The goal of the tarpit rule is to slow down robots during an attack
2760 when they're limited on the number of concurrent requests. It can be very
2761 efficient against very dumb robots, and will significantly reduce the
2762 load on firewalls compared to a "deny" rule. But when facing "correctly"
2763 developped robots, it can make things worse by forcing haproxy and the
2764 front firewall to support insane number of concurrent connections.
2765
Willy Tarreau20b0de52012-12-24 15:45:22 +01002766 - "auth" : this stops the evaluation of the rules and immediately responds
2767 with an HTTP 401 or 407 error code to invite the user to present a valid
2768 user name and password. No further "http-request" rules are evaluated. An
2769 optional "realm" parameter is supported, it sets the authentication realm
2770 that is returned with the response (typically the application's name).
2771
Willy Tarreau81499eb2012-12-27 12:19:02 +01002772 - "redirect" : this performs an HTTP redirection based on a redirect rule.
2773 This is exactly the same as the "redirect" statement except that it
2774 inserts a redirect rule which can be processed in the middle of other
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01002775 "http-request" rules and that these rules use the "log-format" strings.
2776 See the "redirect" keyword for the rule's syntax.
Willy Tarreau81499eb2012-12-27 12:19:02 +01002777
Willy Tarreau20b0de52012-12-24 15:45:22 +01002778 - "add-header" appends an HTTP header field whose name is specified in
2779 <name> and whose value is defined by <fmt> which follows the log-format
2780 rules (see Custom Log Format in section 8.2.4). This is particularly
2781 useful to pass connection-specific information to the server (eg: the
2782 client's SSL certificate), or to combine several headers into one. This
2783 rule is not final, so it is possible to add other similar rules. Note
2784 that header addition is performed immediately, so one rule might reuse
2785 the resulting header from a previous rule.
2786
2787 - "set-header" does the same as "add-header" except that the header name
2788 is first removed if it existed. This is useful when passing security
2789 information to the server, where the header must not be manipulated by
2790 external users.
2791
Willy Tarreauf4c43c12013-06-11 17:01:13 +02002792 - "set-nice" sets the "nice" factor of the current request being processed.
2793 It only has effect against the other requests being processed at the same
2794 time. The default value is 0, unless altered by the "nice" setting on the
2795 "bind" line. The accepted range is -1024..1024. The higher the value, the
2796 nicest the request will be. Lower values will make the request more
2797 important than other ones. This can be useful to improve the speed of
2798 some requests, or lower the priority of non-important requests. Using
2799 this setting without prior experimentation can cause some major slowdown.
2800
Willy Tarreau9a355ec2013-06-11 17:45:46 +02002801 - "set-log-level" is used to change the log level of the current request
2802 when a certain condition is met. Valid levels are the 8 syslog levels
2803 (see the "log" keyword) plus the special level "silent" which disables
2804 logging for this request. This rule is not final so the last matching
2805 rule wins. This rule can be useful to disable health checks coming from
2806 another equipment.
2807
Willy Tarreau42cf39e2013-06-11 18:51:32 +02002808 - "set-tos" is used to set the TOS or DSCP field value of packets sent to
2809 the client to the value passed in <tos> on platforms which support this.
2810 This value represents the whole 8 bits of the IP TOS field, and can be
2811 expressed both in decimal or hexadecimal format (prefixed by "0x"). Note
2812 that only the 6 higher bits are used in DSCP or TOS, and the two lower
2813 bits are always 0. This can be used to adjust some routing behaviour on
2814 border routers based on some information from the request. See RFC 2474,
2815 2597, 3260 and 4594 for more information.
2816
Willy Tarreau51347ed2013-06-11 19:34:13 +02002817 - "set-mark" is used to set the Netfilter MARK on all packets sent to the
2818 client to the value passed in <mark> on platforms which support it. This
2819 value is an unsigned 32 bit value which can be matched by netfilter and
2820 by the routing table. It can be expressed both in decimal or hexadecimal
2821 format (prefixed by "0x"). This can be useful to force certain packets to
2822 take a different route (for example a cheaper network path for bulk
2823 downloads). This works on Linux kernels 2.6.32 and above and requires
2824 admin privileges.
2825
Willy Tarreau20b0de52012-12-24 15:45:22 +01002826 There is no limit to the number of http-request statements per instance.
2827
2828 It is important to know that http-request rules are processed very early in
2829 the HTTP processing, just after "block" rules and before "reqdel" or "reqrep"
2830 rules. That way, headers added by "add-header"/"set-header" are visible by
2831 almost all further ACL rules.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01002832
2833 Example:
Cyril Bonté78caf842010-03-10 22:41:43 +01002834 acl nagios src 192.168.129.3
2835 acl local_net src 192.168.0.0/16
2836 acl auth_ok http_auth(L1)
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01002837
Cyril Bonté78caf842010-03-10 22:41:43 +01002838 http-request allow if nagios
2839 http-request allow if local_net auth_ok
2840 http-request auth realm Gimme if local_net auth_ok
2841 http-request deny
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01002842
Cyril Bonté78caf842010-03-10 22:41:43 +01002843 Example:
2844 acl auth_ok http_auth_group(L1) G1
Cyril Bonté78caf842010-03-10 22:41:43 +01002845 http-request auth unless auth_ok
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01002846
Willy Tarreau20b0de52012-12-24 15:45:22 +01002847 Example:
2848 http-request set-header X-Haproxy-Current-Date %T
2849 http-request set-header X-SSL %[ssl_fc]
2850 http-request set-header X-SSL-Session_ID %[ssl_fc_session_id]
2851 http-request set-header X-SSL-Client-Verify %[ssl_c_verify]
2852 http-request set-header X-SSL-Client-DN %{+Q}[ssl_c_s_dn]
2853 http-request set-header X-SSL-Client-CN %{+Q}[ssl_c_s_dn(cn)]
2854 http-request set-header X-SSL-Issuer %{+Q}[ssl_c_i_dn]
2855 http-request set-header X-SSL-Client-NotBefore %{+Q}[ssl_c_notbefore]
2856 http-request set-header X-SSL-Client-NotAfter %{+Q}[ssl_c_notafter]
2857
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02002858 See also : "stats http-request", section 3.4 about userlists and section 7
2859 about ACL usage.
Willy Tarreauef781042010-01-27 11:53:01 +01002860
Willy Tarreauf4c43c12013-06-11 17:01:13 +02002861http-response { allow | deny | add-header <name> <fmt> | set-nice <nice> |
Willy Tarreau51347ed2013-06-11 19:34:13 +02002862 set-header <name> <fmt> | set-log-level <level> |
Lukas Tribus2dd1d1a2013-06-19 23:34:41 +02002863 set-mark <mark> | set-tos <tos> }
2864 [ { if | unless } <condition> ]
Willy Tarreaue365c0b2013-06-11 16:06:12 +02002865 Access control for Layer 7 responses
2866
2867 May be used in sections: defaults | frontend | listen | backend
2868 no | yes | yes | yes
2869
2870 The http-response statement defines a set of rules which apply to layer 7
2871 processing. The rules are evaluated in their declaration order when they are
2872 met in a frontend, listen or backend section. Any rule may optionally be
2873 followed by an ACL-based condition, in which case it will only be evaluated
2874 if the condition is true. Since these rules apply on responses, the backend
2875 rules are applied first, followed by the frontend's rules.
2876
2877 The first keyword is the rule's action. Currently supported actions include :
2878 - "allow" : this stops the evaluation of the rules and lets the response
2879 pass the check. No further "http-response" rules are evaluated for the
2880 current section.
2881
2882 - "deny" : this stops the evaluation of the rules and immediately rejects
2883 the response and emits an HTTP 502 error. No further "http-response"
2884 rules are evaluated.
2885
2886 - "add-header" appends an HTTP header field whose name is specified in
2887 <name> and whose value is defined by <fmt> which follows the log-format
2888 rules (see Custom Log Format in section 8.2.4). This may be used to send
2889 a cookie to a client for example, or to pass some internal information.
2890 This rule is not final, so it is possible to add other similar rules.
2891 Note that header addition is performed immediately, so one rule might
2892 reuse the resulting header from a previous rule.
2893
2894 - "set-header" does the same as "add-header" except that the header name
2895 is first removed if it existed. This is useful when passing security
2896 information to the server, where the header must not be manipulated by
2897 external users.
2898
Willy Tarreauf4c43c12013-06-11 17:01:13 +02002899 - "set-nice" sets the "nice" factor of the current request being processed.
2900 It only has effect against the other requests being processed at the same
2901 time. The default value is 0, unless altered by the "nice" setting on the
2902 "bind" line. The accepted range is -1024..1024. The higher the value, the
2903 nicest the request will be. Lower values will make the request more
2904 important than other ones. This can be useful to improve the speed of
2905 some requests, or lower the priority of non-important requests. Using
2906 this setting without prior experimentation can cause some major slowdown.
2907
Willy Tarreau9a355ec2013-06-11 17:45:46 +02002908 - "set-log-level" is used to change the log level of the current request
2909 when a certain condition is met. Valid levels are the 8 syslog levels
2910 (see the "log" keyword) plus the special level "silent" which disables
2911 logging for this request. This rule is not final so the last matching
2912 rule wins. This rule can be useful to disable health checks coming from
2913 another equipment.
2914
Willy Tarreau42cf39e2013-06-11 18:51:32 +02002915 - "set-tos" is used to set the TOS or DSCP field value of packets sent to
2916 the client to the value passed in <tos> on platforms which support this.
2917 This value represents the whole 8 bits of the IP TOS field, and can be
2918 expressed both in decimal or hexadecimal format (prefixed by "0x"). Note
2919 that only the 6 higher bits are used in DSCP or TOS, and the two lower
2920 bits are always 0. This can be used to adjust some routing behaviour on
2921 border routers based on some information from the request. See RFC 2474,
2922 2597, 3260 and 4594 for more information.
2923
Willy Tarreau51347ed2013-06-11 19:34:13 +02002924 - "set-mark" is used to set the Netfilter MARK on all packets sent to the
2925 client to the value passed in <mark> on platforms which support it. This
2926 value is an unsigned 32 bit value which can be matched by netfilter and
2927 by the routing table. It can be expressed both in decimal or hexadecimal
2928 format (prefixed by "0x"). This can be useful to force certain packets to
2929 take a different route (for example a cheaper network path for bulk
2930 downloads). This works on Linux kernels 2.6.32 and above and requires
2931 admin privileges.
2932
Willy Tarreaue365c0b2013-06-11 16:06:12 +02002933 There is no limit to the number of http-response statements per instance.
2934
Godbach09250262013-07-02 01:19:15 +08002935 It is important to know that http-response rules are processed very early in
Willy Tarreaue365c0b2013-06-11 16:06:12 +02002936 the HTTP processing, before "reqdel" or "reqrep" rules. That way, headers
2937 added by "add-header"/"set-header" are visible by almost all further ACL
2938 rules.
2939
2940 See also : "http-request", section 3.4 about userlists and section 7 about
2941 ACL usage.
2942
Baptiste Assmann5ecb77f2013-10-06 23:24:13 +02002943
2944tcp-check expect [!] <match> <pattern>
2945 Specify data to be collected and analysed during a generic health check
2946 May be used in sections: defaults | frontend | listen | backend
2947 no | no | yes | yes
2948
2949 Arguments :
2950 <match> is a keyword indicating how to look for a specific pattern in the
2951 response. The keyword may be one of "string", "rstring" or
2952 binary.
2953 The keyword may be preceded by an exclamation mark ("!") to negate
2954 the match. Spaces are allowed between the exclamation mark and the
2955 keyword. See below for more details on the supported keywords.
2956
2957 <pattern> is the pattern to look for. It may be a string or a regular
2958 expression. If the pattern contains spaces, they must be escaped
2959 with the usual backslash ('\').
2960 If the match is set to binary, then the pattern must be passed as
2961 a serie of hexadecimal digits in an even number. Each sequence of
2962 two digits will represent a byte. The hexadecimal digits may be
2963 used upper or lower case.
2964
2965
2966 The available matches are intentionally similar to their http-check cousins :
2967
2968 string <string> : test the exact string matches in the response buffer.
2969 A health check response will be considered valid if the
2970 response's buffer contains this exact string. If the
2971 "string" keyword is prefixed with "!", then the response
2972 will be considered invalid if the body contains this
2973 string. This can be used to look for a mandatory pattern
2974 in a protocol response, or to detect a failure when a
2975 specific error appears in a protocol banner.
2976
2977 rstring <regex> : test a regular expression on the response buffer.
2978 A health check response will be considered valid if the
2979 response's buffer matches this expression. If the
2980 "rstring" keyword is prefixed with "!", then the response
2981 will be considered invalid if the body matches the
2982 expression.
2983
2984 binary <hexstring> : test the exact string in its hexadecimal form matches
2985 in the response buffer. A health check response will
2986 be considered valid if the response's buffer contains
2987 this exact hexadecimal string.
2988 Purpose is to match data on binary protocols.
2989
2990 It is important to note that the responses will be limited to a certain size
2991 defined by the global "tune.chksize" option, which defaults to 16384 bytes.
2992 Thus, too large responses may not contain the mandatory pattern when using
2993 "string", "rstring" or binary. If a large response is absolutely required, it
2994 is possible to change the default max size by setting the global variable.
2995 However, it is worth keeping in mind that parsing very large responses can
2996 waste some CPU cycles, especially when regular expressions are used, and that
2997 it is always better to focus the checks on smaller resources. Also, in its
2998 current state, the check will not find any string nor regex past a null
2999 character in the response. Similarly it is not possible to request matching
3000 the null character.
3001
3002 Examples :
3003 # perform a POP check
3004 option tcp-check
3005 tcp-check expect string +OK\ POP3\ ready
3006
3007 # perform an IMAP check
3008 option tcp-check
3009 tcp-check expect string *\ OK\ IMAP4\ ready
3010
3011 # look for the redis master server
3012 option tcp-check
3013 tcp-check send PING\r\n
3014 tcp-check expect +PONG
3015 tcp-check send info\ replication\r\n
3016 tcp-check expect string role:master
3017 tcp-check send QUIT\r\n
3018 tcp-check expect string +OK
3019
3020
3021 See also : "option tcp-check", "tcp-check send", "http-check expect",
3022 tune.chksize
3023
3024
3025tcp-check send <data>
3026 Specify a string to be sent as a question during a generic health check
3027 May be used in sections: defaults | frontend | listen | backend
3028 no | no | yes | yes
3029
3030 <data> : the data to be sent as a question during a generic health check
3031 session. For now, <data> must be a string.
3032
3033 Examples :
3034 # look for the redis master server
3035 option tcp-check
3036 tcp-check send info\ replication\r\n
3037 tcp-check expect string role:master
3038
3039 See also : "option tcp-check", "tcp-check expect", "tcp-check send-binary",
3040 tune.chksize
3041
3042
3043tcp-check send-binary <hexastring>
3044 Specify an hexa digits string to be sent as a binary question during a raw
3045 tcp health check
3046 May be used in sections: defaults | frontend | listen | backend
3047 no | no | yes | yes
3048
3049 <data> : the data to be sent as a question during a generic health check
3050 session. For now, <data> must be a string.
3051 <hexastring> : test the exact string in its hexadecimal form matches in the
3052 response buffer. A health check response will be considered
3053 valid if the response's buffer contains this exact
3054 hexadecimal string.
3055 Purpose is to send binary data to ask on binary protocols.
3056
3057 Examples :
3058 # redis check in binary
3059 option tcp-check
3060 tcp-check send-binary 50494e470d0a # PING\r\n
3061 tcp-check expect binary 2b504F4e47 # +PONG
3062
3063
3064 See also : "option tcp-check", "tcp-check expect", "tcp-check send",
3065 tune.chksize
3066
3067
3068
Mark Lamourinec2247f02012-01-04 13:02:01 -05003069http-send-name-header [<header>]
3070 Add the server name to a request. Use the header string given by <header>
3071
3072 May be used in sections: defaults | frontend | listen | backend
3073 yes | no | yes | yes
3074
3075 Arguments :
3076
3077 <header> The header string to use to send the server name
3078
3079 The "http-send-name-header" statement causes the name of the target
3080 server to be added to the headers of an HTTP request. The name
3081 is added with the header string proved.
3082
3083 See also : "server"
3084
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01003085id <value>
Willy Tarreau53fb4ae2009-10-04 23:04:08 +02003086 Set a persistent ID to a proxy.
3087 May be used in sections : defaults | frontend | listen | backend
3088 no | yes | yes | yes
3089 Arguments : none
3090
3091 Set a persistent ID for the proxy. This ID must be unique and positive.
3092 An unused ID will automatically be assigned if unset. The first assigned
3093 value will be 1. This ID is currently only returned in statistics.
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01003094
3095
Cyril Bonté0d4bf012010-04-25 23:21:46 +02003096ignore-persist { if | unless } <condition>
3097 Declare a condition to ignore persistence
3098 May be used in sections: defaults | frontend | listen | backend
3099 no | yes | yes | yes
3100
3101 By default, when cookie persistence is enabled, every requests containing
3102 the cookie are unconditionally persistent (assuming the target server is up
3103 and running).
3104
3105 The "ignore-persist" statement allows one to declare various ACL-based
3106 conditions which, when met, will cause a request to ignore persistence.
3107 This is sometimes useful to load balance requests for static files, which
3108 oftenly don't require persistence. This can also be used to fully disable
3109 persistence for a specific User-Agent (for example, some web crawler bots).
3110
3111 Combined with "appsession", it can also help reduce HAProxy memory usage, as
3112 the appsession table won't grow if persistence is ignored.
3113
3114 The persistence is ignored when an "if" condition is met, or unless an
3115 "unless" condition is met.
3116
3117 See also : "force-persist", "cookie", and section 7 about ACL usage.
3118
3119
Willy Tarreau2769aa02007-12-27 18:26:09 +01003120log global
Willy Tarreauf7edefa2009-05-10 17:20:05 +02003121log <address> <facility> [<level> [<minlevel>]]
William Lallemand0f99e342011-10-12 17:50:54 +02003122no log
Willy Tarreau2769aa02007-12-27 18:26:09 +01003123 Enable per-instance logging of events and traffic.
3124 May be used in sections : defaults | frontend | listen | backend
3125 yes | yes | yes | yes
William Lallemand0f99e342011-10-12 17:50:54 +02003126
3127 Prefix :
3128 no should be used when the logger list must be flushed. For example,
3129 if you don't want to inherit from the default logger list. This
3130 prefix does not allow arguments.
3131
Willy Tarreau2769aa02007-12-27 18:26:09 +01003132 Arguments :
3133 global should be used when the instance's logging parameters are the
3134 same as the global ones. This is the most common usage. "global"
3135 replaces <address>, <facility> and <level> with those of the log
3136 entries found in the "global" section. Only one "log global"
3137 statement may be used per instance, and this form takes no other
3138 parameter.
3139
3140 <address> indicates where to send the logs. It takes the same format as
3141 for the "global" section's logs, and can be one of :
3142
3143 - An IPv4 address optionally followed by a colon (':') and a UDP
3144 port. If no port is specified, 514 is used by default (the
3145 standard syslog port).
3146
David du Colombier24bb5f52011-03-17 10:40:23 +01003147 - An IPv6 address followed by a colon (':') and optionally a UDP
3148 port. If no port is specified, 514 is used by default (the
3149 standard syslog port).
3150
Willy Tarreau2769aa02007-12-27 18:26:09 +01003151 - A filesystem path to a UNIX domain socket, keeping in mind
3152 considerations for chroot (be sure the path is accessible
3153 inside the chroot) and uid/gid (be sure the path is
3154 appropriately writeable).
3155
Willy Tarreaudad36a32013-03-11 01:20:04 +01003156 Any part of the address string may reference any number of
3157 environment variables by preceding their name with a dollar
3158 sign ('$') and optionally enclosing them with braces ('{}'),
3159 similarly to what is done in Bourne shell.
3160
Willy Tarreau2769aa02007-12-27 18:26:09 +01003161 <facility> must be one of the 24 standard syslog facilities :
3162
3163 kern user mail daemon auth syslog lpr news
3164 uucp cron auth2 ftp ntp audit alert cron2
3165 local0 local1 local2 local3 local4 local5 local6 local7
3166
3167 <level> is optional and can be specified to filter outgoing messages. By
3168 default, all messages are sent. If a level is specified, only
3169 messages with a severity at least as important as this level
Willy Tarreauf7edefa2009-05-10 17:20:05 +02003170 will be sent. An optional minimum level can be specified. If it
3171 is set, logs emitted with a more severe level than this one will
3172 be capped to this level. This is used to avoid sending "emerg"
3173 messages on all terminals on some default syslog configurations.
3174 Eight levels are known :
Willy Tarreau2769aa02007-12-27 18:26:09 +01003175
3176 emerg alert crit err warning notice info debug
3177
William Lallemand0f99e342011-10-12 17:50:54 +02003178 It is important to keep in mind that it is the frontend which decides what to
3179 log from a connection, and that in case of content switching, the log entries
3180 from the backend will be ignored. Connections are logged at level "info".
Willy Tarreaucc6c8912009-02-22 10:53:55 +01003181
3182 However, backend log declaration define how and where servers status changes
3183 will be logged. Level "notice" will be used to indicate a server going up,
3184 "warning" will be used for termination signals and definitive service
3185 termination, and "alert" will be used for when a server goes down.
3186
3187 Note : According to RFC3164, messages are truncated to 1024 bytes before
3188 being emitted.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003189
3190 Example :
3191 log global
Willy Tarreauf7edefa2009-05-10 17:20:05 +02003192 log 127.0.0.1:514 local0 notice # only send important events
3193 log 127.0.0.1:514 local0 notice notice # same but limit output level
Willy Tarreaudad36a32013-03-11 01:20:04 +01003194 log ${LOCAL_SYSLOG}:514 local0 notice # send to local server
3195
Willy Tarreau2769aa02007-12-27 18:26:09 +01003196
William Lallemand48940402012-01-30 16:47:22 +01003197log-format <string>
3198 Allows you to custom a log line.
3199
3200 See also : Custom Log Format (8.2.4)
3201
Willy Tarreau2769aa02007-12-27 18:26:09 +01003202
3203maxconn <conns>
3204 Fix the maximum number of concurrent connections on a frontend
3205 May be used in sections : defaults | frontend | listen | backend
3206 yes | yes | yes | no
3207 Arguments :
3208 <conns> is the maximum number of concurrent connections the frontend will
3209 accept to serve. Excess connections will be queued by the system
3210 in the socket's listen queue and will be served once a connection
3211 closes.
3212
3213 If the system supports it, it can be useful on big sites to raise this limit
3214 very high so that haproxy manages connection queues, instead of leaving the
3215 clients with unanswered connection attempts. This value should not exceed the
3216 global maxconn. Also, keep in mind that a connection contains two buffers
3217 of 8kB each, as well as some other data resulting in about 17 kB of RAM being
3218 consumed per established connection. That means that a medium system equipped
3219 with 1GB of RAM can withstand around 40000-50000 concurrent connections if
3220 properly tuned.
3221
3222 Also, when <conns> is set to large values, it is possible that the servers
3223 are not sized to accept such loads, and for this reason it is generally wise
3224 to assign them some reasonable connection limits.
3225
Vincent Bernat6341be52012-06-27 17:18:30 +02003226 By default, this value is set to 2000.
3227
Willy Tarreau2769aa02007-12-27 18:26:09 +01003228 See also : "server", global section's "maxconn", "fullconn"
3229
3230
3231mode { tcp|http|health }
3232 Set the running mode or protocol of the instance
3233 May be used in sections : defaults | frontend | listen | backend
3234 yes | yes | yes | yes
3235 Arguments :
3236 tcp The instance will work in pure TCP mode. A full-duplex connection
3237 will be established between clients and servers, and no layer 7
3238 examination will be performed. This is the default mode. It
3239 should be used for SSL, SSH, SMTP, ...
3240
3241 http The instance will work in HTTP mode. The client request will be
3242 analyzed in depth before connecting to any server. Any request
3243 which is not RFC-compliant will be rejected. Layer 7 filtering,
3244 processing and switching will be possible. This is the mode which
3245 brings HAProxy most of its value.
3246
3247 health The instance will work in "health" mode. It will just reply "OK"
Willy Tarreau82569f92012-09-27 23:48:56 +02003248 to incoming connections and close the connection. Alternatively,
3249 If the "httpchk" option is set, "HTTP/1.0 200 OK" will be sent
3250 instead. Nothing will be logged in either case. This mode is used
3251 to reply to external components health checks. This mode is
3252 deprecated and should not be used anymore as it is possible to do
3253 the same and even better by combining TCP or HTTP modes with the
3254 "monitor" keyword.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003255
Cyril Bonté108cf6e2012-04-21 23:30:29 +02003256 When doing content switching, it is mandatory that the frontend and the
3257 backend are in the same mode (generally HTTP), otherwise the configuration
3258 will be refused.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003259
Cyril Bonté108cf6e2012-04-21 23:30:29 +02003260 Example :
Willy Tarreau2769aa02007-12-27 18:26:09 +01003261 defaults http_instances
3262 mode http
3263
Cyril Bonté108cf6e2012-04-21 23:30:29 +02003264 See also : "monitor", "monitor-net"
Willy Tarreau2769aa02007-12-27 18:26:09 +01003265
Willy Tarreau0ba27502007-12-24 16:55:16 +01003266
Cyril Bontéf0c60612010-02-06 14:44:47 +01003267monitor fail { if | unless } <condition>
Willy Tarreau2769aa02007-12-27 18:26:09 +01003268 Add a condition to report a failure to a monitor HTTP request.
Willy Tarreau0ba27502007-12-24 16:55:16 +01003269 May be used in sections : defaults | frontend | listen | backend
3270 no | yes | yes | no
Willy Tarreau0ba27502007-12-24 16:55:16 +01003271 Arguments :
3272 if <cond> the monitor request will fail if the condition is satisfied,
3273 and will succeed otherwise. The condition should describe a
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003274 combined test which must induce a failure if all conditions
Willy Tarreau0ba27502007-12-24 16:55:16 +01003275 are met, for instance a low number of servers both in a
3276 backend and its backup.
3277
3278 unless <cond> the monitor request will succeed only if the condition is
3279 satisfied, and will fail otherwise. Such a condition may be
3280 based on a test on the presence of a minimum number of active
3281 servers in a list of backends.
3282
3283 This statement adds a condition which can force the response to a monitor
3284 request to report a failure. By default, when an external component queries
3285 the URI dedicated to monitoring, a 200 response is returned. When one of the
3286 conditions above is met, haproxy will return 503 instead of 200. This is
3287 very useful to report a site failure to an external component which may base
3288 routing advertisements between multiple sites on the availability reported by
3289 haproxy. In this case, one would rely on an ACL involving the "nbsrv"
Willy Tarreauae94d4d2011-05-11 16:28:49 +02003290 criterion. Note that "monitor fail" only works in HTTP mode. Both status
3291 messages may be tweaked using "errorfile" or "errorloc" if needed.
Willy Tarreau0ba27502007-12-24 16:55:16 +01003292
3293 Example:
3294 frontend www
Willy Tarreau2769aa02007-12-27 18:26:09 +01003295 mode http
Willy Tarreau0ba27502007-12-24 16:55:16 +01003296 acl site_dead nbsrv(dynamic) lt 2
3297 acl site_dead nbsrv(static) lt 2
3298 monitor-uri /site_alive
3299 monitor fail if site_dead
3300
Willy Tarreauae94d4d2011-05-11 16:28:49 +02003301 See also : "monitor-net", "monitor-uri", "errorfile", "errorloc"
Willy Tarreau2769aa02007-12-27 18:26:09 +01003302
3303
3304monitor-net <source>
3305 Declare a source network which is limited to monitor requests
3306 May be used in sections : defaults | frontend | listen | backend
3307 yes | yes | yes | no
3308 Arguments :
3309 <source> is the source IPv4 address or network which will only be able to
3310 get monitor responses to any request. It can be either an IPv4
3311 address, a host name, or an address followed by a slash ('/')
3312 followed by a mask.
3313
3314 In TCP mode, any connection coming from a source matching <source> will cause
3315 the connection to be immediately closed without any log. This allows another
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003316 equipment to probe the port and verify that it is still listening, without
Willy Tarreau2769aa02007-12-27 18:26:09 +01003317 forwarding the connection to a remote server.
3318
3319 In HTTP mode, a connection coming from a source matching <source> will be
3320 accepted, the following response will be sent without waiting for a request,
3321 then the connection will be closed : "HTTP/1.0 200 OK". This is normally
3322 enough for any front-end HTTP probe to detect that the service is UP and
Willy Tarreau82569f92012-09-27 23:48:56 +02003323 running without forwarding the request to a backend server. Note that this
3324 response is sent in raw format, without any transformation. This is important
3325 as it means that it will not be SSL-encrypted on SSL listeners.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003326
Willy Tarreau82569f92012-09-27 23:48:56 +02003327 Monitor requests are processed very early, just after tcp-request connection
3328 ACLs which are the only ones able to block them. These connections are short
3329 lived and never wait for any data from the client. They cannot be logged, and
3330 it is the intended purpose. They are only used to report HAProxy's health to
3331 an upper component, nothing more. Please note that "monitor fail" rules do
3332 not apply to connections intercepted by "monitor-net".
Willy Tarreau2769aa02007-12-27 18:26:09 +01003333
Willy Tarreau95cd2832010-03-04 23:36:33 +01003334 Last, please note that only one "monitor-net" statement can be specified in
3335 a frontend. If more than one is found, only the last one will be considered.
Cyril Bonté108cf6e2012-04-21 23:30:29 +02003336
Willy Tarreau2769aa02007-12-27 18:26:09 +01003337 Example :
3338 # addresses .252 and .253 are just probing us.
3339 frontend www
3340 monitor-net 192.168.0.252/31
3341
3342 See also : "monitor fail", "monitor-uri"
3343
3344
3345monitor-uri <uri>
3346 Intercept a URI used by external components' monitor requests
3347 May be used in sections : defaults | frontend | listen | backend
3348 yes | yes | yes | no
3349 Arguments :
3350 <uri> is the exact URI which we want to intercept to return HAProxy's
3351 health status instead of forwarding the request.
3352
3353 When an HTTP request referencing <uri> will be received on a frontend,
3354 HAProxy will not forward it nor log it, but instead will return either
3355 "HTTP/1.0 200 OK" or "HTTP/1.0 503 Service unavailable", depending on failure
3356 conditions defined with "monitor fail". This is normally enough for any
3357 front-end HTTP probe to detect that the service is UP and running without
3358 forwarding the request to a backend server. Note that the HTTP method, the
3359 version and all headers are ignored, but the request must at least be valid
3360 at the HTTP level. This keyword may only be used with an HTTP-mode frontend.
3361
3362 Monitor requests are processed very early. It is not possible to block nor
3363 divert them using ACLs. They cannot be logged either, and it is the intended
3364 purpose. They are only used to report HAProxy's health to an upper component,
3365 nothing more. However, it is possible to add any number of conditions using
3366 "monitor fail" and ACLs so that the result can be adjusted to whatever check
3367 can be imagined (most often the number of available servers in a backend).
3368
3369 Example :
3370 # Use /haproxy_test to report haproxy's status
3371 frontend www
3372 mode http
3373 monitor-uri /haproxy_test
3374
3375 See also : "monitor fail", "monitor-net"
3376
Willy Tarreau0ba27502007-12-24 16:55:16 +01003377
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003378option abortonclose
3379no option abortonclose
3380 Enable or disable early dropping of aborted requests pending in queues.
3381 May be used in sections : defaults | frontend | listen | backend
3382 yes | no | yes | yes
3383 Arguments : none
3384
3385 In presence of very high loads, the servers will take some time to respond.
3386 The per-instance connection queue will inflate, and the response time will
3387 increase respective to the size of the queue times the average per-session
3388 response time. When clients will wait for more than a few seconds, they will
Willy Tarreau198a7442008-01-17 12:05:32 +01003389 often hit the "STOP" button on their browser, leaving a useless request in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003390 the queue, and slowing down other users, and the servers as well, because the
3391 request will eventually be served, then aborted at the first error
3392 encountered while delivering the response.
3393
3394 As there is no way to distinguish between a full STOP and a simple output
3395 close on the client side, HTTP agents should be conservative and consider
3396 that the client might only have closed its output channel while waiting for
3397 the response. However, this introduces risks of congestion when lots of users
3398 do the same, and is completely useless nowadays because probably no client at
3399 all will close the session while waiting for the response. Some HTTP agents
Willy Tarreaud72758d2010-01-12 10:42:19 +01003400 support this behaviour (Squid, Apache, HAProxy), and others do not (TUX, most
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003401 hardware-based load balancers). So the probability for a closed input channel
Willy Tarreau198a7442008-01-17 12:05:32 +01003402 to represent a user hitting the "STOP" button is close to 100%, and the risk
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003403 of being the single component to break rare but valid traffic is extremely
3404 low, which adds to the temptation to be able to abort a session early while
3405 still not served and not pollute the servers.
3406
3407 In HAProxy, the user can choose the desired behaviour using the option
3408 "abortonclose". By default (without the option) the behaviour is HTTP
3409 compliant and aborted requests will be served. But when the option is
3410 specified, a session with an incoming channel closed will be aborted while
3411 it is still possible, either pending in the queue for a connection slot, or
3412 during the connection establishment if the server has not yet acknowledged
3413 the connection request. This considerably reduces the queue size and the load
3414 on saturated servers when users are tempted to click on STOP, which in turn
Willy Tarreaud72758d2010-01-12 10:42:19 +01003415 reduces the response time for other users.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003416
3417 If this option has been enabled in a "defaults" section, it can be disabled
3418 in a specific instance by prepending the "no" keyword before it.
3419
3420 See also : "timeout queue" and server's "maxconn" and "maxqueue" parameters
3421
3422
Willy Tarreau4076a152009-04-02 15:18:36 +02003423option accept-invalid-http-request
3424no option accept-invalid-http-request
3425 Enable or disable relaxing of HTTP request parsing
3426 May be used in sections : defaults | frontend | listen | backend
3427 yes | yes | yes | no
3428 Arguments : none
3429
3430 By default, HAProxy complies with RFC2616 in terms of message parsing. This
3431 means that invalid characters in header names are not permitted and cause an
3432 error to be returned to the client. This is the desired behaviour as such
3433 forbidden characters are essentially used to build attacks exploiting server
3434 weaknesses, and bypass security filtering. Sometimes, a buggy browser or
3435 server will emit invalid header names for whatever reason (configuration,
3436 implementation) and the issue will not be immediately fixed. In such a case,
3437 it is possible to relax HAProxy's header name parser to accept any character
Willy Tarreau422246e2012-01-07 23:54:13 +01003438 even if that does not make sense, by specifying this option. Similarly, the
3439 list of characters allowed to appear in a URI is well defined by RFC3986, and
3440 chars 0-31, 32 (space), 34 ('"'), 60 ('<'), 62 ('>'), 92 ('\'), 94 ('^'), 96
3441 ('`'), 123 ('{'), 124 ('|'), 125 ('}'), 127 (delete) and anything above are
3442 not allowed at all. Haproxy always blocks a number of them (0..32, 127). The
3443 remaining ones are blocked by default unless this option is enabled.
Willy Tarreau4076a152009-04-02 15:18:36 +02003444
3445 This option should never be enabled by default as it hides application bugs
3446 and open security breaches. It should only be deployed after a problem has
3447 been confirmed.
3448
3449 When this option is enabled, erroneous header names will still be accepted in
3450 requests, but the complete request will be captured in order to permit later
Willy Tarreau422246e2012-01-07 23:54:13 +01003451 analysis using the "show errors" request on the UNIX stats socket. Similarly,
3452 requests containing invalid chars in the URI part will be logged. Doing this
Willy Tarreau4076a152009-04-02 15:18:36 +02003453 also helps confirming that the issue has been solved.
3454
3455 If this option has been enabled in a "defaults" section, it can be disabled
3456 in a specific instance by prepending the "no" keyword before it.
3457
3458 See also : "option accept-invalid-http-response" and "show errors" on the
3459 stats socket.
3460
3461
3462option accept-invalid-http-response
3463no option accept-invalid-http-response
3464 Enable or disable relaxing of HTTP response parsing
3465 May be used in sections : defaults | frontend | listen | backend
3466 yes | no | yes | yes
3467 Arguments : none
3468
3469 By default, HAProxy complies with RFC2616 in terms of message parsing. This
3470 means that invalid characters in header names are not permitted and cause an
3471 error to be returned to the client. This is the desired behaviour as such
3472 forbidden characters are essentially used to build attacks exploiting server
3473 weaknesses, and bypass security filtering. Sometimes, a buggy browser or
3474 server will emit invalid header names for whatever reason (configuration,
3475 implementation) and the issue will not be immediately fixed. In such a case,
3476 it is possible to relax HAProxy's header name parser to accept any character
3477 even if that does not make sense, by specifying this option.
3478
3479 This option should never be enabled by default as it hides application bugs
3480 and open security breaches. It should only be deployed after a problem has
3481 been confirmed.
3482
3483 When this option is enabled, erroneous header names will still be accepted in
3484 responses, but the complete response will be captured in order to permit
3485 later analysis using the "show errors" request on the UNIX stats socket.
3486 Doing this also helps confirming that the issue has been solved.
3487
3488 If this option has been enabled in a "defaults" section, it can be disabled
3489 in a specific instance by prepending the "no" keyword before it.
3490
3491 See also : "option accept-invalid-http-request" and "show errors" on the
3492 stats socket.
3493
3494
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003495option allbackups
3496no option allbackups
3497 Use either all backup servers at a time or only the first one
3498 May be used in sections : defaults | frontend | listen | backend
3499 yes | no | yes | yes
3500 Arguments : none
3501
3502 By default, the first operational backup server gets all traffic when normal
3503 servers are all down. Sometimes, it may be preferred to use multiple backups
3504 at once, because one will not be enough. When "option allbackups" is enabled,
3505 the load balancing will be performed among all backup servers when all normal
3506 ones are unavailable. The same load balancing algorithm will be used and the
3507 servers' weights will be respected. Thus, there will not be any priority
3508 order between the backup servers anymore.
3509
3510 This option is mostly used with static server farms dedicated to return a
3511 "sorry" page when an application is completely offline.
3512
3513 If this option has been enabled in a "defaults" section, it can be disabled
3514 in a specific instance by prepending the "no" keyword before it.
3515
3516
3517option checkcache
3518no option checkcache
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003519 Analyze all server responses and block requests with cacheable cookies
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003520 May be used in sections : defaults | frontend | listen | backend
3521 yes | no | yes | yes
3522 Arguments : none
3523
3524 Some high-level frameworks set application cookies everywhere and do not
3525 always let enough control to the developer to manage how the responses should
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003526 be cached. When a session cookie is returned on a cacheable object, there is a
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003527 high risk of session crossing or stealing between users traversing the same
3528 caches. In some situations, it is better to block the response than to let
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02003529 some sensitive session information go in the wild.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003530
3531 The option "checkcache" enables deep inspection of all server responses for
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003532 strict compliance with HTTP specification in terms of cacheability. It
Willy Tarreau198a7442008-01-17 12:05:32 +01003533 carefully checks "Cache-control", "Pragma" and "Set-cookie" headers in server
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003534 response to check if there's a risk of caching a cookie on a client-side
3535 proxy. When this option is enabled, the only responses which can be delivered
Willy Tarreau198a7442008-01-17 12:05:32 +01003536 to the client are :
3537 - all those without "Set-Cookie" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003538 - all those with a return code other than 200, 203, 206, 300, 301, 410,
Willy Tarreau198a7442008-01-17 12:05:32 +01003539 provided that the server has not set a "Cache-control: public" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003540 - all those that come from a POST request, provided that the server has not
3541 set a 'Cache-Control: public' header ;
3542 - those with a 'Pragma: no-cache' header
3543 - those with a 'Cache-control: private' header
3544 - those with a 'Cache-control: no-store' header
3545 - those with a 'Cache-control: max-age=0' header
3546 - those with a 'Cache-control: s-maxage=0' header
3547 - those with a 'Cache-control: no-cache' header
3548 - those with a 'Cache-control: no-cache="set-cookie"' header
3549 - those with a 'Cache-control: no-cache="set-cookie,' header
3550 (allowing other fields after set-cookie)
3551
3552 If a response doesn't respect these requirements, then it will be blocked
Willy Tarreau198a7442008-01-17 12:05:32 +01003553 just as if it was from an "rspdeny" filter, with an "HTTP 502 bad gateway".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003554 The session state shows "PH--" meaning that the proxy blocked the response
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003555 during headers processing. Additionally, an alert will be sent in the logs so
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003556 that admins are informed that there's something to be fixed.
3557
3558 Due to the high impact on the application, the application should be tested
3559 in depth with the option enabled before going to production. It is also a
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003560 good practice to always activate it during tests, even if it is not used in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003561 production, as it will report potentially dangerous application behaviours.
3562
3563 If this option has been enabled in a "defaults" section, it can be disabled
3564 in a specific instance by prepending the "no" keyword before it.
3565
3566
3567option clitcpka
3568no option clitcpka
3569 Enable or disable the sending of TCP keepalive packets on the client side
3570 May be used in sections : defaults | frontend | listen | backend
3571 yes | yes | yes | no
3572 Arguments : none
3573
3574 When there is a firewall or any session-aware component between a client and
3575 a server, and when the protocol involves very long sessions with long idle
3576 periods (eg: remote desktops), there is a risk that one of the intermediate
3577 components decides to expire a session which has remained idle for too long.
3578
3579 Enabling socket-level TCP keep-alives makes the system regularly send packets
3580 to the other end of the connection, leaving it active. The delay between
3581 keep-alive probes is controlled by the system only and depends both on the
3582 operating system and its tuning parameters.
3583
3584 It is important to understand that keep-alive packets are neither emitted nor
3585 received at the application level. It is only the network stacks which sees
3586 them. For this reason, even if one side of the proxy already uses keep-alives
3587 to maintain its connection alive, those keep-alive packets will not be
3588 forwarded to the other side of the proxy.
3589
3590 Please note that this has nothing to do with HTTP keep-alive.
3591
3592 Using option "clitcpka" enables the emission of TCP keep-alive probes on the
3593 client side of a connection, which should help when session expirations are
3594 noticed between HAProxy and a client.
3595
3596 If this option has been enabled in a "defaults" section, it can be disabled
3597 in a specific instance by prepending the "no" keyword before it.
3598
3599 See also : "option srvtcpka", "option tcpka"
3600
3601
Willy Tarreau0ba27502007-12-24 16:55:16 +01003602option contstats
3603 Enable continuous traffic statistics updates
3604 May be used in sections : defaults | frontend | listen | backend
3605 yes | yes | yes | no
3606 Arguments : none
3607
3608 By default, counters used for statistics calculation are incremented
3609 only when a session finishes. It works quite well when serving small
3610 objects, but with big ones (for example large images or archives) or
3611 with A/V streaming, a graph generated from haproxy counters looks like
3612 a hedgehog. With this option enabled counters get incremented continuously,
3613 during a whole session. Recounting touches a hotpath directly so
3614 it is not enabled by default, as it has small performance impact (~0.5%).
3615
3616
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02003617option dontlog-normal
3618no option dontlog-normal
3619 Enable or disable logging of normal, successful connections
3620 May be used in sections : defaults | frontend | listen | backend
3621 yes | yes | yes | no
3622 Arguments : none
3623
3624 There are large sites dealing with several thousand connections per second
3625 and for which logging is a major pain. Some of them are even forced to turn
3626 logs off and cannot debug production issues. Setting this option ensures that
3627 normal connections, those which experience no error, no timeout, no retry nor
3628 redispatch, will not be logged. This leaves disk space for anomalies. In HTTP
3629 mode, the response status code is checked and return codes 5xx will still be
3630 logged.
3631
3632 It is strongly discouraged to use this option as most of the time, the key to
3633 complex issues is in the normal logs which will not be logged here. If you
3634 need to separate logs, see the "log-separate-errors" option instead.
3635
Willy Tarreauc57f0e22009-05-10 13:12:33 +02003636 See also : "log", "dontlognull", "log-separate-errors" and section 8 about
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02003637 logging.
3638
3639
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003640option dontlognull
3641no option dontlognull
3642 Enable or disable logging of null connections
3643 May be used in sections : defaults | frontend | listen | backend
3644 yes | yes | yes | no
3645 Arguments : none
3646
3647 In certain environments, there are components which will regularly connect to
3648 various systems to ensure that they are still alive. It can be the case from
3649 another load balancer as well as from monitoring systems. By default, even a
3650 simple port probe or scan will produce a log. If those connections pollute
3651 the logs too much, it is possible to enable option "dontlognull" to indicate
3652 that a connection on which no data has been transferred will not be logged,
3653 which typically corresponds to those probes.
3654
3655 It is generally recommended not to use this option in uncontrolled
3656 environments (eg: internet), otherwise scans and other malicious activities
3657 would not be logged.
3658
3659 If this option has been enabled in a "defaults" section, it can be disabled
3660 in a specific instance by prepending the "no" keyword before it.
3661
Willy Tarreauc57f0e22009-05-10 13:12:33 +02003662 See also : "log", "monitor-net", "monitor-uri" and section 8 about logging.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003663
3664
3665option forceclose
3666no option forceclose
3667 Enable or disable active connection closing after response is transferred.
3668 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaua31e5df2009-12-30 01:10:35 +01003669 yes | yes | yes | yes
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003670 Arguments : none
3671
3672 Some HTTP servers do not necessarily close the connections when they receive
3673 the "Connection: close" set by "option httpclose", and if the client does not
3674 close either, then the connection remains open till the timeout expires. This
3675 causes high number of simultaneous connections on the servers and shows high
3676 global session times in the logs.
3677
3678 When this happens, it is possible to use "option forceclose". It will
Willy Tarreau82eeaf22009-12-29 12:09:05 +01003679 actively close the outgoing server channel as soon as the server has finished
Willy Tarreau0dfdf192010-01-05 11:33:11 +01003680 to respond. This option implicitly enables the "httpclose" option. Note that
3681 this option also enables the parsing of the full request and response, which
3682 means we can close the connection to the server very quickly, releasing some
3683 resources earlier than with httpclose.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003684
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02003685 This option may also be combined with "option http-pretend-keepalive", which
3686 will disable sending of the "Connection: close" header, but will still cause
3687 the connection to be closed once the whole response is received.
3688
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003689 If this option has been enabled in a "defaults" section, it can be disabled
3690 in a specific instance by prepending the "no" keyword before it.
3691
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02003692 See also : "option httpclose" and "option http-pretend-keepalive"
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003693
3694
Willy Tarreau87cf5142011-08-19 22:57:24 +02003695option forwardfor [ except <network> ] [ header <name> ] [ if-none ]
Willy Tarreauc27debf2008-01-06 08:57:02 +01003696 Enable insertion of the X-Forwarded-For header to requests sent to servers
3697 May be used in sections : defaults | frontend | listen | backend
3698 yes | yes | yes | yes
3699 Arguments :
3700 <network> is an optional argument used to disable this option for sources
3701 matching <network>
Ross Westaf72a1d2008-08-03 10:51:45 +02003702 <name> an optional argument to specify a different "X-Forwarded-For"
Willy Tarreaud72758d2010-01-12 10:42:19 +01003703 header name.
Willy Tarreauc27debf2008-01-06 08:57:02 +01003704
3705 Since HAProxy works in reverse-proxy mode, the servers see its IP address as
3706 their client address. This is sometimes annoying when the client's IP address
3707 is expected in server logs. To solve this problem, the well-known HTTP header
3708 "X-Forwarded-For" may be added by HAProxy to all requests sent to the server.
3709 This header contains a value representing the client's IP address. Since this
3710 header is always appended at the end of the existing header list, the server
3711 must be configured to always use the last occurrence of this header only. See
Ross Westaf72a1d2008-08-03 10:51:45 +02003712 the server's manual to find how to enable use of this standard header. Note
3713 that only the last occurrence of the header must be used, since it is really
3714 possible that the client has already brought one.
3715
Willy Tarreaud72758d2010-01-12 10:42:19 +01003716 The keyword "header" may be used to supply a different header name to replace
Ross Westaf72a1d2008-08-03 10:51:45 +02003717 the default "X-Forwarded-For". This can be useful where you might already
Willy Tarreaud72758d2010-01-12 10:42:19 +01003718 have a "X-Forwarded-For" header from a different application (eg: stunnel),
3719 and you need preserve it. Also if your backend server doesn't use the
Ross Westaf72a1d2008-08-03 10:51:45 +02003720 "X-Forwarded-For" header and requires different one (eg: Zeus Web Servers
3721 require "X-Cluster-Client-IP").
Willy Tarreauc27debf2008-01-06 08:57:02 +01003722
3723 Sometimes, a same HAProxy instance may be shared between a direct client
3724 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
3725 used to decrypt HTTPS traffic). It is possible to disable the addition of the
3726 header for a known source address or network by adding the "except" keyword
3727 followed by the network address. In this case, any source IP matching the
3728 network will not cause an addition of this header. Most common uses are with
3729 private networks or 127.0.0.1.
3730
Willy Tarreau87cf5142011-08-19 22:57:24 +02003731 Alternatively, the keyword "if-none" states that the header will only be
3732 added if it is not present. This should only be used in perfectly trusted
3733 environment, as this might cause a security issue if headers reaching haproxy
3734 are under the control of the end-user.
3735
Willy Tarreauc27debf2008-01-06 08:57:02 +01003736 This option may be specified either in the frontend or in the backend. If at
Ross Westaf72a1d2008-08-03 10:51:45 +02003737 least one of them uses it, the header will be added. Note that the backend's
3738 setting of the header subargument takes precedence over the frontend's if
Willy Tarreau87cf5142011-08-19 22:57:24 +02003739 both are defined. In the case of the "if-none" argument, if at least one of
3740 the frontend or the backend does not specify it, it wants the addition to be
3741 mandatory, so it wins.
Willy Tarreauc27debf2008-01-06 08:57:02 +01003742
Willy Tarreau87cf5142011-08-19 22:57:24 +02003743 It is important to note that by default, HAProxy works in tunnel mode and
3744 only inspects the first request of a connection, meaning that only the first
3745 request will have the header appended, which is certainly not what you want.
3746 In order to fix this, ensure that any of the "httpclose", "forceclose" or
3747 "http-server-close" options is set when using this option.
Willy Tarreauc27debf2008-01-06 08:57:02 +01003748
Ross Westaf72a1d2008-08-03 10:51:45 +02003749 Examples :
Willy Tarreauc27debf2008-01-06 08:57:02 +01003750 # Public HTTP address also used by stunnel on the same machine
3751 frontend www
3752 mode http
3753 option forwardfor except 127.0.0.1 # stunnel already adds the header
3754
Ross Westaf72a1d2008-08-03 10:51:45 +02003755 # Those servers want the IP Address in X-Client
3756 backend www
3757 mode http
3758 option forwardfor header X-Client
3759
Willy Tarreau87cf5142011-08-19 22:57:24 +02003760 See also : "option httpclose", "option http-server-close",
3761 "option forceclose"
Willy Tarreauc27debf2008-01-06 08:57:02 +01003762
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02003763
Baptiste Assmann5ecb77f2013-10-06 23:24:13 +02003764option tcp-check
3765 Perform health checks using tcp-check send/expect sequences
3766 May be used in sections: defaults | frontend | listen | backend
3767 yes | no | yes | yes
3768
3769 This health check method is intended to be combined with "tcp-check" command
3770 lists in order to support send/expect types of health check sequences.
3771
3772 TCP checks currently support 4 modes of operations :
3773 - no "tcp-check" directive : the health check only consists in a connection
3774 attempt, which remains the default mode.
3775
3776 - "tcp-check send" or "tcp-check send-binary" only is mentionned : this is
3777 used to send a string along with a connection opening. With some
3778 protocols, it helps sending a "QUIT" message for example that prevents
3779 the server from logging a connection error for each health check. The
3780 check result will still be based on the ability to open the connection
3781 only.
3782
3783 - "tcp-check expect" only is mentionned : this is used to test a banner.
3784 The connection is opened and haproxy waits for the server to present some
3785 contents which must validate some rules. The check result will be based
3786 on the matching between the contents and the rules. This is suited for
3787 POP, IMAP, SMTP, FTP, SSH, TELNET.
3788
3789 - both "tcp-check send" and "tcp-check expect" are mentionned : this is
3790 used to test a hello-type protocol. Haproxy sends a message, the server
3791 responds and its response is analysed. the check result will be based on
3792 the maching between the response contents and the rules. This is often
3793 suited for protocols which require a binding or a request/response model.
3794 LDAP, MySQL, Redis and SSL are example of such protocols, though they
3795 already all have their dedicated checks with a deeper understanding of
3796 the respective protocols.
3797 In this mode, many questions may be sent and many answers may be
3798 analysed.
3799
3800 Examples :
3801 # perform a POP check (analyse only server's banner)
3802 option tcp-check
3803 tcp-check expect string +OK\ POP3\ ready
3804
3805 # perform an IMAP check (analyse only server's banner)
3806 option tcp-check
3807 tcp-check expect string *\ OK\ IMAP4\ ready
3808
3809 # look for the redis master server after ensuring it speaks well
3810 # redis protocol, then it exits properly.
3811 # (send a command then analyse the response 3 tims)
3812 option tcp-check
3813 tcp-check send PING\r\n
3814 tcp-check expect +PONG
3815 tcp-check send info\ replication\r\n
3816 tcp-check expect string role:master
3817 tcp-check send QUIT\r\n
3818 tcp-check expect string +OK
3819
3820 forge a HTTP request, then analyse the response
3821 (send many headers before analyzing)
3822 option tcp-check
3823 tcp-check send HEAD\ /\ HTTP/1.1\r\n
3824 tcp-check send Host:\ www.mydomain.com\r\n
3825 tcp-check send User-Agent:\ HAProxy\ tcpcheck\r\n
3826 tcp-check send \r\n
3827 tcp-check expect rstring HTTP/1\..\ (2..|3..)
3828
3829
3830 See also : "tcp-check expect", "tcp-check send"
3831
3832
Willy Tarreau96e31212011-05-30 18:10:30 +02003833option http-no-delay
3834no option http-no-delay
3835 Instruct the system to favor low interactive delays over performance in HTTP
3836 May be used in sections : defaults | frontend | listen | backend
3837 yes | yes | yes | yes
3838 Arguments : none
3839
3840 In HTTP, each payload is unidirectional and has no notion of interactivity.
3841 Any agent is expected to queue data somewhat for a reasonably low delay.
3842 There are some very rare server-to-server applications that abuse the HTTP
3843 protocol and expect the payload phase to be highly interactive, with many
3844 interleaved data chunks in both directions within a single request. This is
3845 absolutely not supported by the HTTP specification and will not work across
3846 most proxies or servers. When such applications attempt to do this through
3847 haproxy, it works but they will experience high delays due to the network
3848 optimizations which favor performance by instructing the system to wait for
3849 enough data to be available in order to only send full packets. Typical
3850 delays are around 200 ms per round trip. Note that this only happens with
3851 abnormal uses. Normal uses such as CONNECT requests nor WebSockets are not
3852 affected.
3853
3854 When "option http-no-delay" is present in either the frontend or the backend
3855 used by a connection, all such optimizations will be disabled in order to
3856 make the exchanges as fast as possible. Of course this offers no guarantee on
3857 the functionality, as it may break at any other place. But if it works via
3858 HAProxy, it will work as fast as possible. This option should never be used
3859 by default, and should never be used at all unless such a buggy application
3860 is discovered. The impact of using this option is an increase of bandwidth
3861 usage and CPU usage, which may significantly lower performance in high
3862 latency environments.
3863
3864
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02003865option http-pretend-keepalive
3866no option http-pretend-keepalive
3867 Define whether haproxy will announce keepalive to the server or not
3868 May be used in sections : defaults | frontend | listen | backend
3869 yes | yes | yes | yes
3870 Arguments : none
3871
3872 When running with "option http-server-close" or "option forceclose", haproxy
3873 adds a "Connection: close" header to the request forwarded to the server.
3874 Unfortunately, when some servers see this header, they automatically refrain
3875 from using the chunked encoding for responses of unknown length, while this
3876 is totally unrelated. The immediate effect is that this prevents haproxy from
3877 maintaining the client connection alive. A second effect is that a client or
3878 a cache could receive an incomplete response without being aware of it, and
3879 consider the response complete.
3880
3881 By setting "option http-pretend-keepalive", haproxy will make the server
3882 believe it will keep the connection alive. The server will then not fall back
3883 to the abnormal undesired above. When haproxy gets the whole response, it
3884 will close the connection with the server just as it would do with the
3885 "forceclose" option. That way the client gets a normal response and the
3886 connection is correctly closed on the server side.
3887
3888 It is recommended not to enable this option by default, because most servers
3889 will more efficiently close the connection themselves after the last packet,
3890 and release its buffers slightly earlier. Also, the added packet on the
3891 network could slightly reduce the overall peak performance. However it is
3892 worth noting that when this option is enabled, haproxy will have slightly
3893 less work to do. So if haproxy is the bottleneck on the whole architecture,
3894 enabling this option might save a few CPU cycles.
3895
3896 This option may be set both in a frontend and in a backend. It is enabled if
3897 at least one of the frontend or backend holding a connection has it enabled.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003898 This option may be combined with "option httpclose", which will cause
Willy Tarreau22a95342010-09-29 14:31:41 +02003899 keepalive to be announced to the server and close to be announced to the
3900 client. This practice is discouraged though.
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02003901
3902 If this option has been enabled in a "defaults" section, it can be disabled
3903 in a specific instance by prepending the "no" keyword before it.
3904
3905 See also : "option forceclose" and "option http-server-close"
3906
Willy Tarreauc27debf2008-01-06 08:57:02 +01003907
Willy Tarreaub608feb2010-01-02 22:47:18 +01003908option http-server-close
3909no option http-server-close
3910 Enable or disable HTTP connection closing on the server side
3911 May be used in sections : defaults | frontend | listen | backend
3912 yes | yes | yes | yes
3913 Arguments : none
3914
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02003915 By default, when a client communicates with a server, HAProxy will only
3916 analyze, log, and process the first request of each connection. Setting
3917 "option http-server-close" enables HTTP connection-close mode on the server
3918 side while keeping the ability to support HTTP keep-alive and pipelining on
3919 the client side. This provides the lowest latency on the client side (slow
3920 network) and the fastest session reuse on the server side to save server
3921 resources, similarly to "option forceclose". It also permits non-keepalive
3922 capable servers to be served in keep-alive mode to the clients if they
3923 conform to the requirements of RFC2616. Please note that some servers do not
3924 always conform to those requirements when they see "Connection: close" in the
3925 request. The effect will be that keep-alive will never be used. A workaround
3926 consists in enabling "option http-pretend-keepalive".
Willy Tarreaub608feb2010-01-02 22:47:18 +01003927
3928 At the moment, logs will not indicate whether requests came from the same
3929 session or not. The accept date reported in the logs corresponds to the end
3930 of the previous request, and the request time corresponds to the time spent
3931 waiting for a new request. The keep-alive request time is still bound to the
Willy Tarreaub16a5742010-01-10 14:46:16 +01003932 timeout defined by "timeout http-keep-alive" or "timeout http-request" if
3933 not set.
Willy Tarreaub608feb2010-01-02 22:47:18 +01003934
3935 This option may be set both in a frontend and in a backend. It is enabled if
3936 at least one of the frontend or backend holding a connection has it enabled.
Willy Tarreau0dfdf192010-01-05 11:33:11 +01003937 It is worth noting that "option forceclose" has precedence over "option
3938 http-server-close" and that combining "http-server-close" with "httpclose"
3939 basically achieve the same result as "forceclose".
Willy Tarreaub608feb2010-01-02 22:47:18 +01003940
3941 If this option has been enabled in a "defaults" section, it can be disabled
3942 in a specific instance by prepending the "no" keyword before it.
3943
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02003944 See also : "option forceclose", "option http-pretend-keepalive",
3945 "option httpclose" and "1.1. The HTTP transaction model".
Willy Tarreaub608feb2010-01-02 22:47:18 +01003946
3947
Willy Tarreau88d349d2010-01-25 12:15:43 +01003948option http-use-proxy-header
Cyril Bontéf0c60612010-02-06 14:44:47 +01003949no option http-use-proxy-header
Willy Tarreau88d349d2010-01-25 12:15:43 +01003950 Make use of non-standard Proxy-Connection header instead of Connection
3951 May be used in sections : defaults | frontend | listen | backend
3952 yes | yes | yes | no
3953 Arguments : none
3954
3955 While RFC2616 explicitly states that HTTP/1.1 agents must use the
3956 Connection header to indicate their wish of persistent or non-persistent
3957 connections, both browsers and proxies ignore this header for proxied
3958 connections and make use of the undocumented, non-standard Proxy-Connection
3959 header instead. The issue begins when trying to put a load balancer between
3960 browsers and such proxies, because there will be a difference between what
3961 haproxy understands and what the client and the proxy agree on.
3962
3963 By setting this option in a frontend, haproxy can automatically switch to use
3964 that non-standard header if it sees proxied requests. A proxied request is
3965 defined here as one where the URI begins with neither a '/' nor a '*'. The
3966 choice of header only affects requests passing through proxies making use of
3967 one of the "httpclose", "forceclose" and "http-server-close" options. Note
3968 that this option can only be specified in a frontend and will affect the
3969 request along its whole life.
3970
Willy Tarreau844a7e72010-01-31 21:46:18 +01003971 Also, when this option is set, a request which requires authentication will
3972 automatically switch to use proxy authentication headers if it is itself a
3973 proxied request. That makes it possible to check or enforce authentication in
3974 front of an existing proxy.
3975
Willy Tarreau88d349d2010-01-25 12:15:43 +01003976 This option should normally never be used, except in front of a proxy.
3977
3978 See also : "option httpclose", "option forceclose" and "option
3979 http-server-close".
3980
3981
Willy Tarreaud63335a2010-02-26 12:56:52 +01003982option httpchk
3983option httpchk <uri>
3984option httpchk <method> <uri>
3985option httpchk <method> <uri> <version>
3986 Enable HTTP protocol to check on the servers health
3987 May be used in sections : defaults | frontend | listen | backend
3988 yes | no | yes | yes
3989 Arguments :
3990 <method> is the optional HTTP method used with the requests. When not set,
3991 the "OPTIONS" method is used, as it generally requires low server
3992 processing and is easy to filter out from the logs. Any method
3993 may be used, though it is not recommended to invent non-standard
3994 ones.
3995
3996 <uri> is the URI referenced in the HTTP requests. It defaults to " / "
3997 which is accessible by default on almost any server, but may be
3998 changed to any other URI. Query strings are permitted.
3999
4000 <version> is the optional HTTP version string. It defaults to "HTTP/1.0"
4001 but some servers might behave incorrectly in HTTP 1.0, so turning
4002 it to HTTP/1.1 may sometimes help. Note that the Host field is
4003 mandatory in HTTP/1.1, and as a trick, it is possible to pass it
4004 after "\r\n" following the version string.
4005
4006 By default, server health checks only consist in trying to establish a TCP
4007 connection. When "option httpchk" is specified, a complete HTTP request is
4008 sent once the TCP connection is established, and responses 2xx and 3xx are
4009 considered valid, while all other ones indicate a server failure, including
4010 the lack of any response.
4011
4012 The port and interval are specified in the server configuration.
4013
4014 This option does not necessarily require an HTTP backend, it also works with
4015 plain TCP backends. This is particularly useful to check simple scripts bound
4016 to some dedicated ports using the inetd daemon.
4017
4018 Examples :
4019 # Relay HTTPS traffic to Apache instance and check service availability
4020 # using HTTP request "OPTIONS * HTTP/1.1" on port 80.
4021 backend https_relay
4022 mode tcp
4023 option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
4024 server apache1 192.168.1.1:443 check port 80
4025
Simon Hormanafc47ee2013-11-25 10:46:35 +09004026 See also : "option ssl-hello-chk", "option smtpchk", "option mysql-check",
4027 "option pgsql-check", "http-check" and the "check", "port" and
4028 "inter" server options.
Willy Tarreaud63335a2010-02-26 12:56:52 +01004029
4030
Willy Tarreauc27debf2008-01-06 08:57:02 +01004031option httpclose
4032no option httpclose
4033 Enable or disable passive HTTP connection closing
4034 May be used in sections : defaults | frontend | listen | backend
4035 yes | yes | yes | yes
4036 Arguments : none
4037
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02004038 By default, when a client communicates with a server, HAProxy will only
4039 analyze, log, and process the first request of each connection. If "option
4040 httpclose" is set, it will check if a "Connection: close" header is already
4041 set in each direction, and will add one if missing. Each end should react to
4042 this by actively closing the TCP connection after each transfer, thus
4043 resulting in a switch to the HTTP close mode. Any "Connection" header
4044 different from "close" will also be removed.
Willy Tarreauc27debf2008-01-06 08:57:02 +01004045
4046 It seldom happens that some servers incorrectly ignore this header and do not
Jamie Gloudonaaa21002012-08-25 00:18:33 -04004047 close the connection even though they reply "Connection: close". For this
Willy Tarreau0dfdf192010-01-05 11:33:11 +01004048 reason, they are not compatible with older HTTP 1.0 browsers. If this happens
4049 it is possible to use the "option forceclose" which actively closes the
4050 request connection once the server responds. Option "forceclose" also
4051 releases the server connection earlier because it does not have to wait for
4052 the client to acknowledge it.
Willy Tarreauc27debf2008-01-06 08:57:02 +01004053
4054 This option may be set both in a frontend and in a backend. It is enabled if
4055 at least one of the frontend or backend holding a connection has it enabled.
4056 If "option forceclose" is specified too, it has precedence over "httpclose".
Willy Tarreau0dfdf192010-01-05 11:33:11 +01004057 If "option http-server-close" is enabled at the same time as "httpclose", it
4058 basically achieves the same result as "option forceclose".
Willy Tarreauc27debf2008-01-06 08:57:02 +01004059
4060 If this option has been enabled in a "defaults" section, it can be disabled
4061 in a specific instance by prepending the "no" keyword before it.
4062
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02004063 See also : "option forceclose", "option http-server-close" and
4064 "1.1. The HTTP transaction model".
Willy Tarreauc27debf2008-01-06 08:57:02 +01004065
4066
Emeric Brun3a058f32009-06-30 18:26:00 +02004067option httplog [ clf ]
Willy Tarreauc27debf2008-01-06 08:57:02 +01004068 Enable logging of HTTP request, session state and timers
4069 May be used in sections : defaults | frontend | listen | backend
4070 yes | yes | yes | yes
Emeric Brun3a058f32009-06-30 18:26:00 +02004071 Arguments :
4072 clf if the "clf" argument is added, then the output format will be
4073 the CLF format instead of HAProxy's default HTTP format. You can
4074 use this when you need to feed HAProxy's logs through a specific
4075 log analyser which only support the CLF format and which is not
4076 extensible.
Willy Tarreauc27debf2008-01-06 08:57:02 +01004077
4078 By default, the log output format is very poor, as it only contains the
4079 source and destination addresses, and the instance name. By specifying
4080 "option httplog", each log line turns into a much richer format including,
4081 but not limited to, the HTTP request, the connection timers, the session
4082 status, the connections numbers, the captured headers and cookies, the
4083 frontend, backend and server name, and of course the source address and
4084 ports.
4085
4086 This option may be set either in the frontend or the backend.
4087
Emeric Brun3a058f32009-06-30 18:26:00 +02004088 If this option has been enabled in a "defaults" section, it can be disabled
4089 in a specific instance by prepending the "no" keyword before it. Specifying
4090 only "option httplog" will automatically clear the 'clf' mode if it was set
4091 by default.
4092
Willy Tarreauc57f0e22009-05-10 13:12:33 +02004093 See also : section 8 about logging.
Willy Tarreauc27debf2008-01-06 08:57:02 +01004094
Willy Tarreau55165fe2009-05-10 12:02:55 +02004095
4096option http_proxy
4097no option http_proxy
4098 Enable or disable plain HTTP proxy mode
4099 May be used in sections : defaults | frontend | listen | backend
4100 yes | yes | yes | yes
4101 Arguments : none
4102
4103 It sometimes happens that people need a pure HTTP proxy which understands
4104 basic proxy requests without caching nor any fancy feature. In this case,
4105 it may be worth setting up an HAProxy instance with the "option http_proxy"
4106 set. In this mode, no server is declared, and the connection is forwarded to
4107 the IP address and port found in the URL after the "http://" scheme.
4108
4109 No host address resolution is performed, so this only works when pure IP
4110 addresses are passed. Since this option's usage perimeter is rather limited,
4111 it will probably be used only by experts who know they need exactly it. Last,
4112 if the clients are susceptible of sending keep-alive requests, it will be
Cyril Bonté2409e682010-12-14 22:47:51 +01004113 needed to add "option httpclose" to ensure that all requests will correctly
Willy Tarreau55165fe2009-05-10 12:02:55 +02004114 be analyzed.
4115
4116 If this option has been enabled in a "defaults" section, it can be disabled
4117 in a specific instance by prepending the "no" keyword before it.
4118
4119 Example :
4120 # this backend understands HTTP proxy requests and forwards them directly.
4121 backend direct_forward
4122 option httpclose
4123 option http_proxy
4124
4125 See also : "option httpclose"
4126
Willy Tarreau211ad242009-10-03 21:45:07 +02004127
Jamie Gloudon801a0a32012-08-25 00:18:33 -04004128option independent-streams
4129no option independent-streams
4130 Enable or disable independent timeout processing for both directions
Willy Tarreauf27b5ea2009-10-03 22:01:18 +02004131 May be used in sections : defaults | frontend | listen | backend
4132 yes | yes | yes | yes
4133 Arguments : none
4134
4135 By default, when data is sent over a socket, both the write timeout and the
4136 read timeout for that socket are refreshed, because we consider that there is
4137 activity on that socket, and we have no other means of guessing if we should
4138 receive data or not.
4139
4140 While this default behaviour is desirable for almost all applications, there
4141 exists a situation where it is desirable to disable it, and only refresh the
4142 read timeout if there are incoming data. This happens on sessions with large
4143 timeouts and low amounts of exchanged data such as telnet session. If the
4144 server suddenly disappears, the output data accumulates in the system's
4145 socket buffers, both timeouts are correctly refreshed, and there is no way
4146 to know the server does not receive them, so we don't timeout. However, when
4147 the underlying protocol always echoes sent data, it would be enough by itself
4148 to detect the issue using the read timeout. Note that this problem does not
4149 happen with more verbose protocols because data won't accumulate long in the
4150 socket buffers.
4151
4152 When this option is set on the frontend, it will disable read timeout updates
4153 on data sent to the client. There probably is little use of this case. When
4154 the option is set on the backend, it will disable read timeout updates on
4155 data sent to the server. Doing so will typically break large HTTP posts from
4156 slow lines, so use it with caution.
4157
Jamie Gloudon801a0a32012-08-25 00:18:33 -04004158 Note: older versions used to call this setting "option independant-streams"
4159 with a spelling mistake. This spelling is still supported but
4160 deprecated.
4161
Willy Tarreauce887fd2012-05-12 12:50:00 +02004162 See also : "timeout client", "timeout server" and "timeout tunnel"
Willy Tarreauf27b5ea2009-10-03 22:01:18 +02004163
4164
Gabor Lekenyb4c81e42010-09-29 18:17:05 +02004165option ldap-check
4166 Use LDAPv3 health checks for server testing
4167 May be used in sections : defaults | frontend | listen | backend
4168 yes | no | yes | yes
4169 Arguments : none
4170
4171 It is possible to test that the server correctly talks LDAPv3 instead of just
4172 testing that it accepts the TCP connection. When this option is set, an
4173 LDAPv3 anonymous simple bind message is sent to the server, and the response
4174 is analyzed to find an LDAPv3 bind response message.
4175
4176 The server is considered valid only when the LDAP response contains success
4177 resultCode (http://tools.ietf.org/html/rfc4511#section-4.1.9).
4178
4179 Logging of bind requests is server dependent see your documentation how to
4180 configure it.
4181
4182 Example :
4183 option ldap-check
4184
4185 See also : "option httpchk"
4186
4187
Willy Tarreau211ad242009-10-03 21:45:07 +02004188option log-health-checks
4189no option log-health-checks
4190 Enable or disable logging of health checks
4191 May be used in sections : defaults | frontend | listen | backend
4192 yes | no | yes | yes
4193 Arguments : none
4194
4195 Enable health checks logging so it possible to check for example what
4196 was happening before a server crash. Failed health check are logged if
4197 server is UP and succeeded health checks if server is DOWN, so the amount
4198 of additional information is limited.
4199
4200 If health check logging is enabled no health check status is printed
4201 when servers is set up UP/DOWN/ENABLED/DISABLED.
4202
4203 See also: "log" and section 8 about logging.
4204
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02004205
4206option log-separate-errors
4207no option log-separate-errors
4208 Change log level for non-completely successful connections
4209 May be used in sections : defaults | frontend | listen | backend
4210 yes | yes | yes | no
4211 Arguments : none
4212
4213 Sometimes looking for errors in logs is not easy. This option makes haproxy
4214 raise the level of logs containing potentially interesting information such
4215 as errors, timeouts, retries, redispatches, or HTTP status codes 5xx. The
4216 level changes from "info" to "err". This makes it possible to log them
4217 separately to a different file with most syslog daemons. Be careful not to
4218 remove them from the original file, otherwise you would lose ordering which
4219 provides very important information.
4220
4221 Using this option, large sites dealing with several thousand connections per
4222 second may log normal traffic to a rotating buffer and only archive smaller
4223 error logs.
4224
Willy Tarreauc57f0e22009-05-10 13:12:33 +02004225 See also : "log", "dontlognull", "dontlog-normal" and section 8 about
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02004226 logging.
4227
Willy Tarreauc27debf2008-01-06 08:57:02 +01004228
4229option logasap
4230no option logasap
4231 Enable or disable early logging of HTTP requests
4232 May be used in sections : defaults | frontend | listen | backend
4233 yes | yes | yes | no
4234 Arguments : none
4235
4236 By default, HTTP requests are logged upon termination so that the total
4237 transfer time and the number of bytes appear in the logs. When large objects
4238 are being transferred, it may take a while before the request appears in the
4239 logs. Using "option logasap", the request gets logged as soon as the server
4240 sends the complete headers. The only missing information in the logs will be
4241 the total number of bytes which will indicate everything except the amount
4242 of data transferred, and the total time which will not take the transfer
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01004243 time into account. In such a situation, it's a good practice to capture the
Willy Tarreauc27debf2008-01-06 08:57:02 +01004244 "Content-Length" response header so that the logs at least indicate how many
4245 bytes are expected to be transferred.
4246
Willy Tarreaucc6c8912009-02-22 10:53:55 +01004247 Examples :
4248 listen http_proxy 0.0.0.0:80
4249 mode http
4250 option httplog
4251 option logasap
4252 log 192.168.2.200 local3
4253
4254 >>> Feb 6 12:14:14 localhost \
4255 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
4256 static/srv1 9/10/7/14/+30 200 +243 - - ---- 3/1/1/1/0 1/0 \
4257 "GET /image.iso HTTP/1.0"
4258
Willy Tarreauc57f0e22009-05-10 13:12:33 +02004259 See also : "option httplog", "capture response header", and section 8 about
Willy Tarreauc27debf2008-01-06 08:57:02 +01004260 logging.
4261
4262
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02004263option mysql-check [ user <username> ]
4264 Use MySQL health checks for server testing
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01004265 May be used in sections : defaults | frontend | listen | backend
4266 yes | no | yes | yes
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02004267 Arguments :
Cyril Bonté108cf6e2012-04-21 23:30:29 +02004268 <username> This is the username which will be used when connecting to MySQL
4269 server.
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02004270
4271 If you specify a username, the check consists of sending two MySQL packet,
4272 one Client Authentication packet, and one QUIT packet, to correctly close
4273 MySQL session. We then parse the MySQL Handshake Initialisation packet and/or
4274 Error packet. It is a basic but useful test which does not produce error nor
4275 aborted connect on the server. However, it requires adding an authorization
4276 in the MySQL table, like this :
4277
4278 USE mysql;
4279 INSERT INTO user (Host,User) values ('<ip_of_haproxy>','<username>');
4280 FLUSH PRIVILEGES;
4281
4282 If you don't specify a username (it is deprecated and not recommended), the
4283 check only consists in parsing the Mysql Handshake Initialisation packet or
4284 Error packet, we don't send anything in this mode. It was reported that it
4285 can generate lockout if check is too frequent and/or if there is not enough
4286 traffic. In fact, you need in this case to check MySQL "max_connect_errors"
4287 value as if a connection is established successfully within fewer than MySQL
4288 "max_connect_errors" attempts after a previous connection was interrupted,
4289 the error count for the host is cleared to zero. If HAProxy's server get
4290 blocked, the "FLUSH HOSTS" statement is the only way to unblock it.
4291
4292 Remember that this does not check database presence nor database consistency.
4293 To do this, you can use an external check with xinetd for example.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01004294
Hervé COMMOWICK212f7782011-06-10 14:05:59 +02004295 The check requires MySQL >=3.22, for older version, please use TCP check.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01004296
4297 Most often, an incoming MySQL server needs to see the client's IP address for
4298 various purposes, including IP privilege matching and connection logging.
4299 When possible, it is often wise to masquerade the client's IP address when
4300 connecting to the server using the "usesrc" argument of the "source" keyword,
4301 which requires the cttproxy feature to be compiled in, and the MySQL server
4302 to route the client via the machine hosting haproxy.
4303
4304 See also: "option httpchk"
4305
Rauf Kuliyev38b41562011-01-04 15:14:13 +01004306option pgsql-check [ user <username> ]
4307 Use PostgreSQL health checks for server testing
4308 May be used in sections : defaults | frontend | listen | backend
4309 yes | no | yes | yes
4310 Arguments :
Cyril Bonté108cf6e2012-04-21 23:30:29 +02004311 <username> This is the username which will be used when connecting to
4312 PostgreSQL server.
Rauf Kuliyev38b41562011-01-04 15:14:13 +01004313
4314 The check sends a PostgreSQL StartupMessage and waits for either
4315 Authentication request or ErrorResponse message. It is a basic but useful
4316 test which does not produce error nor aborted connect on the server.
4317 This check is identical with the "mysql-check".
4318
4319 See also: "option httpchk"
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01004320
Willy Tarreaua453bdd2008-01-08 19:50:52 +01004321option nolinger
4322no option nolinger
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01004323 Enable or disable immediate session resource cleaning after close
Willy Tarreaua453bdd2008-01-08 19:50:52 +01004324 May be used in sections: defaults | frontend | listen | backend
4325 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01004326 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01004327
4328 When clients or servers abort connections in a dirty way (eg: they are
4329 physically disconnected), the session timeouts triggers and the session is
4330 closed. But it will remain in FIN_WAIT1 state for some time in the system,
4331 using some resources and possibly limiting the ability to establish newer
4332 connections.
4333
4334 When this happens, it is possible to activate "option nolinger" which forces
4335 the system to immediately remove any socket's pending data on close. Thus,
4336 the session is instantly purged from the system's tables. This usually has
4337 side effects such as increased number of TCP resets due to old retransmits
4338 getting immediately rejected. Some firewalls may sometimes complain about
4339 this too.
4340
4341 For this reason, it is not recommended to use this option when not absolutely
4342 needed. You know that you need it when you have thousands of FIN_WAIT1
4343 sessions on your system (TIME_WAIT ones do not count).
4344
4345 This option may be used both on frontends and backends, depending on the side
4346 where it is required. Use it on the frontend for clients, and on the backend
4347 for servers.
4348
4349 If this option has been enabled in a "defaults" section, it can be disabled
4350 in a specific instance by prepending the "no" keyword before it.
4351
4352
Willy Tarreau55165fe2009-05-10 12:02:55 +02004353option originalto [ except <network> ] [ header <name> ]
4354 Enable insertion of the X-Original-To header to requests sent to servers
4355 May be used in sections : defaults | frontend | listen | backend
4356 yes | yes | yes | yes
4357 Arguments :
4358 <network> is an optional argument used to disable this option for sources
4359 matching <network>
4360 <name> an optional argument to specify a different "X-Original-To"
4361 header name.
4362
4363 Since HAProxy can work in transparent mode, every request from a client can
4364 be redirected to the proxy and HAProxy itself can proxy every request to a
4365 complex SQUID environment and the destination host from SO_ORIGINAL_DST will
4366 be lost. This is annoying when you want access rules based on destination ip
4367 addresses. To solve this problem, a new HTTP header "X-Original-To" may be
4368 added by HAProxy to all requests sent to the server. This header contains a
4369 value representing the original destination IP address. Since this must be
4370 configured to always use the last occurrence of this header only. Note that
4371 only the last occurrence of the header must be used, since it is really
4372 possible that the client has already brought one.
4373
4374 The keyword "header" may be used to supply a different header name to replace
4375 the default "X-Original-To". This can be useful where you might already
4376 have a "X-Original-To" header from a different application, and you need
4377 preserve it. Also if your backend server doesn't use the "X-Original-To"
4378 header and requires different one.
4379
4380 Sometimes, a same HAProxy instance may be shared between a direct client
4381 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
4382 used to decrypt HTTPS traffic). It is possible to disable the addition of the
4383 header for a known source address or network by adding the "except" keyword
4384 followed by the network address. In this case, any source IP matching the
4385 network will not cause an addition of this header. Most common uses are with
4386 private networks or 127.0.0.1.
4387
4388 This option may be specified either in the frontend or in the backend. If at
4389 least one of them uses it, the header will be added. Note that the backend's
4390 setting of the header subargument takes precedence over the frontend's if
4391 both are defined.
4392
Willy Tarreau87cf5142011-08-19 22:57:24 +02004393 It is important to note that by default, HAProxy works in tunnel mode and
4394 only inspects the first request of a connection, meaning that only the first
4395 request will have the header appended, which is certainly not what you want.
4396 In order to fix this, ensure that any of the "httpclose", "forceclose" or
4397 "http-server-close" options is set when using this option.
Willy Tarreau55165fe2009-05-10 12:02:55 +02004398
4399 Examples :
4400 # Original Destination address
4401 frontend www
4402 mode http
4403 option originalto except 127.0.0.1
4404
4405 # Those servers want the IP Address in X-Client-Dst
4406 backend www
4407 mode http
4408 option originalto header X-Client-Dst
4409
Willy Tarreau87cf5142011-08-19 22:57:24 +02004410 See also : "option httpclose", "option http-server-close",
4411 "option forceclose"
Willy Tarreau55165fe2009-05-10 12:02:55 +02004412
4413
Willy Tarreaua453bdd2008-01-08 19:50:52 +01004414option persist
4415no option persist
4416 Enable or disable forced persistence on down servers
4417 May be used in sections: defaults | frontend | listen | backend
4418 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01004419 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01004420
4421 When an HTTP request reaches a backend with a cookie which references a dead
4422 server, by default it is redispatched to another server. It is possible to
4423 force the request to be sent to the dead server first using "option persist"
4424 if absolutely needed. A common use case is when servers are under extreme
4425 load and spend their time flapping. In this case, the users would still be
4426 directed to the server they opened the session on, in the hope they would be
4427 correctly served. It is recommended to use "option redispatch" in conjunction
4428 with this option so that in the event it would not be possible to connect to
4429 the server at all (server definitely dead), the client would finally be
4430 redirected to another valid server.
4431
4432 If this option has been enabled in a "defaults" section, it can be disabled
4433 in a specific instance by prepending the "no" keyword before it.
4434
Willy Tarreau4de91492010-01-22 19:10:05 +01004435 See also : "option redispatch", "retries", "force-persist"
Willy Tarreaua453bdd2008-01-08 19:50:52 +01004436
4437
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01004438option redispatch
4439no option redispatch
4440 Enable or disable session redistribution in case of connection failure
4441 May be used in sections: defaults | frontend | listen | backend
4442 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01004443 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01004444
4445 In HTTP mode, if a server designated by a cookie is down, clients may
4446 definitely stick to it because they cannot flush the cookie, so they will not
4447 be able to access the service anymore.
4448
4449 Specifying "option redispatch" will allow the proxy to break their
4450 persistence and redistribute them to a working server.
4451
4452 It also allows to retry last connection to another server in case of multiple
4453 connection failures. Of course, it requires having "retries" set to a nonzero
4454 value.
Willy Tarreaud72758d2010-01-12 10:42:19 +01004455
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01004456 This form is the preferred form, which replaces both the "redispatch" and
4457 "redisp" keywords.
4458
4459 If this option has been enabled in a "defaults" section, it can be disabled
4460 in a specific instance by prepending the "no" keyword before it.
4461
Willy Tarreau4de91492010-01-22 19:10:05 +01004462 See also : "redispatch", "retries", "force-persist"
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01004463
Willy Tarreaua453bdd2008-01-08 19:50:52 +01004464
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02004465option redis-check
4466 Use redis health checks for server testing
4467 May be used in sections : defaults | frontend | listen | backend
4468 yes | no | yes | yes
4469 Arguments : none
4470
4471 It is possible to test that the server correctly talks REDIS protocol instead
4472 of just testing that it accepts the TCP connection. When this option is set,
4473 a PING redis command is sent to the server, and the response is analyzed to
4474 find the "+PONG" response message.
4475
4476 Example :
4477 option redis-check
4478
4479 See also : "option httpchk"
4480
4481
Willy Tarreaua453bdd2008-01-08 19:50:52 +01004482option smtpchk
4483option smtpchk <hello> <domain>
4484 Use SMTP health checks for server testing
4485 May be used in sections : defaults | frontend | listen | backend
4486 yes | no | yes | yes
Willy Tarreaud72758d2010-01-12 10:42:19 +01004487 Arguments :
Willy Tarreaua453bdd2008-01-08 19:50:52 +01004488 <hello> is an optional argument. It is the "hello" command to use. It can
4489 be either "HELO" (for SMTP) or "EHLO" (for ESTMP). All other
4490 values will be turned into the default command ("HELO").
4491
4492 <domain> is the domain name to present to the server. It may only be
4493 specified (and is mandatory) if the hello command has been
4494 specified. By default, "localhost" is used.
4495
4496 When "option smtpchk" is set, the health checks will consist in TCP
4497 connections followed by an SMTP command. By default, this command is
4498 "HELO localhost". The server's return code is analyzed and only return codes
4499 starting with a "2" will be considered as valid. All other responses,
4500 including a lack of response will constitute an error and will indicate a
4501 dead server.
4502
4503 This test is meant to be used with SMTP servers or relays. Depending on the
4504 request, it is possible that some servers do not log each connection attempt,
4505 so you may want to experiment to improve the behaviour. Using telnet on port
4506 25 is often easier than adjusting the configuration.
4507
4508 Most often, an incoming SMTP server needs to see the client's IP address for
4509 various purposes, including spam filtering, anti-spoofing and logging. When
4510 possible, it is often wise to masquerade the client's IP address when
4511 connecting to the server using the "usesrc" argument of the "source" keyword,
4512 which requires the cttproxy feature to be compiled in.
4513
4514 Example :
4515 option smtpchk HELO mydomain.org
4516
4517 See also : "option httpchk", "source"
4518
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01004519
Krzysztof Piotr Oledzkiaeebf9b2009-10-04 15:43:17 +02004520option socket-stats
4521no option socket-stats
4522
4523 Enable or disable collecting & providing separate statistics for each socket.
4524 May be used in sections : defaults | frontend | listen | backend
4525 yes | yes | yes | no
4526
4527 Arguments : none
4528
4529
Willy Tarreauff4f82d2009-02-06 11:28:13 +01004530option splice-auto
4531no option splice-auto
4532 Enable or disable automatic kernel acceleration on sockets in both directions
4533 May be used in sections : defaults | frontend | listen | backend
4534 yes | yes | yes | yes
4535 Arguments : none
4536
4537 When this option is enabled either on a frontend or on a backend, haproxy
4538 will automatically evaluate the opportunity to use kernel tcp splicing to
4539 forward data between the client and the server, in either direction. Haproxy
4540 uses heuristics to estimate if kernel splicing might improve performance or
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01004541 not. Both directions are handled independently. Note that the heuristics used
Willy Tarreauff4f82d2009-02-06 11:28:13 +01004542 are not much aggressive in order to limit excessive use of splicing. This
4543 option requires splicing to be enabled at compile time, and may be globally
4544 disabled with the global option "nosplice". Since splice uses pipes, using it
4545 requires that there are enough spare pipes.
4546
4547 Important note: kernel-based TCP splicing is a Linux-specific feature which
4548 first appeared in kernel 2.6.25. It offers kernel-based acceleration to
4549 transfer data between sockets without copying these data to user-space, thus
4550 providing noticeable performance gains and CPU cycles savings. Since many
4551 early implementations are buggy, corrupt data and/or are inefficient, this
4552 feature is not enabled by default, and it should be used with extreme care.
4553 While it is not possible to detect the correctness of an implementation,
4554 2.6.29 is the first version offering a properly working implementation. In
4555 case of doubt, splicing may be globally disabled using the global "nosplice"
4556 keyword.
4557
4558 Example :
4559 option splice-auto
4560
4561 If this option has been enabled in a "defaults" section, it can be disabled
4562 in a specific instance by prepending the "no" keyword before it.
4563
4564 See also : "option splice-request", "option splice-response", and global
4565 options "nosplice" and "maxpipes"
4566
4567
4568option splice-request
4569no option splice-request
4570 Enable or disable automatic kernel acceleration on sockets for requests
4571 May be used in sections : defaults | frontend | listen | backend
4572 yes | yes | yes | yes
4573 Arguments : none
4574
4575 When this option is enabled either on a frontend or on a backend, haproxy
Jamie Gloudonaaa21002012-08-25 00:18:33 -04004576 will use kernel tcp splicing whenever possible to forward data going from
Willy Tarreauff4f82d2009-02-06 11:28:13 +01004577 the client to the server. It might still use the recv/send scheme if there
4578 are no spare pipes left. This option requires splicing to be enabled at
4579 compile time, and may be globally disabled with the global option "nosplice".
4580 Since splice uses pipes, using it requires that there are enough spare pipes.
4581
4582 Important note: see "option splice-auto" for usage limitations.
4583
4584 Example :
4585 option splice-request
4586
4587 If this option has been enabled in a "defaults" section, it can be disabled
4588 in a specific instance by prepending the "no" keyword before it.
4589
4590 See also : "option splice-auto", "option splice-response", and global options
4591 "nosplice" and "maxpipes"
4592
4593
4594option splice-response
4595no option splice-response
4596 Enable or disable automatic kernel acceleration on sockets for responses
4597 May be used in sections : defaults | frontend | listen | backend
4598 yes | yes | yes | yes
4599 Arguments : none
4600
4601 When this option is enabled either on a frontend or on a backend, haproxy
Jamie Gloudonaaa21002012-08-25 00:18:33 -04004602 will use kernel tcp splicing whenever possible to forward data going from
Willy Tarreauff4f82d2009-02-06 11:28:13 +01004603 the server to the client. It might still use the recv/send scheme if there
4604 are no spare pipes left. This option requires splicing to be enabled at
4605 compile time, and may be globally disabled with the global option "nosplice".
4606 Since splice uses pipes, using it requires that there are enough spare pipes.
4607
4608 Important note: see "option splice-auto" for usage limitations.
4609
4610 Example :
4611 option splice-response
4612
4613 If this option has been enabled in a "defaults" section, it can be disabled
4614 in a specific instance by prepending the "no" keyword before it.
4615
4616 See also : "option splice-auto", "option splice-request", and global options
4617 "nosplice" and "maxpipes"
4618
4619
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004620option srvtcpka
4621no option srvtcpka
4622 Enable or disable the sending of TCP keepalive packets on the server side
4623 May be used in sections : defaults | frontend | listen | backend
4624 yes | no | yes | yes
4625 Arguments : none
4626
4627 When there is a firewall or any session-aware component between a client and
4628 a server, and when the protocol involves very long sessions with long idle
4629 periods (eg: remote desktops), there is a risk that one of the intermediate
4630 components decides to expire a session which has remained idle for too long.
4631
4632 Enabling socket-level TCP keep-alives makes the system regularly send packets
4633 to the other end of the connection, leaving it active. The delay between
4634 keep-alive probes is controlled by the system only and depends both on the
4635 operating system and its tuning parameters.
4636
4637 It is important to understand that keep-alive packets are neither emitted nor
4638 received at the application level. It is only the network stacks which sees
4639 them. For this reason, even if one side of the proxy already uses keep-alives
4640 to maintain its connection alive, those keep-alive packets will not be
4641 forwarded to the other side of the proxy.
4642
4643 Please note that this has nothing to do with HTTP keep-alive.
4644
4645 Using option "srvtcpka" enables the emission of TCP keep-alive probes on the
4646 server side of a connection, which should help when session expirations are
4647 noticed between HAProxy and a server.
4648
4649 If this option has been enabled in a "defaults" section, it can be disabled
4650 in a specific instance by prepending the "no" keyword before it.
4651
4652 See also : "option clitcpka", "option tcpka"
4653
4654
Willy Tarreaua453bdd2008-01-08 19:50:52 +01004655option ssl-hello-chk
4656 Use SSLv3 client hello health checks for server testing
4657 May be used in sections : defaults | frontend | listen | backend
4658 yes | no | yes | yes
4659 Arguments : none
4660
4661 When some SSL-based protocols are relayed in TCP mode through HAProxy, it is
4662 possible to test that the server correctly talks SSL instead of just testing
4663 that it accepts the TCP connection. When "option ssl-hello-chk" is set, pure
4664 SSLv3 client hello messages are sent once the connection is established to
4665 the server, and the response is analyzed to find an SSL server hello message.
4666 The server is considered valid only when the response contains this server
4667 hello message.
4668
4669 All servers tested till there correctly reply to SSLv3 client hello messages,
4670 and most servers tested do not even log the requests containing only hello
4671 messages, which is appreciable.
4672
Willy Tarreau763a95b2012-10-04 23:15:39 +02004673 Note that this check works even when SSL support was not built into haproxy
4674 because it forges the SSL message. When SSL support is available, it is best
4675 to use native SSL health checks instead of this one.
Willy Tarreaua453bdd2008-01-08 19:50:52 +01004676
Willy Tarreau763a95b2012-10-04 23:15:39 +02004677 See also: "option httpchk", "check-ssl"
4678
Willy Tarreaua453bdd2008-01-08 19:50:52 +01004679
Willy Tarreau9ea05a72009-06-14 12:07:01 +02004680option tcp-smart-accept
4681no option tcp-smart-accept
4682 Enable or disable the saving of one ACK packet during the accept sequence
4683 May be used in sections : defaults | frontend | listen | backend
4684 yes | yes | yes | no
4685 Arguments : none
4686
4687 When an HTTP connection request comes in, the system acknowledges it on
4688 behalf of HAProxy, then the client immediately sends its request, and the
4689 system acknowledges it too while it is notifying HAProxy about the new
4690 connection. HAProxy then reads the request and responds. This means that we
4691 have one TCP ACK sent by the system for nothing, because the request could
4692 very well be acknowledged by HAProxy when it sends its response.
4693
4694 For this reason, in HTTP mode, HAProxy automatically asks the system to avoid
4695 sending this useless ACK on platforms which support it (currently at least
4696 Linux). It must not cause any problem, because the system will send it anyway
4697 after 40 ms if the response takes more time than expected to come.
4698
4699 During complex network debugging sessions, it may be desirable to disable
4700 this optimization because delayed ACKs can make troubleshooting more complex
4701 when trying to identify where packets are delayed. It is then possible to
4702 fall back to normal behaviour by specifying "no option tcp-smart-accept".
4703
4704 It is also possible to force it for non-HTTP proxies by simply specifying
4705 "option tcp-smart-accept". For instance, it can make sense with some services
4706 such as SMTP where the server speaks first.
4707
4708 It is recommended to avoid forcing this option in a defaults section. In case
4709 of doubt, consider setting it back to automatic values by prepending the
4710 "default" keyword before it, or disabling it using the "no" keyword.
4711
Willy Tarreaud88edf22009-06-14 15:48:17 +02004712 See also : "option tcp-smart-connect"
4713
4714
4715option tcp-smart-connect
4716no option tcp-smart-connect
4717 Enable or disable the saving of one ACK packet during the connect sequence
4718 May be used in sections : defaults | frontend | listen | backend
4719 yes | no | yes | yes
4720 Arguments : none
4721
4722 On certain systems (at least Linux), HAProxy can ask the kernel not to
4723 immediately send an empty ACK upon a connection request, but to directly
4724 send the buffer request instead. This saves one packet on the network and
4725 thus boosts performance. It can also be useful for some servers, because they
4726 immediately get the request along with the incoming connection.
4727
4728 This feature is enabled when "option tcp-smart-connect" is set in a backend.
4729 It is not enabled by default because it makes network troubleshooting more
4730 complex.
4731
4732 It only makes sense to enable it with protocols where the client speaks first
4733 such as HTTP. In other situations, if there is no data to send in place of
4734 the ACK, a normal ACK is sent.
4735
4736 If this option has been enabled in a "defaults" section, it can be disabled
4737 in a specific instance by prepending the "no" keyword before it.
4738
4739 See also : "option tcp-smart-accept"
4740
Willy Tarreau9ea05a72009-06-14 12:07:01 +02004741
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004742option tcpka
4743 Enable or disable the sending of TCP keepalive packets on both sides
4744 May be used in sections : defaults | frontend | listen | backend
4745 yes | yes | yes | yes
4746 Arguments : none
4747
4748 When there is a firewall or any session-aware component between a client and
4749 a server, and when the protocol involves very long sessions with long idle
4750 periods (eg: remote desktops), there is a risk that one of the intermediate
4751 components decides to expire a session which has remained idle for too long.
4752
4753 Enabling socket-level TCP keep-alives makes the system regularly send packets
4754 to the other end of the connection, leaving it active. The delay between
4755 keep-alive probes is controlled by the system only and depends both on the
4756 operating system and its tuning parameters.
4757
4758 It is important to understand that keep-alive packets are neither emitted nor
4759 received at the application level. It is only the network stacks which sees
4760 them. For this reason, even if one side of the proxy already uses keep-alives
4761 to maintain its connection alive, those keep-alive packets will not be
4762 forwarded to the other side of the proxy.
4763
4764 Please note that this has nothing to do with HTTP keep-alive.
4765
4766 Using option "tcpka" enables the emission of TCP keep-alive probes on both
4767 the client and server sides of a connection. Note that this is meaningful
4768 only in "defaults" or "listen" sections. If this option is used in a
4769 frontend, only the client side will get keep-alives, and if this option is
4770 used in a backend, only the server side will get keep-alives. For this
4771 reason, it is strongly recommended to explicitly use "option clitcpka" and
4772 "option srvtcpka" when the configuration is split between frontends and
4773 backends.
4774
4775 See also : "option clitcpka", "option srvtcpka"
4776
Willy Tarreau844e3c52008-01-11 16:28:18 +01004777
4778option tcplog
4779 Enable advanced logging of TCP connections with session state and timers
4780 May be used in sections : defaults | frontend | listen | backend
4781 yes | yes | yes | yes
4782 Arguments : none
4783
4784 By default, the log output format is very poor, as it only contains the
4785 source and destination addresses, and the instance name. By specifying
4786 "option tcplog", each log line turns into a much richer format including, but
4787 not limited to, the connection timers, the session status, the connections
4788 numbers, the frontend, backend and server name, and of course the source
4789 address and ports. This option is useful for pure TCP proxies in order to
4790 find which of the client or server disconnects or times out. For normal HTTP
4791 proxies, it's better to use "option httplog" which is even more complete.
4792
4793 This option may be set either in the frontend or the backend.
4794
Willy Tarreauc57f0e22009-05-10 13:12:33 +02004795 See also : "option httplog", and section 8 about logging.
Willy Tarreau844e3c52008-01-11 16:28:18 +01004796
4797
Willy Tarreau844e3c52008-01-11 16:28:18 +01004798option transparent
4799no option transparent
4800 Enable client-side transparent proxying
4801 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +01004802 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +01004803 Arguments : none
4804
4805 This option was introduced in order to provide layer 7 persistence to layer 3
4806 load balancers. The idea is to use the OS's ability to redirect an incoming
4807 connection for a remote address to a local process (here HAProxy), and let
4808 this process know what address was initially requested. When this option is
4809 used, sessions without cookies will be forwarded to the original destination
4810 IP address of the incoming request (which should match that of another
4811 equipment), while requests with cookies will still be forwarded to the
4812 appropriate server.
4813
4814 Note that contrary to a common belief, this option does NOT make HAProxy
4815 present the client's IP to the server when establishing the connection.
4816
Willy Tarreaua1146052011-03-01 09:51:54 +01004817 See also: the "usesrc" argument of the "source" keyword, and the
Willy Tarreaueabeafa2008-01-16 16:17:06 +01004818 "transparent" option of the "bind" keyword.
Willy Tarreau844e3c52008-01-11 16:28:18 +01004819
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004820
Emeric Brun647caf12009-06-30 17:57:00 +02004821persist rdp-cookie
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02004822persist rdp-cookie(<name>)
Emeric Brun647caf12009-06-30 17:57:00 +02004823 Enable RDP cookie-based persistence
4824 May be used in sections : defaults | frontend | listen | backend
4825 yes | no | yes | yes
4826 Arguments :
4827 <name> is the optional name of the RDP cookie to check. If omitted, the
Willy Tarreau61e28f22010-05-16 22:31:05 +02004828 default cookie name "msts" will be used. There currently is no
4829 valid reason to change this name.
Emeric Brun647caf12009-06-30 17:57:00 +02004830
4831 This statement enables persistence based on an RDP cookie. The RDP cookie
4832 contains all information required to find the server in the list of known
4833 servers. So when this option is set in the backend, the request is analysed
4834 and if an RDP cookie is found, it is decoded. If it matches a known server
4835 which is still UP (or if "option persist" is set), then the connection is
4836 forwarded to this server.
4837
4838 Note that this only makes sense in a TCP backend, but for this to work, the
4839 frontend must have waited long enough to ensure that an RDP cookie is present
4840 in the request buffer. This is the same requirement as with the "rdp-cookie"
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01004841 load-balancing method. Thus it is highly recommended to put all statements in
Emeric Brun647caf12009-06-30 17:57:00 +02004842 a single "listen" section.
4843
Willy Tarreau61e28f22010-05-16 22:31:05 +02004844 Also, it is important to understand that the terminal server will emit this
4845 RDP cookie only if it is configured for "token redirection mode", which means
4846 that the "IP address redirection" option is disabled.
4847
Emeric Brun647caf12009-06-30 17:57:00 +02004848 Example :
4849 listen tse-farm
4850 bind :3389
4851 # wait up to 5s for an RDP cookie in the request
4852 tcp-request inspect-delay 5s
4853 tcp-request content accept if RDP_COOKIE
4854 # apply RDP cookie persistence
4855 persist rdp-cookie
4856 # if server is unknown, let's balance on the same cookie.
Cyril Bontédc4d9032012-04-08 21:57:39 +02004857 # alternatively, "balance leastconn" may be useful too.
Emeric Brun647caf12009-06-30 17:57:00 +02004858 balance rdp-cookie
4859 server srv1 1.1.1.1:3389
4860 server srv2 1.1.1.2:3389
4861
Simon Hormanab814e02011-06-24 14:50:20 +09004862 See also : "balance rdp-cookie", "tcp-request", the "req_rdp_cookie" ACL and
4863 the rdp_cookie pattern fetch function.
Emeric Brun647caf12009-06-30 17:57:00 +02004864
4865
Willy Tarreau3a7d2072009-03-05 23:48:25 +01004866rate-limit sessions <rate>
4867 Set a limit on the number of new sessions accepted per second on a frontend
4868 May be used in sections : defaults | frontend | listen | backend
4869 yes | yes | yes | no
4870 Arguments :
4871 <rate> The <rate> parameter is an integer designating the maximum number
4872 of new sessions per second to accept on the frontend.
4873
4874 When the frontend reaches the specified number of new sessions per second, it
4875 stops accepting new connections until the rate drops below the limit again.
4876 During this time, the pending sessions will be kept in the socket's backlog
4877 (in system buffers) and haproxy will not even be aware that sessions are
4878 pending. When applying very low limit on a highly loaded service, it may make
4879 sense to increase the socket's backlog using the "backlog" keyword.
4880
4881 This feature is particularly efficient at blocking connection-based attacks
4882 or service abuse on fragile servers. Since the session rate is measured every
4883 millisecond, it is extremely accurate. Also, the limit applies immediately,
4884 no delay is needed at all to detect the threshold.
4885
4886 Example : limit the connection rate on SMTP to 10 per second max
4887 listen smtp
4888 mode tcp
4889 bind :25
4890 rate-limit sessions 10
4891 server 127.0.0.1:1025
4892
Willy Tarreaua17c2d92011-07-25 08:16:20 +02004893 Note : when the maximum rate is reached, the frontend's status is not changed
4894 but its sockets appear as "WAITING" in the statistics if the
4895 "socket-stats" option is enabled.
Willy Tarreau3a7d2072009-03-05 23:48:25 +01004896
4897 See also : the "backlog" keyword and the "fe_sess_rate" ACL criterion.
4898
4899
Willy Tarreau2e1dca82012-09-12 08:43:15 +02004900redirect location <loc> [code <code>] <option> [{if | unless} <condition>]
4901redirect prefix <pfx> [code <code>] <option> [{if | unless} <condition>]
4902redirect scheme <sch> [code <code>] <option> [{if | unless} <condition>]
Willy Tarreaub463dfb2008-06-07 23:08:56 +02004903 Return an HTTP redirection if/unless a condition is matched
4904 May be used in sections : defaults | frontend | listen | backend
4905 no | yes | yes | yes
4906
4907 If/unless the condition is matched, the HTTP request will lead to a redirect
Willy Tarreauf285f542010-01-03 20:03:03 +01004908 response. If no condition is specified, the redirect applies unconditionally.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02004909
Willy Tarreau0140f252008-11-19 21:07:09 +01004910 Arguments :
Willy Tarreau2e1dca82012-09-12 08:43:15 +02004911 <loc> With "redirect location", the exact value in <loc> is placed into
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01004912 the HTTP "Location" header. When used in an "http-request" rule,
4913 <loc> value follows the log-format rules and can include some
4914 dynamic values (see Custom Log Format in section 8.2.4).
Willy Tarreau2e1dca82012-09-12 08:43:15 +02004915
4916 <pfx> With "redirect prefix", the "Location" header is built from the
4917 concatenation of <pfx> and the complete URI path, including the
4918 query string, unless the "drop-query" option is specified (see
4919 below). As a special case, if <pfx> equals exactly "/", then
4920 nothing is inserted before the original URI. It allows one to
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01004921 redirect to the same URL (for instance, to insert a cookie). When
4922 used in an "http-request" rule, <pfx> value follows the log-format
4923 rules and can include some dynamic values (see Custom Log Format
4924 in section 8.2.4).
Willy Tarreau2e1dca82012-09-12 08:43:15 +02004925
4926 <sch> With "redirect scheme", then the "Location" header is built by
4927 concatenating <sch> with "://" then the first occurrence of the
4928 "Host" header, and then the URI path, including the query string
4929 unless the "drop-query" option is specified (see below). If no
4930 path is found or if the path is "*", then "/" is used instead. If
4931 no "Host" header is found, then an empty host component will be
4932 returned, which most recent browsers interprete as redirecting to
4933 the same host. This directive is mostly used to redirect HTTP to
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01004934 HTTPS. When used in an "http-request" rule, <sch> value follows
4935 the log-format rules and can include some dynamic values (see
4936 Custom Log Format in section 8.2.4).
Willy Tarreau0140f252008-11-19 21:07:09 +01004937
4938 <code> The code is optional. It indicates which type of HTTP redirection
Willy Tarreaub67fdc42013-03-29 19:28:11 +01004939 is desired. Only codes 301, 302, 303, 307 and 308 are supported,
4940 with 302 used by default if no code is specified. 301 means
4941 "Moved permanently", and a browser may cache the Location. 302
4942 means "Moved permanently" and means that the browser should not
4943 cache the redirection. 303 is equivalent to 302 except that the
4944 browser will fetch the location with a GET method. 307 is just
4945 like 302 but makes it clear that the same method must be reused.
4946 Likewise, 308 replaces 301 if the same method must be used.
Willy Tarreau0140f252008-11-19 21:07:09 +01004947
4948 <option> There are several options which can be specified to adjust the
4949 expected behaviour of a redirection :
4950
4951 - "drop-query"
4952 When this keyword is used in a prefix-based redirection, then the
4953 location will be set without any possible query-string, which is useful
4954 for directing users to a non-secure page for instance. It has no effect
4955 with a location-type redirect.
4956
Willy Tarreau81e3b4f2010-01-10 00:42:19 +01004957 - "append-slash"
4958 This keyword may be used in conjunction with "drop-query" to redirect
4959 users who use a URL not ending with a '/' to the same one with the '/'.
4960 It can be useful to ensure that search engines will only see one URL.
4961 For this, a return code 301 is preferred.
4962
Willy Tarreau0140f252008-11-19 21:07:09 +01004963 - "set-cookie NAME[=value]"
4964 A "Set-Cookie" header will be added with NAME (and optionally "=value")
4965 to the response. This is sometimes used to indicate that a user has
4966 been seen, for instance to protect against some types of DoS. No other
4967 cookie option is added, so the cookie will be a session cookie. Note
4968 that for a browser, a sole cookie name without an equal sign is
4969 different from a cookie with an equal sign.
4970
4971 - "clear-cookie NAME[=]"
4972 A "Set-Cookie" header will be added with NAME (and optionally "="), but
4973 with the "Max-Age" attribute set to zero. This will tell the browser to
4974 delete this cookie. It is useful for instance on logout pages. It is
4975 important to note that clearing the cookie "NAME" will not remove a
4976 cookie set with "NAME=value". You have to clear the cookie "NAME=" for
4977 that, because the browser makes the difference.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02004978
4979 Example: move the login URL only to HTTPS.
4980 acl clear dst_port 80
4981 acl secure dst_port 8080
4982 acl login_page url_beg /login
Willy Tarreau0140f252008-11-19 21:07:09 +01004983 acl logout url_beg /logout
Willy Tarreau79da4692008-11-19 20:03:04 +01004984 acl uid_given url_reg /login?userid=[^&]+
Willy Tarreau0140f252008-11-19 21:07:09 +01004985 acl cookie_set hdr_sub(cookie) SEEN=1
4986
4987 redirect prefix https://mysite.com set-cookie SEEN=1 if !cookie_set
Willy Tarreau79da4692008-11-19 20:03:04 +01004988 redirect prefix https://mysite.com if login_page !secure
4989 redirect prefix http://mysite.com drop-query if login_page !uid_given
4990 redirect location http://mysite.com/ if !login_page secure
Willy Tarreau0140f252008-11-19 21:07:09 +01004991 redirect location / clear-cookie USERID= if logout
Willy Tarreaub463dfb2008-06-07 23:08:56 +02004992
Willy Tarreau81e3b4f2010-01-10 00:42:19 +01004993 Example: send redirects for request for articles without a '/'.
4994 acl missing_slash path_reg ^/article/[^/]*$
4995 redirect code 301 prefix / drop-query append-slash if missing_slash
4996
Willy Tarreau2e1dca82012-09-12 08:43:15 +02004997 Example: redirect all HTTP traffic to HTTPS when SSL is handled by haproxy.
David BERARDe7153042012-11-03 00:11:31 +01004998 redirect scheme https if !{ ssl_fc }
Willy Tarreau2e1dca82012-09-12 08:43:15 +02004999
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01005000 Example: append 'www.' prefix in front of all hosts not having it
5001 http-request redirect code 301 location www.%[hdr(host)]%[req.uri] \
5002 unless { hdr_beg(host) -i www }
5003
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005004 See section 7 about ACL usage.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02005005
5006
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01005007redisp (deprecated)
5008redispatch (deprecated)
5009 Enable or disable session redistribution in case of connection failure
5010 May be used in sections: defaults | frontend | listen | backend
5011 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005012 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01005013
5014 In HTTP mode, if a server designated by a cookie is down, clients may
5015 definitely stick to it because they cannot flush the cookie, so they will not
5016 be able to access the service anymore.
5017
5018 Specifying "redispatch" will allow the proxy to break their persistence and
5019 redistribute them to a working server.
5020
5021 It also allows to retry last connection to another server in case of multiple
5022 connection failures. Of course, it requires having "retries" set to a nonzero
5023 value.
Willy Tarreaud72758d2010-01-12 10:42:19 +01005024
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01005025 This form is deprecated, do not use it in any new configuration, use the new
5026 "option redispatch" instead.
5027
5028 See also : "option redispatch"
5029
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005030
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01005031reqadd <string> [{if | unless} <cond>]
Willy Tarreau303c0352008-01-17 19:01:39 +01005032 Add a header at the end of the HTTP request
5033 May be used in sections : defaults | frontend | listen | backend
5034 no | yes | yes | yes
5035 Arguments :
5036 <string> is the complete line to be added. Any space or known delimiter
5037 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005038 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01005039
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01005040 <cond> is an optional matching condition built from ACLs. It makes it
5041 possible to ignore this rule when other conditions are not met.
5042
Willy Tarreau303c0352008-01-17 19:01:39 +01005043 A new line consisting in <string> followed by a line feed will be added after
5044 the last header of an HTTP request.
5045
5046 Header transformations only apply to traffic which passes through HAProxy,
5047 and not to traffic generated by HAProxy, such as health-checks or error
5048 responses.
5049
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01005050 Example : add "X-Proto: SSL" to requests coming via port 81
5051 acl is-ssl dst_port 81
5052 reqadd X-Proto:\ SSL if is-ssl
5053
5054 See also: "rspadd", section 6 about HTTP header manipulation, and section 7
5055 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01005056
5057
Willy Tarreau5321c422010-01-28 20:35:13 +01005058reqallow <search> [{if | unless} <cond>]
5059reqiallow <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01005060 Definitely allow an HTTP request if a line matches a regular expression
5061 May be used in sections : defaults | frontend | listen | backend
5062 no | yes | yes | yes
5063 Arguments :
5064 <search> is the regular expression applied to HTTP headers and to the
5065 request line. This is an extended regular expression. Parenthesis
5066 grouping is supported and no preliminary backslash is required.
5067 Any space or known delimiter must be escaped using a backslash
5068 ('\'). The pattern applies to a full line at a time. The
5069 "reqallow" keyword strictly matches case while "reqiallow"
5070 ignores case.
5071
Willy Tarreau5321c422010-01-28 20:35:13 +01005072 <cond> is an optional matching condition built from ACLs. It makes it
5073 possible to ignore this rule when other conditions are not met.
5074
Willy Tarreau303c0352008-01-17 19:01:39 +01005075 A request containing any line which matches extended regular expression
5076 <search> will mark the request as allowed, even if any later test would
5077 result in a deny. The test applies both to the request line and to request
5078 headers. Keep in mind that URLs in request line are case-sensitive while
Willy Tarreaud72758d2010-01-12 10:42:19 +01005079 header names are not.
Willy Tarreau303c0352008-01-17 19:01:39 +01005080
5081 It is easier, faster and more powerful to use ACLs to write access policies.
5082 Reqdeny, reqallow and reqpass should be avoided in new designs.
5083
5084 Example :
5085 # allow www.* but refuse *.local
5086 reqiallow ^Host:\ www\.
5087 reqideny ^Host:\ .*\.local
5088
Willy Tarreau5321c422010-01-28 20:35:13 +01005089 See also: "reqdeny", "block", section 6 about HTTP header manipulation, and
5090 section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01005091
5092
Willy Tarreau5321c422010-01-28 20:35:13 +01005093reqdel <search> [{if | unless} <cond>]
5094reqidel <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01005095 Delete all headers matching a regular expression in an HTTP request
5096 May be used in sections : defaults | frontend | listen | backend
5097 no | yes | yes | yes
5098 Arguments :
5099 <search> is the regular expression applied to HTTP headers and to the
5100 request line. This is an extended regular expression. Parenthesis
5101 grouping is supported and no preliminary backslash is required.
5102 Any space or known delimiter must be escaped using a backslash
5103 ('\'). The pattern applies to a full line at a time. The "reqdel"
5104 keyword strictly matches case while "reqidel" ignores case.
5105
Willy Tarreau5321c422010-01-28 20:35:13 +01005106 <cond> is an optional matching condition built from ACLs. It makes it
5107 possible to ignore this rule when other conditions are not met.
5108
Willy Tarreau303c0352008-01-17 19:01:39 +01005109 Any header line matching extended regular expression <search> in the request
5110 will be completely deleted. Most common use of this is to remove unwanted
5111 and/or dangerous headers or cookies from a request before passing it to the
5112 next servers.
5113
5114 Header transformations only apply to traffic which passes through HAProxy,
5115 and not to traffic generated by HAProxy, such as health-checks or error
5116 responses. Keep in mind that header names are not case-sensitive.
5117
5118 Example :
5119 # remove X-Forwarded-For header and SERVER cookie
5120 reqidel ^X-Forwarded-For:.*
5121 reqidel ^Cookie:.*SERVER=
5122
Willy Tarreau5321c422010-01-28 20:35:13 +01005123 See also: "reqadd", "reqrep", "rspdel", section 6 about HTTP header
5124 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01005125
5126
Willy Tarreau5321c422010-01-28 20:35:13 +01005127reqdeny <search> [{if | unless} <cond>]
5128reqideny <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01005129 Deny an HTTP request if a line matches a regular expression
5130 May be used in sections : defaults | frontend | listen | backend
5131 no | yes | yes | yes
5132 Arguments :
5133 <search> is the regular expression applied to HTTP headers and to the
5134 request line. This is an extended regular expression. Parenthesis
5135 grouping is supported and no preliminary backslash is required.
5136 Any space or known delimiter must be escaped using a backslash
5137 ('\'). The pattern applies to a full line at a time. The
5138 "reqdeny" keyword strictly matches case while "reqideny" ignores
5139 case.
5140
Willy Tarreau5321c422010-01-28 20:35:13 +01005141 <cond> is an optional matching condition built from ACLs. It makes it
5142 possible to ignore this rule when other conditions are not met.
5143
Willy Tarreau303c0352008-01-17 19:01:39 +01005144 A request containing any line which matches extended regular expression
5145 <search> will mark the request as denied, even if any later test would
5146 result in an allow. The test applies both to the request line and to request
5147 headers. Keep in mind that URLs in request line are case-sensitive while
Willy Tarreaud72758d2010-01-12 10:42:19 +01005148 header names are not.
Willy Tarreau303c0352008-01-17 19:01:39 +01005149
Willy Tarreauced27012008-01-17 20:35:34 +01005150 A denied request will generate an "HTTP 403 forbidden" response once the
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01005151 complete request has been parsed. This is consistent with what is practiced
Willy Tarreaud72758d2010-01-12 10:42:19 +01005152 using ACLs.
Willy Tarreauced27012008-01-17 20:35:34 +01005153
Willy Tarreau303c0352008-01-17 19:01:39 +01005154 It is easier, faster and more powerful to use ACLs to write access policies.
5155 Reqdeny, reqallow and reqpass should be avoided in new designs.
5156
5157 Example :
5158 # refuse *.local, then allow www.*
5159 reqideny ^Host:\ .*\.local
5160 reqiallow ^Host:\ www\.
5161
Willy Tarreau5321c422010-01-28 20:35:13 +01005162 See also: "reqallow", "rspdeny", "block", section 6 about HTTP header
5163 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01005164
5165
Willy Tarreau5321c422010-01-28 20:35:13 +01005166reqpass <search> [{if | unless} <cond>]
5167reqipass <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01005168 Ignore any HTTP request line matching a regular expression in next rules
5169 May be used in sections : defaults | frontend | listen | backend
5170 no | yes | yes | yes
5171 Arguments :
5172 <search> is the regular expression applied to HTTP headers and to the
5173 request line. This is an extended regular expression. Parenthesis
5174 grouping is supported and no preliminary backslash is required.
5175 Any space or known delimiter must be escaped using a backslash
5176 ('\'). The pattern applies to a full line at a time. The
5177 "reqpass" keyword strictly matches case while "reqipass" ignores
5178 case.
5179
Willy Tarreau5321c422010-01-28 20:35:13 +01005180 <cond> is an optional matching condition built from ACLs. It makes it
5181 possible to ignore this rule when other conditions are not met.
5182
Willy Tarreau303c0352008-01-17 19:01:39 +01005183 A request containing any line which matches extended regular expression
5184 <search> will skip next rules, without assigning any deny or allow verdict.
5185 The test applies both to the request line and to request headers. Keep in
5186 mind that URLs in request line are case-sensitive while header names are not.
5187
5188 It is easier, faster and more powerful to use ACLs to write access policies.
5189 Reqdeny, reqallow and reqpass should be avoided in new designs.
5190
5191 Example :
5192 # refuse *.local, then allow www.*, but ignore "www.private.local"
5193 reqipass ^Host:\ www.private\.local
5194 reqideny ^Host:\ .*\.local
5195 reqiallow ^Host:\ www\.
5196
Willy Tarreau5321c422010-01-28 20:35:13 +01005197 See also: "reqallow", "reqdeny", "block", section 6 about HTTP header
5198 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01005199
5200
Willy Tarreau5321c422010-01-28 20:35:13 +01005201reqrep <search> <string> [{if | unless} <cond>]
5202reqirep <search> <string> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01005203 Replace a regular expression with a string in an HTTP request line
5204 May be used in sections : defaults | frontend | listen | backend
5205 no | yes | yes | yes
5206 Arguments :
5207 <search> is the regular expression applied to HTTP headers and to the
5208 request line. This is an extended regular expression. Parenthesis
5209 grouping is supported and no preliminary backslash is required.
5210 Any space or known delimiter must be escaped using a backslash
5211 ('\'). The pattern applies to a full line at a time. The "reqrep"
5212 keyword strictly matches case while "reqirep" ignores case.
5213
5214 <string> is the complete line to be added. Any space or known delimiter
5215 must be escaped using a backslash ('\'). References to matched
5216 pattern groups are possible using the common \N form, with N
5217 being a single digit between 0 and 9. Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005218 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01005219
Willy Tarreau5321c422010-01-28 20:35:13 +01005220 <cond> is an optional matching condition built from ACLs. It makes it
5221 possible to ignore this rule when other conditions are not met.
5222
Willy Tarreau303c0352008-01-17 19:01:39 +01005223 Any line matching extended regular expression <search> in the request (both
5224 the request line and header lines) will be completely replaced with <string>.
5225 Most common use of this is to rewrite URLs or domain names in "Host" headers.
5226
5227 Header transformations only apply to traffic which passes through HAProxy,
5228 and not to traffic generated by HAProxy, such as health-checks or error
5229 responses. Note that for increased readability, it is suggested to add enough
5230 spaces between the request and the response. Keep in mind that URLs in
5231 request line are case-sensitive while header names are not.
5232
5233 Example :
5234 # replace "/static/" with "/" at the beginning of any request path.
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04005235 reqrep ^([^\ :]*)\ /static/(.*) \1\ /\2
Willy Tarreau303c0352008-01-17 19:01:39 +01005236 # replace "www.mydomain.com" with "www" in the host name.
5237 reqirep ^Host:\ www.mydomain.com Host:\ www
5238
Dmitry Sivachenkof6f4f7b2012-10-21 18:10:25 +04005239 See also: "reqadd", "reqdel", "rsprep", "tune.bufsize", section 6 about
5240 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01005241
5242
Willy Tarreau5321c422010-01-28 20:35:13 +01005243reqtarpit <search> [{if | unless} <cond>]
5244reqitarpit <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01005245 Tarpit an HTTP request containing a line matching a regular expression
5246 May be used in sections : defaults | frontend | listen | backend
5247 no | yes | yes | yes
5248 Arguments :
5249 <search> is the regular expression applied to HTTP headers and to the
5250 request line. This is an extended regular expression. Parenthesis
5251 grouping is supported and no preliminary backslash is required.
5252 Any space or known delimiter must be escaped using a backslash
5253 ('\'). The pattern applies to a full line at a time. The
5254 "reqtarpit" keyword strictly matches case while "reqitarpit"
5255 ignores case.
5256
Willy Tarreau5321c422010-01-28 20:35:13 +01005257 <cond> is an optional matching condition built from ACLs. It makes it
5258 possible to ignore this rule when other conditions are not met.
5259
Willy Tarreau303c0352008-01-17 19:01:39 +01005260 A request containing any line which matches extended regular expression
5261 <search> will be tarpitted, which means that it will connect to nowhere, will
Willy Tarreauced27012008-01-17 20:35:34 +01005262 be kept open for a pre-defined time, then will return an HTTP error 500 so
5263 that the attacker does not suspect it has been tarpitted. The status 500 will
5264 be reported in the logs, but the completion flags will indicate "PT". The
Willy Tarreau303c0352008-01-17 19:01:39 +01005265 delay is defined by "timeout tarpit", or "timeout connect" if the former is
5266 not set.
5267
5268 The goal of the tarpit is to slow down robots attacking servers with
5269 identifiable requests. Many robots limit their outgoing number of connections
5270 and stay connected waiting for a reply which can take several minutes to
5271 come. Depending on the environment and attack, it may be particularly
5272 efficient at reducing the load on the network and firewalls.
5273
Willy Tarreau5321c422010-01-28 20:35:13 +01005274 Examples :
Willy Tarreau303c0352008-01-17 19:01:39 +01005275 # ignore user-agents reporting any flavour of "Mozilla" or "MSIE", but
5276 # block all others.
5277 reqipass ^User-Agent:\.*(Mozilla|MSIE)
5278 reqitarpit ^User-Agent:
5279
Willy Tarreau5321c422010-01-28 20:35:13 +01005280 # block bad guys
5281 acl badguys src 10.1.0.3 172.16.13.20/28
5282 reqitarpit . if badguys
5283
5284 See also: "reqallow", "reqdeny", "reqpass", section 6 about HTTP header
5285 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01005286
5287
Willy Tarreaue5c5ce92008-06-20 17:27:19 +02005288retries <value>
5289 Set the number of retries to perform on a server after a connection failure
5290 May be used in sections: defaults | frontend | listen | backend
5291 yes | no | yes | yes
5292 Arguments :
5293 <value> is the number of times a connection attempt should be retried on
5294 a server when a connection either is refused or times out. The
5295 default value is 3.
5296
5297 It is important to understand that this value applies to the number of
5298 connection attempts, not full requests. When a connection has effectively
5299 been established to a server, there will be no more retry.
5300
5301 In order to avoid immediate reconnections to a server which is restarting,
5302 a turn-around timer of 1 second is applied before a retry occurs.
5303
5304 When "option redispatch" is set, the last retry may be performed on another
5305 server even if a cookie references a different server.
5306
5307 See also : "option redispatch"
5308
5309
Willy Tarreaufdb563c2010-01-31 15:43:27 +01005310rspadd <string> [{if | unless} <cond>]
Willy Tarreau303c0352008-01-17 19:01:39 +01005311 Add a header at the end of the HTTP response
5312 May be used in sections : defaults | frontend | listen | backend
5313 no | yes | yes | yes
5314 Arguments :
5315 <string> is the complete line to be added. Any space or known delimiter
5316 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005317 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01005318
Willy Tarreaufdb563c2010-01-31 15:43:27 +01005319 <cond> is an optional matching condition built from ACLs. It makes it
5320 possible to ignore this rule when other conditions are not met.
5321
Willy Tarreau303c0352008-01-17 19:01:39 +01005322 A new line consisting in <string> followed by a line feed will be added after
5323 the last header of an HTTP response.
5324
5325 Header transformations only apply to traffic which passes through HAProxy,
5326 and not to traffic generated by HAProxy, such as health-checks or error
5327 responses.
5328
Willy Tarreaufdb563c2010-01-31 15:43:27 +01005329 See also: "reqadd", section 6 about HTTP header manipulation, and section 7
5330 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01005331
5332
Willy Tarreaufdb563c2010-01-31 15:43:27 +01005333rspdel <search> [{if | unless} <cond>]
5334rspidel <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01005335 Delete all headers matching a regular expression in an HTTP response
5336 May be used in sections : defaults | frontend | listen | backend
5337 no | yes | yes | yes
5338 Arguments :
5339 <search> is the regular expression applied to HTTP headers and to the
5340 response line. This is an extended regular expression, so
5341 parenthesis grouping is supported and no preliminary backslash
5342 is required. Any space or known delimiter must be escaped using
5343 a backslash ('\'). The pattern applies to a full line at a time.
5344 The "rspdel" keyword strictly matches case while "rspidel"
5345 ignores case.
5346
Willy Tarreaufdb563c2010-01-31 15:43:27 +01005347 <cond> is an optional matching condition built from ACLs. It makes it
5348 possible to ignore this rule when other conditions are not met.
5349
Willy Tarreau303c0352008-01-17 19:01:39 +01005350 Any header line matching extended regular expression <search> in the response
5351 will be completely deleted. Most common use of this is to remove unwanted
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02005352 and/or sensitive headers or cookies from a response before passing it to the
Willy Tarreau303c0352008-01-17 19:01:39 +01005353 client.
5354
5355 Header transformations only apply to traffic which passes through HAProxy,
5356 and not to traffic generated by HAProxy, such as health-checks or error
5357 responses. Keep in mind that header names are not case-sensitive.
5358
5359 Example :
5360 # remove the Server header from responses
Willy Tarreau5e80e022013-05-25 08:31:25 +02005361 rspidel ^Server:.*
Willy Tarreau303c0352008-01-17 19:01:39 +01005362
Willy Tarreaufdb563c2010-01-31 15:43:27 +01005363 See also: "rspadd", "rsprep", "reqdel", section 6 about HTTP header
5364 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01005365
5366
Willy Tarreaufdb563c2010-01-31 15:43:27 +01005367rspdeny <search> [{if | unless} <cond>]
5368rspideny <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01005369 Block an HTTP response if a line matches a regular expression
5370 May be used in sections : defaults | frontend | listen | backend
5371 no | yes | yes | yes
5372 Arguments :
5373 <search> is the regular expression applied to HTTP headers and to the
5374 response line. This is an extended regular expression, so
5375 parenthesis grouping is supported and no preliminary backslash
5376 is required. Any space or known delimiter must be escaped using
5377 a backslash ('\'). The pattern applies to a full line at a time.
5378 The "rspdeny" keyword strictly matches case while "rspideny"
5379 ignores case.
5380
Willy Tarreaufdb563c2010-01-31 15:43:27 +01005381 <cond> is an optional matching condition built from ACLs. It makes it
5382 possible to ignore this rule when other conditions are not met.
5383
Willy Tarreau303c0352008-01-17 19:01:39 +01005384 A response containing any line which matches extended regular expression
5385 <search> will mark the request as denied. The test applies both to the
5386 response line and to response headers. Keep in mind that header names are not
5387 case-sensitive.
5388
5389 Main use of this keyword is to prevent sensitive information leak and to
Willy Tarreauced27012008-01-17 20:35:34 +01005390 block the response before it reaches the client. If a response is denied, it
5391 will be replaced with an HTTP 502 error so that the client never retrieves
5392 any sensitive data.
Willy Tarreau303c0352008-01-17 19:01:39 +01005393
5394 It is easier, faster and more powerful to use ACLs to write access policies.
5395 Rspdeny should be avoided in new designs.
5396
5397 Example :
5398 # Ensure that no content type matching ms-word will leak
5399 rspideny ^Content-type:\.*/ms-word
5400
Willy Tarreaufdb563c2010-01-31 15:43:27 +01005401 See also: "reqdeny", "acl", "block", section 6 about HTTP header manipulation
5402 and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01005403
5404
Willy Tarreaufdb563c2010-01-31 15:43:27 +01005405rsprep <search> <string> [{if | unless} <cond>]
5406rspirep <search> <string> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01005407 Replace a regular expression with a string in an HTTP response line
5408 May be used in sections : defaults | frontend | listen | backend
5409 no | yes | yes | yes
5410 Arguments :
5411 <search> is the regular expression applied to HTTP headers and to the
5412 response line. This is an extended regular expression, so
5413 parenthesis grouping is supported and no preliminary backslash
5414 is required. Any space or known delimiter must be escaped using
5415 a backslash ('\'). The pattern applies to a full line at a time.
5416 The "rsprep" keyword strictly matches case while "rspirep"
5417 ignores case.
5418
5419 <string> is the complete line to be added. Any space or known delimiter
5420 must be escaped using a backslash ('\'). References to matched
5421 pattern groups are possible using the common \N form, with N
5422 being a single digit between 0 and 9. Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005423 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01005424
Willy Tarreaufdb563c2010-01-31 15:43:27 +01005425 <cond> is an optional matching condition built from ACLs. It makes it
5426 possible to ignore this rule when other conditions are not met.
5427
Willy Tarreau303c0352008-01-17 19:01:39 +01005428 Any line matching extended regular expression <search> in the response (both
5429 the response line and header lines) will be completely replaced with
5430 <string>. Most common use of this is to rewrite Location headers.
5431
5432 Header transformations only apply to traffic which passes through HAProxy,
5433 and not to traffic generated by HAProxy, such as health-checks or error
5434 responses. Note that for increased readability, it is suggested to add enough
5435 spaces between the request and the response. Keep in mind that header names
5436 are not case-sensitive.
5437
5438 Example :
5439 # replace "Location: 127.0.0.1:8080" with "Location: www.mydomain.com"
5440 rspirep ^Location:\ 127.0.0.1:8080 Location:\ www.mydomain.com
5441
Willy Tarreaufdb563c2010-01-31 15:43:27 +01005442 See also: "rspadd", "rspdel", "reqrep", section 6 about HTTP header
5443 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01005444
5445
David du Colombier486df472011-03-17 10:40:26 +01005446server <name> <address>[:[port]] [param*]
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005447 Declare a server in a backend
5448 May be used in sections : defaults | frontend | listen | backend
5449 no | no | yes | yes
5450 Arguments :
5451 <name> is the internal name assigned to this server. This name will
Cyril Bonté941a0c62012-10-15 19:44:24 +02005452 appear in logs and alerts. If "http-send-name-header" is
Mark Lamourinec2247f02012-01-04 13:02:01 -05005453 set, it will be added to the request header sent to the server.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005454
David du Colombier486df472011-03-17 10:40:26 +01005455 <address> is the IPv4 or IPv6 address of the server. Alternatively, a
5456 resolvable hostname is supported, but this name will be resolved
5457 during start-up. Address "0.0.0.0" or "*" has a special meaning.
5458 It indicates that the connection will be forwarded to the same IP
Willy Tarreaud669a4f2010-07-13 14:49:50 +02005459 address as the one from the client connection. This is useful in
5460 transparent proxy architectures where the client's connection is
5461 intercepted and haproxy must forward to the original destination
5462 address. This is more or less what the "transparent" keyword does
5463 except that with a server it's possible to limit concurrency and
Willy Tarreau24709282013-03-10 21:32:12 +01005464 to report statistics. Optionally, an address family prefix may be
5465 used before the address to force the family regardless of the
5466 address format, which can be useful to specify a path to a unix
5467 socket with no slash ('/'). Currently supported prefixes are :
5468 - 'ipv4@' -> address is always IPv4
5469 - 'ipv6@' -> address is always IPv6
5470 - 'unix@' -> address is a path to a local unix socket
Willy Tarreaudad36a32013-03-11 01:20:04 +01005471 Any part of the address string may reference any number of
5472 environment variables by preceding their name with a dollar
5473 sign ('$') and optionally enclosing them with braces ('{}'),
5474 similarly to what is done in Bourne shell.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005475
Willy Tarreaub6205fd2012-09-24 12:27:33 +02005476 <port> is an optional port specification. If set, all connections will
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005477 be sent to this port. If unset, the same port the client
5478 connected to will be used. The port may also be prefixed by a "+"
5479 or a "-". In this case, the server's port will be determined by
5480 adding this value to the client's port.
5481
5482 <param*> is a list of parameters for this server. The "server" keywords
5483 accepts an important number of options and has a complete section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005484 dedicated to it. Please refer to section 5 for more details.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005485
5486 Examples :
5487 server first 10.1.1.1:1080 cookie first check inter 1000
5488 server second 10.1.1.2:1080 cookie second check inter 1000
Willy Tarreau24709282013-03-10 21:32:12 +01005489 server transp ipv4@
Willy Tarreaudad36a32013-03-11 01:20:04 +01005490 server backup ${SRV_BACKUP}:1080 backup
5491 server www1_dc1 ${LAN_DC1}.101:80
5492 server www1_dc2 ${LAN_DC2}.101:80
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005493
Mark Lamourinec2247f02012-01-04 13:02:01 -05005494 See also: "default-server", "http-send-name-header" and section 5 about
5495 server options
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005496
5497
5498source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreaubce70882009-09-07 11:51:47 +02005499source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
Willy Tarreaud53f96b2009-02-04 18:46:54 +01005500source <addr>[:<port>] [interface <name>]
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005501 Set the source address for outgoing connections
5502 May be used in sections : defaults | frontend | listen | backend
5503 yes | no | yes | yes
5504 Arguments :
5505 <addr> is the IPv4 address HAProxy will bind to before connecting to a
5506 server. This address is also used as a source for health checks.
Willy Tarreau24709282013-03-10 21:32:12 +01005507
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005508 The default value of 0.0.0.0 means that the system will select
Willy Tarreau24709282013-03-10 21:32:12 +01005509 the most appropriate address to reach its destination. Optionally
5510 an address family prefix may be used before the address to force
5511 the family regardless of the address format, which can be useful
5512 to specify a path to a unix socket with no slash ('/'). Currently
5513 supported prefixes are :
5514 - 'ipv4@' -> address is always IPv4
5515 - 'ipv6@' -> address is always IPv6
5516 - 'unix@' -> address is a path to a local unix socket
Willy Tarreaudad36a32013-03-11 01:20:04 +01005517 Any part of the address string may reference any number of
5518 environment variables by preceding their name with a dollar
5519 sign ('$') and optionally enclosing them with braces ('{}'),
5520 similarly to what is done in Bourne shell.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005521
5522 <port> is an optional port. It is normally not needed but may be useful
5523 in some very specific contexts. The default value of zero means
Willy Tarreauc6f4ce82009-06-10 11:09:37 +02005524 the system will select a free port. Note that port ranges are not
5525 supported in the backend. If you want to force port ranges, you
5526 have to specify them on each "server" line.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005527
5528 <addr2> is the IP address to present to the server when connections are
5529 forwarded in full transparent proxy mode. This is currently only
5530 supported on some patched Linux kernels. When this address is
5531 specified, clients connecting to the server will be presented
5532 with this address, while health checks will still use the address
5533 <addr>.
5534
5535 <port2> is the optional port to present to the server when connections
5536 are forwarded in full transparent proxy mode (see <addr2> above).
5537 The default value of zero means the system will select a free
5538 port.
5539
Willy Tarreaubce70882009-09-07 11:51:47 +02005540 <hdr> is the name of a HTTP header in which to fetch the IP to bind to.
5541 This is the name of a comma-separated header list which can
5542 contain multiple IP addresses. By default, the last occurrence is
5543 used. This is designed to work with the X-Forwarded-For header
Baptiste Assmannea3e73b2013-02-02 23:47:49 +01005544 and to automatically bind to the client's IP address as seen
Willy Tarreaubce70882009-09-07 11:51:47 +02005545 by previous proxy, typically Stunnel. In order to use another
5546 occurrence from the last one, please see the <occ> parameter
5547 below. When the header (or occurrence) is not found, no binding
5548 is performed so that the proxy's default IP address is used. Also
5549 keep in mind that the header name is case insensitive, as for any
5550 HTTP header.
5551
5552 <occ> is the occurrence number of a value to be used in a multi-value
5553 header. This is to be used in conjunction with "hdr_ip(<hdr>)",
Jamie Gloudonaaa21002012-08-25 00:18:33 -04005554 in order to specify which occurrence to use for the source IP
Willy Tarreaubce70882009-09-07 11:51:47 +02005555 address. Positive values indicate a position from the first
5556 occurrence, 1 being the first one. Negative values indicate
5557 positions relative to the last one, -1 being the last one. This
5558 is helpful for situations where an X-Forwarded-For header is set
5559 at the entry point of an infrastructure and must be used several
5560 proxy layers away. When this value is not specified, -1 is
5561 assumed. Passing a zero here disables the feature.
5562
Willy Tarreaud53f96b2009-02-04 18:46:54 +01005563 <name> is an optional interface name to which to bind to for outgoing
5564 traffic. On systems supporting this features (currently, only
5565 Linux), this allows one to bind all traffic to the server to
5566 this interface even if it is not the one the system would select
5567 based on routing tables. This should be used with extreme care.
5568 Note that using this option requires root privileges.
5569
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005570 The "source" keyword is useful in complex environments where a specific
5571 address only is allowed to connect to the servers. It may be needed when a
5572 private address must be used through a public gateway for instance, and it is
5573 known that the system cannot determine the adequate source address by itself.
5574
5575 An extension which is available on certain patched Linux kernels may be used
5576 through the "usesrc" optional keyword. It makes it possible to connect to the
5577 servers with an IP address which does not belong to the system itself. This
5578 is called "full transparent proxy mode". For this to work, the destination
5579 servers have to route their traffic back to this address through the machine
5580 running HAProxy, and IP forwarding must generally be enabled on this machine.
5581
5582 In this "full transparent proxy" mode, it is possible to force a specific IP
5583 address to be presented to the servers. This is not much used in fact. A more
5584 common use is to tell HAProxy to present the client's IP address. For this,
5585 there are two methods :
5586
5587 - present the client's IP and port addresses. This is the most transparent
5588 mode, but it can cause problems when IP connection tracking is enabled on
5589 the machine, because a same connection may be seen twice with different
5590 states. However, this solution presents the huge advantage of not
5591 limiting the system to the 64k outgoing address+port couples, because all
5592 of the client ranges may be used.
5593
5594 - present only the client's IP address and select a spare port. This
5595 solution is still quite elegant but slightly less transparent (downstream
5596 firewalls logs will not match upstream's). It also presents the downside
5597 of limiting the number of concurrent connections to the usual 64k ports.
5598 However, since the upstream and downstream ports are different, local IP
5599 connection tracking on the machine will not be upset by the reuse of the
5600 same session.
5601
5602 Note that depending on the transparent proxy technology used, it may be
5603 required to force the source address. In fact, cttproxy version 2 requires an
5604 IP address in <addr> above, and does not support setting of "0.0.0.0" as the
5605 IP address because it creates NAT entries which much match the exact outgoing
5606 address. Tproxy version 4 and some other kernel patches which work in pure
5607 forwarding mode generally will not have this limitation.
5608
5609 This option sets the default source for all servers in the backend. It may
5610 also be specified in a "defaults" section. Finer source address specification
5611 is possible at the server level using the "source" server option. Refer to
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005612 section 5 for more information.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005613
5614 Examples :
5615 backend private
5616 # Connect to the servers using our 192.168.1.200 source address
5617 source 192.168.1.200
5618
5619 backend transparent_ssl1
5620 # Connect to the SSL farm from the client's source address
5621 source 192.168.1.200 usesrc clientip
5622
5623 backend transparent_ssl2
5624 # Connect to the SSL farm from the client's source address and port
5625 # not recommended if IP conntrack is present on the local machine.
5626 source 192.168.1.200 usesrc client
5627
5628 backend transparent_ssl3
5629 # Connect to the SSL farm from the client's source address. It
5630 # is more conntrack-friendly.
5631 source 192.168.1.200 usesrc clientip
5632
5633 backend transparent_smtp
5634 # Connect to the SMTP farm from the client's source address/port
5635 # with Tproxy version 4.
5636 source 0.0.0.0 usesrc clientip
5637
Willy Tarreaubce70882009-09-07 11:51:47 +02005638 backend transparent_http
5639 # Connect to the servers using the client's IP as seen by previous
5640 # proxy.
5641 source 0.0.0.0 usesrc hdr_ip(x-forwarded-for,-1)
5642
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005643 See also : the "source" server option in section 5, the Tproxy patches for
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005644 the Linux kernel on www.balabit.com, the "bind" keyword.
5645
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01005646
Willy Tarreau844e3c52008-01-11 16:28:18 +01005647srvtimeout <timeout> (deprecated)
5648 Set the maximum inactivity time on the server side.
5649 May be used in sections : defaults | frontend | listen | backend
5650 yes | no | yes | yes
5651 Arguments :
5652 <timeout> is the timeout value specified in milliseconds by default, but
5653 can be in any other unit if the number is suffixed by the unit,
5654 as explained at the top of this document.
5655
5656 The inactivity timeout applies when the server is expected to acknowledge or
5657 send data. In HTTP mode, this timeout is particularly important to consider
5658 during the first phase of the server's response, when it has to send the
5659 headers, as it directly represents the server's processing time for the
5660 request. To find out what value to put there, it's often good to start with
5661 what would be considered as unacceptable response times, then check the logs
5662 to observe the response time distribution, and adjust the value accordingly.
5663
5664 The value is specified in milliseconds by default, but can be in any other
5665 unit if the number is suffixed by the unit, as specified at the top of this
5666 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
5667 recommended that the client timeout remains equal to the server timeout in
5668 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01005669 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01005670 packet losses by specifying timeouts that are slightly above multiples of 3
Willy Tarreaud72758d2010-01-12 10:42:19 +01005671 seconds (eg: 4 or 5 seconds minimum).
Willy Tarreau844e3c52008-01-11 16:28:18 +01005672
5673 This parameter is specific to backends, but can be specified once for all in
5674 "defaults" sections. This is in fact one of the easiest solutions not to
5675 forget about it. An unspecified timeout results in an infinite timeout, which
5676 is not recommended. Such a usage is accepted and works but reports a warning
5677 during startup because it may results in accumulation of expired sessions in
5678 the system if the system's timeouts are not configured either.
5679
5680 This parameter is provided for compatibility but is currently deprecated.
5681 Please use "timeout server" instead.
5682
Willy Tarreauce887fd2012-05-12 12:50:00 +02005683 See also : "timeout server", "timeout tunnel", "timeout client" and
5684 "clitimeout".
Willy Tarreau844e3c52008-01-11 16:28:18 +01005685
5686
Cyril Bonté66c327d2010-10-12 00:14:37 +02005687stats admin { if | unless } <cond>
5688 Enable statistics admin level if/unless a condition is matched
5689 May be used in sections : defaults | frontend | listen | backend
5690 no | no | yes | yes
5691
5692 This statement enables the statistics admin level if/unless a condition is
5693 matched.
5694
5695 The admin level allows to enable/disable servers from the web interface. By
5696 default, statistics page is read-only for security reasons.
5697
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01005698 Note : Consider not using this feature in multi-process mode (nbproc > 1)
5699 unless you know what you do : memory is not shared between the
5700 processes, which can result in random behaviours.
5701
Cyril Bonté23b39d92011-02-10 22:54:44 +01005702 Currently, the POST request is limited to the buffer size minus the reserved
5703 buffer space, which means that if the list of servers is too long, the
5704 request won't be processed. It is recommended to alter few servers at a
5705 time.
Cyril Bonté66c327d2010-10-12 00:14:37 +02005706
5707 Example :
5708 # statistics admin level only for localhost
5709 backend stats_localhost
5710 stats enable
5711 stats admin if LOCALHOST
5712
5713 Example :
5714 # statistics admin level always enabled because of the authentication
5715 backend stats_auth
5716 stats enable
5717 stats auth admin:AdMiN123
5718 stats admin if TRUE
5719
5720 Example :
5721 # statistics admin level depends on the authenticated user
5722 userlist stats-auth
5723 group admin users admin
5724 user admin insecure-password AdMiN123
5725 group readonly users haproxy
5726 user haproxy insecure-password haproxy
5727
5728 backend stats_auth
5729 stats enable
5730 acl AUTH http_auth(stats-auth)
5731 acl AUTH_ADMIN http_auth_group(stats-auth) admin
5732 stats http-request auth unless AUTH
5733 stats admin if AUTH_ADMIN
5734
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01005735 See also : "stats enable", "stats auth", "stats http-request", "nbproc",
5736 "bind-process", section 3.4 about userlists and section 7 about
5737 ACL usage.
Cyril Bonté66c327d2010-10-12 00:14:37 +02005738
5739
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005740stats auth <user>:<passwd>
5741 Enable statistics with authentication and grant access to an account
5742 May be used in sections : defaults | frontend | listen | backend
5743 yes | no | yes | yes
5744 Arguments :
5745 <user> is a user name to grant access to
5746
5747 <passwd> is the cleartext password associated to this user
5748
5749 This statement enables statistics with default settings, and restricts access
5750 to declared users only. It may be repeated as many times as necessary to
5751 allow as many users as desired. When a user tries to access the statistics
5752 without a valid account, a "401 Forbidden" response will be returned so that
5753 the browser asks the user to provide a valid user and password. The real
5754 which will be returned to the browser is configurable using "stats realm".
5755
5756 Since the authentication method is HTTP Basic Authentication, the passwords
5757 circulate in cleartext on the network. Thus, it was decided that the
5758 configuration file would also use cleartext passwords to remind the users
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02005759 that those ones should not be sensitive and not shared with any other account.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005760
5761 It is also possible to reduce the scope of the proxies which appear in the
5762 report using "stats scope".
5763
5764 Though this statement alone is enough to enable statistics reporting, it is
5765 recommended to set all other settings in order to avoid relying on default
5766 unobvious parameters.
5767
5768 Example :
5769 # public access (limited to this backend only)
5770 backend public_www
5771 server srv1 192.168.0.1:80
5772 stats enable
5773 stats hide-version
5774 stats scope .
5775 stats uri /admin?stats
5776 stats realm Haproxy\ Statistics
5777 stats auth admin1:AdMiN123
5778 stats auth admin2:AdMiN321
5779
5780 # internal monitoring access (unlimited)
5781 backend private_monitoring
5782 stats enable
5783 stats uri /admin?stats
5784 stats refresh 5s
5785
5786 See also : "stats enable", "stats realm", "stats scope", "stats uri"
5787
5788
5789stats enable
5790 Enable statistics reporting with default settings
5791 May be used in sections : defaults | frontend | listen | backend
5792 yes | no | yes | yes
5793 Arguments : none
5794
5795 This statement enables statistics reporting with default settings defined
5796 at build time. Unless stated otherwise, these settings are used :
5797 - stats uri : /haproxy?stats
5798 - stats realm : "HAProxy Statistics"
5799 - stats auth : no authentication
5800 - stats scope : no restriction
5801
5802 Though this statement alone is enough to enable statistics reporting, it is
5803 recommended to set all other settings in order to avoid relying on default
5804 unobvious parameters.
5805
5806 Example :
5807 # public access (limited to this backend only)
5808 backend public_www
5809 server srv1 192.168.0.1:80
5810 stats enable
5811 stats hide-version
5812 stats scope .
5813 stats uri /admin?stats
5814 stats realm Haproxy\ Statistics
5815 stats auth admin1:AdMiN123
5816 stats auth admin2:AdMiN321
5817
5818 # internal monitoring access (unlimited)
5819 backend private_monitoring
5820 stats enable
5821 stats uri /admin?stats
5822 stats refresh 5s
5823
5824 See also : "stats auth", "stats realm", "stats uri"
5825
5826
Willy Tarreaud63335a2010-02-26 12:56:52 +01005827stats hide-version
5828 Enable statistics and hide HAProxy version reporting
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02005829 May be used in sections : defaults | frontend | listen | backend
5830 yes | no | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01005831 Arguments : none
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02005832
Willy Tarreaud63335a2010-02-26 12:56:52 +01005833 By default, the stats page reports some useful status information along with
5834 the statistics. Among them is HAProxy's version. However, it is generally
5835 considered dangerous to report precise version to anyone, as it can help them
5836 target known weaknesses with specific attacks. The "stats hide-version"
5837 statement removes the version from the statistics report. This is recommended
5838 for public sites or any site with a weak login/password.
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02005839
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +02005840 Though this statement alone is enough to enable statistics reporting, it is
5841 recommended to set all other settings in order to avoid relying on default
5842 unobvious parameters.
5843
Willy Tarreaud63335a2010-02-26 12:56:52 +01005844 Example :
5845 # public access (limited to this backend only)
5846 backend public_www
5847 server srv1 192.168.0.1:80
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +02005848 stats enable
Willy Tarreaud63335a2010-02-26 12:56:52 +01005849 stats hide-version
5850 stats scope .
5851 stats uri /admin?stats
5852 stats realm Haproxy\ Statistics
5853 stats auth admin1:AdMiN123
5854 stats auth admin2:AdMiN321
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02005855
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02005856 # internal monitoring access (unlimited)
5857 backend private_monitoring
5858 stats enable
Willy Tarreaud63335a2010-02-26 12:56:52 +01005859 stats uri /admin?stats
5860 stats refresh 5s
Krzysztof Piotr Oledzki15514c22010-01-04 16:03:09 +01005861
Willy Tarreaud63335a2010-02-26 12:56:52 +01005862 See also : "stats auth", "stats enable", "stats realm", "stats uri"
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02005863
Willy Tarreau983e01e2010-01-11 18:42:06 +01005864
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02005865stats http-request { allow | deny | auth [realm <realm>] }
5866 [ { if | unless } <condition> ]
5867 Access control for statistics
5868
5869 May be used in sections: defaults | frontend | listen | backend
5870 no | no | yes | yes
5871
5872 As "http-request", these set of options allow to fine control access to
5873 statistics. Each option may be followed by if/unless and acl.
5874 First option with matched condition (or option without condition) is final.
5875 For "deny" a 403 error will be returned, for "allow" normal processing is
5876 performed, for "auth" a 401/407 error code is returned so the client
5877 should be asked to enter a username and password.
5878
5879 There is no fixed limit to the number of http-request statements per
5880 instance.
5881
5882 See also : "http-request", section 3.4 about userlists and section 7
5883 about ACL usage.
5884
5885
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005886stats realm <realm>
5887 Enable statistics and set authentication realm
5888 May be used in sections : defaults | frontend | listen | backend
5889 yes | no | yes | yes
5890 Arguments :
5891 <realm> is the name of the HTTP Basic Authentication realm reported to
5892 the browser. The browser uses it to display it in the pop-up
5893 inviting the user to enter a valid username and password.
5894
5895 The realm is read as a single word, so any spaces in it should be escaped
5896 using a backslash ('\').
5897
5898 This statement is useful only in conjunction with "stats auth" since it is
5899 only related to authentication.
5900
5901 Though this statement alone is enough to enable statistics reporting, it is
5902 recommended to set all other settings in order to avoid relying on default
5903 unobvious parameters.
5904
5905 Example :
5906 # public access (limited to this backend only)
5907 backend public_www
5908 server srv1 192.168.0.1:80
5909 stats enable
5910 stats hide-version
5911 stats scope .
5912 stats uri /admin?stats
5913 stats realm Haproxy\ Statistics
5914 stats auth admin1:AdMiN123
5915 stats auth admin2:AdMiN321
5916
5917 # internal monitoring access (unlimited)
5918 backend private_monitoring
5919 stats enable
5920 stats uri /admin?stats
5921 stats refresh 5s
5922
5923 See also : "stats auth", "stats enable", "stats uri"
5924
5925
5926stats refresh <delay>
5927 Enable statistics with automatic refresh
5928 May be used in sections : defaults | frontend | listen | backend
5929 yes | no | yes | yes
5930 Arguments :
5931 <delay> is the suggested refresh delay, specified in seconds, which will
5932 be returned to the browser consulting the report page. While the
5933 browser is free to apply any delay, it will generally respect it
5934 and refresh the page this every seconds. The refresh interval may
5935 be specified in any other non-default time unit, by suffixing the
5936 unit after the value, as explained at the top of this document.
5937
5938 This statement is useful on monitoring displays with a permanent page
5939 reporting the load balancer's activity. When set, the HTML report page will
5940 include a link "refresh"/"stop refresh" so that the user can select whether
5941 he wants automatic refresh of the page or not.
5942
5943 Though this statement alone is enough to enable statistics reporting, it is
5944 recommended to set all other settings in order to avoid relying on default
5945 unobvious parameters.
5946
5947 Example :
5948 # public access (limited to this backend only)
5949 backend public_www
5950 server srv1 192.168.0.1:80
5951 stats enable
5952 stats hide-version
5953 stats scope .
5954 stats uri /admin?stats
5955 stats realm Haproxy\ Statistics
5956 stats auth admin1:AdMiN123
5957 stats auth admin2:AdMiN321
5958
5959 # internal monitoring access (unlimited)
5960 backend private_monitoring
5961 stats enable
5962 stats uri /admin?stats
5963 stats refresh 5s
5964
5965 See also : "stats auth", "stats enable", "stats realm", "stats uri"
5966
5967
5968stats scope { <name> | "." }
5969 Enable statistics and limit access scope
5970 May be used in sections : defaults | frontend | listen | backend
5971 yes | no | yes | yes
5972 Arguments :
5973 <name> is the name of a listen, frontend or backend section to be
5974 reported. The special name "." (a single dot) designates the
5975 section in which the statement appears.
5976
5977 When this statement is specified, only the sections enumerated with this
5978 statement will appear in the report. All other ones will be hidden. This
5979 statement may appear as many times as needed if multiple sections need to be
5980 reported. Please note that the name checking is performed as simple string
5981 comparisons, and that it is never checked that a give section name really
5982 exists.
5983
5984 Though this statement alone is enough to enable statistics reporting, it is
5985 recommended to set all other settings in order to avoid relying on default
5986 unobvious parameters.
5987
5988 Example :
5989 # public access (limited to this backend only)
5990 backend public_www
5991 server srv1 192.168.0.1:80
5992 stats enable
5993 stats hide-version
5994 stats scope .
5995 stats uri /admin?stats
5996 stats realm Haproxy\ Statistics
5997 stats auth admin1:AdMiN123
5998 stats auth admin2:AdMiN321
5999
6000 # internal monitoring access (unlimited)
6001 backend private_monitoring
6002 stats enable
6003 stats uri /admin?stats
6004 stats refresh 5s
6005
6006 See also : "stats auth", "stats enable", "stats realm", "stats uri"
6007
Willy Tarreaud63335a2010-02-26 12:56:52 +01006008
Willy Tarreauc9705a12010-07-27 20:05:50 +02006009stats show-desc [ <desc> ]
Willy Tarreaud63335a2010-02-26 12:56:52 +01006010 Enable reporting of a description on the statistics page.
6011 May be used in sections : defaults | frontend | listen | backend
6012 yes | no | yes | yes
6013
Willy Tarreauc9705a12010-07-27 20:05:50 +02006014 <desc> is an optional description to be reported. If unspecified, the
Willy Tarreaud63335a2010-02-26 12:56:52 +01006015 description from global section is automatically used instead.
6016
6017 This statement is useful for users that offer shared services to their
6018 customers, where node or description should be different for each customer.
6019
6020 Though this statement alone is enough to enable statistics reporting, it is
6021 recommended to set all other settings in order to avoid relying on default
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04006022 unobvious parameters. By default description is not shown.
Willy Tarreaud63335a2010-02-26 12:56:52 +01006023
6024 Example :
6025 # internal monitoring access (unlimited)
6026 backend private_monitoring
6027 stats enable
6028 stats show-desc Master node for Europe, Asia, Africa
6029 stats uri /admin?stats
6030 stats refresh 5s
6031
6032 See also: "show-node", "stats enable", "stats uri" and "description" in
6033 global section.
6034
6035
6036stats show-legends
6037 Enable reporting additional informations on the statistics page :
6038 - cap: capabilities (proxy)
6039 - mode: one of tcp, http or health (proxy)
6040 - id: SNMP ID (proxy, socket, server)
6041 - IP (socket, server)
6042 - cookie (backend, server)
6043
6044 Though this statement alone is enough to enable statistics reporting, it is
6045 recommended to set all other settings in order to avoid relying on default
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04006046 unobvious parameters. Default behaviour is not to show this information.
Willy Tarreaud63335a2010-02-26 12:56:52 +01006047
6048 See also: "stats enable", "stats uri".
6049
6050
6051stats show-node [ <name> ]
6052 Enable reporting of a host name on the statistics page.
6053 May be used in sections : defaults | frontend | listen | backend
6054 yes | no | yes | yes
6055 Arguments:
6056 <name> is an optional name to be reported. If unspecified, the
6057 node name from global section is automatically used instead.
6058
6059 This statement is useful for users that offer shared services to their
6060 customers, where node or description might be different on a stats page
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04006061 provided for each customer. Default behaviour is not to show host name.
Willy Tarreaud63335a2010-02-26 12:56:52 +01006062
6063 Though this statement alone is enough to enable statistics reporting, it is
6064 recommended to set all other settings in order to avoid relying on default
6065 unobvious parameters.
6066
6067 Example:
6068 # internal monitoring access (unlimited)
6069 backend private_monitoring
6070 stats enable
6071 stats show-node Europe-1
6072 stats uri /admin?stats
6073 stats refresh 5s
6074
6075 See also: "show-desc", "stats enable", "stats uri", and "node" in global
6076 section.
6077
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006078
6079stats uri <prefix>
6080 Enable statistics and define the URI prefix to access them
6081 May be used in sections : defaults | frontend | listen | backend
6082 yes | no | yes | yes
6083 Arguments :
6084 <prefix> is the prefix of any URI which will be redirected to stats. This
6085 prefix may contain a question mark ('?') to indicate part of a
6086 query string.
6087
6088 The statistics URI is intercepted on the relayed traffic, so it appears as a
6089 page within the normal application. It is strongly advised to ensure that the
6090 selected URI will never appear in the application, otherwise it will never be
6091 possible to reach it in the application.
6092
6093 The default URI compiled in haproxy is "/haproxy?stats", but this may be
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006094 changed at build time, so it's better to always explicitly specify it here.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006095 It is generally a good idea to include a question mark in the URI so that
6096 intermediate proxies refrain from caching the results. Also, since any string
6097 beginning with the prefix will be accepted as a stats request, the question
6098 mark helps ensuring that no valid URI will begin with the same words.
6099
6100 It is sometimes very convenient to use "/" as the URI prefix, and put that
6101 statement in a "listen" instance of its own. That makes it easy to dedicate
6102 an address or a port to statistics only.
6103
6104 Though this statement alone is enough to enable statistics reporting, it is
6105 recommended to set all other settings in order to avoid relying on default
6106 unobvious parameters.
6107
6108 Example :
6109 # public access (limited to this backend only)
6110 backend public_www
6111 server srv1 192.168.0.1:80
6112 stats enable
6113 stats hide-version
6114 stats scope .
6115 stats uri /admin?stats
6116 stats realm Haproxy\ Statistics
6117 stats auth admin1:AdMiN123
6118 stats auth admin2:AdMiN321
6119
6120 # internal monitoring access (unlimited)
6121 backend private_monitoring
6122 stats enable
6123 stats uri /admin?stats
6124 stats refresh 5s
6125
6126 See also : "stats auth", "stats enable", "stats realm"
6127
6128
Willy Tarreaud63335a2010-02-26 12:56:52 +01006129stick match <pattern> [table <table>] [{if | unless} <cond>]
6130 Define a request pattern matching condition to stick a user to a server
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006131 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaud63335a2010-02-26 12:56:52 +01006132 no | no | yes | yes
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006133
6134 Arguments :
Willy Tarreau74ca5042013-06-11 23:12:07 +02006135 <pattern> is a pattern extraction rule as described in section 7.3. It
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006136 describes what elements of the incoming request or connection
6137 will be analysed in the hope to find a matching entry in a
6138 stickiness table. This rule is mandatory.
6139
6140 <table> is an optional stickiness table name. If unspecified, the same
6141 backend's table is used. A stickiness table is declared using
6142 the "stick-table" statement.
6143
6144 <cond> is an optional matching condition. It makes it possible to match
6145 on a certain criterion only when other conditions are met (or
6146 not met). For instance, it could be used to match on a source IP
6147 address except when a request passes through a known proxy, in
6148 which case we'd match on a header containing that IP address.
6149
6150 Some protocols or applications require complex stickiness rules and cannot
6151 always simply rely on cookies nor hashing. The "stick match" statement
6152 describes a rule to extract the stickiness criterion from an incoming request
6153 or connection. See section 7 for a complete list of possible patterns and
6154 transformation rules.
6155
6156 The table has to be declared using the "stick-table" statement. It must be of
6157 a type compatible with the pattern. By default it is the one which is present
6158 in the same backend. It is possible to share a table with other backends by
6159 referencing it using the "table" keyword. If another table is referenced,
6160 the server's ID inside the backends are used. By default, all server IDs
6161 start at 1 in each backend, so the server ordering is enough. But in case of
6162 doubt, it is highly recommended to force server IDs using their "id" setting.
6163
6164 It is possible to restrict the conditions where a "stick match" statement
6165 will apply, using "if" or "unless" followed by a condition. See section 7 for
6166 ACL based conditions.
6167
6168 There is no limit on the number of "stick match" statements. The first that
6169 applies and matches will cause the request to be directed to the same server
6170 as was used for the request which created the entry. That way, multiple
6171 matches can be used as fallbacks.
6172
6173 The stick rules are checked after the persistence cookies, so they will not
6174 affect stickiness if a cookie has already been used to select a server. That
6175 way, it becomes very easy to insert cookies and match on IP addresses in
6176 order to maintain stickiness between HTTP and HTTPS.
6177
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01006178 Note : Consider not using this feature in multi-process mode (nbproc > 1)
6179 unless you know what you do : memory is not shared between the
6180 processes, which can result in random behaviours.
6181
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006182 Example :
6183 # forward SMTP users to the same server they just used for POP in the
6184 # last 30 minutes
6185 backend pop
6186 mode tcp
6187 balance roundrobin
6188 stick store-request src
6189 stick-table type ip size 200k expire 30m
6190 server s1 192.168.1.1:110
6191 server s2 192.168.1.1:110
6192
6193 backend smtp
6194 mode tcp
6195 balance roundrobin
6196 stick match src table pop
6197 server s1 192.168.1.1:25
6198 server s2 192.168.1.1:25
6199
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01006200 See also : "stick-table", "stick on", "nbproc", "bind-process" and section 7
6201 about ACLs and pattern extraction.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006202
6203
6204stick on <pattern> [table <table>] [{if | unless} <condition>]
6205 Define a request pattern to associate a user to a server
6206 May be used in sections : defaults | frontend | listen | backend
6207 no | no | yes | yes
6208
6209 Note : This form is exactly equivalent to "stick match" followed by
6210 "stick store-request", all with the same arguments. Please refer
6211 to both keywords for details. It is only provided as a convenience
6212 for writing more maintainable configurations.
6213
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01006214 Note : Consider not using this feature in multi-process mode (nbproc > 1)
6215 unless you know what you do : memory is not shared between the
6216 processes, which can result in random behaviours.
6217
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006218 Examples :
6219 # The following form ...
Willy Tarreauec579d82010-02-26 19:15:04 +01006220 stick on src table pop if !localhost
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006221
6222 # ...is strictly equivalent to this one :
6223 stick match src table pop if !localhost
6224 stick store-request src table pop if !localhost
6225
6226
6227 # Use cookie persistence for HTTP, and stick on source address for HTTPS as
6228 # well as HTTP without cookie. Share the same table between both accesses.
6229 backend http
6230 mode http
6231 balance roundrobin
6232 stick on src table https
6233 cookie SRV insert indirect nocache
6234 server s1 192.168.1.1:80 cookie s1
6235 server s2 192.168.1.1:80 cookie s2
6236
6237 backend https
6238 mode tcp
6239 balance roundrobin
6240 stick-table type ip size 200k expire 30m
6241 stick on src
6242 server s1 192.168.1.1:443
6243 server s2 192.168.1.1:443
6244
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01006245 See also : "stick match", "stick store-request", "nbproc" and "bind-process".
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006246
6247
6248stick store-request <pattern> [table <table>] [{if | unless} <condition>]
6249 Define a request pattern used to create an entry in a stickiness table
6250 May be used in sections : defaults | frontend | listen | backend
6251 no | no | yes | yes
6252
6253 Arguments :
Willy Tarreau74ca5042013-06-11 23:12:07 +02006254 <pattern> is a pattern extraction rule as described in section 7.3. It
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006255 describes what elements of the incoming request or connection
6256 will be analysed, extracted and stored in the table once a
6257 server is selected.
6258
6259 <table> is an optional stickiness table name. If unspecified, the same
6260 backend's table is used. A stickiness table is declared using
6261 the "stick-table" statement.
6262
6263 <cond> is an optional storage condition. It makes it possible to store
6264 certain criteria only when some conditions are met (or not met).
6265 For instance, it could be used to store the source IP address
6266 except when the request passes through a known proxy, in which
6267 case we'd store a converted form of a header containing that IP
6268 address.
6269
6270 Some protocols or applications require complex stickiness rules and cannot
6271 always simply rely on cookies nor hashing. The "stick store-request" statement
6272 describes a rule to decide what to extract from the request and when to do
6273 it, in order to store it into a stickiness table for further requests to
6274 match it using the "stick match" statement. Obviously the extracted part must
6275 make sense and have a chance to be matched in a further request. Storing a
6276 client's IP address for instance often makes sense. Storing an ID found in a
6277 URL parameter also makes sense. Storing a source port will almost never make
6278 any sense because it will be randomly matched. See section 7 for a complete
6279 list of possible patterns and transformation rules.
6280
6281 The table has to be declared using the "stick-table" statement. It must be of
6282 a type compatible with the pattern. By default it is the one which is present
6283 in the same backend. It is possible to share a table with other backends by
6284 referencing it using the "table" keyword. If another table is referenced,
6285 the server's ID inside the backends are used. By default, all server IDs
6286 start at 1 in each backend, so the server ordering is enough. But in case of
6287 doubt, it is highly recommended to force server IDs using their "id" setting.
6288
6289 It is possible to restrict the conditions where a "stick store-request"
6290 statement will apply, using "if" or "unless" followed by a condition. This
6291 condition will be evaluated while parsing the request, so any criteria can be
6292 used. See section 7 for ACL based conditions.
6293
6294 There is no limit on the number of "stick store-request" statements, but
6295 there is a limit of 8 simultaneous stores per request or response. This
6296 makes it possible to store up to 8 criteria, all extracted from either the
6297 request or the response, regardless of the number of rules. Only the 8 first
6298 ones which match will be kept. Using this, it is possible to feed multiple
6299 tables at once in the hope to increase the chance to recognize a user on
Willy Tarreau9667a802013-12-09 12:52:13 +01006300 another protocol or access method. Using multiple store-request rules with
6301 the same table is possible and may be used to find the best criterion to rely
6302 on, by arranging the rules by decreasing preference order. Only the first
6303 extracted criterion for a given table will be stored. All subsequent store-
6304 request rules referencing the same table will be skipped and their ACLs will
6305 not be evaluated.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006306
6307 The "store-request" rules are evaluated once the server connection has been
6308 established, so that the table will contain the real server that processed
6309 the request.
6310
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01006311 Note : Consider not using this feature in multi-process mode (nbproc > 1)
6312 unless you know what you do : memory is not shared between the
6313 processes, which can result in random behaviours.
6314
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006315 Example :
6316 # forward SMTP users to the same server they just used for POP in the
6317 # last 30 minutes
6318 backend pop
6319 mode tcp
6320 balance roundrobin
6321 stick store-request src
6322 stick-table type ip size 200k expire 30m
6323 server s1 192.168.1.1:110
6324 server s2 192.168.1.1:110
6325
6326 backend smtp
6327 mode tcp
6328 balance roundrobin
6329 stick match src table pop
6330 server s1 192.168.1.1:25
6331 server s2 192.168.1.1:25
6332
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01006333 See also : "stick-table", "stick on", "nbproc", "bind-process" and section 7
6334 about ACLs and pattern extraction.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006335
6336
Emeric Brun7c6b82e2010-09-24 16:34:28 +02006337stick-table type {ip | integer | string [len <length>] | binary [len <length>]}
Emeric Brunf099e792010-09-27 12:05:28 +02006338 size <size> [expire <expire>] [nopurge] [peers <peersect>]
6339 [store <data_type>]*
Godbach64cef792013-12-04 16:08:22 +08006340 Configure the stickiness table for the current section
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006341 May be used in sections : defaults | frontend | listen | backend
Willy Tarreauc00cdc22010-06-06 16:48:26 +02006342 no | yes | yes | yes
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006343
6344 Arguments :
6345 ip a table declared with "type ip" will only store IPv4 addresses.
6346 This form is very compact (about 50 bytes per entry) and allows
6347 very fast entry lookup and stores with almost no overhead. This
6348 is mainly used to store client source IP addresses.
6349
David du Colombier9a6d3c92011-03-17 10:40:24 +01006350 ipv6 a table declared with "type ipv6" will only store IPv6 addresses.
6351 This form is very compact (about 60 bytes per entry) and allows
6352 very fast entry lookup and stores with almost no overhead. This
6353 is mainly used to store client source IP addresses.
6354
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006355 integer a table declared with "type integer" will store 32bit integers
6356 which can represent a client identifier found in a request for
6357 instance.
6358
6359 string a table declared with "type string" will store substrings of up
6360 to <len> characters. If the string provided by the pattern
6361 extractor is larger than <len>, it will be truncated before
6362 being stored. During matching, at most <len> characters will be
6363 compared between the string in the table and the extracted
6364 pattern. When not specified, the string is automatically limited
Emeric Brun7c6b82e2010-09-24 16:34:28 +02006365 to 32 characters.
6366
6367 binary a table declared with "type binary" will store binary blocks
6368 of <len> bytes. If the block provided by the pattern
6369 extractor is larger than <len>, it will be truncated before
6370 being stored. If the block provided by the pattern extractor
6371 is shorter than <len>, it will be padded by 0. When not
6372 specified, the block is automatically limited to 32 bytes.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006373
6374 <length> is the maximum number of characters that will be stored in a
Emeric Brun7c6b82e2010-09-24 16:34:28 +02006375 "string" type table (See type "string" above). Or the number
6376 of bytes of the block in "binary" type table. Be careful when
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006377 changing this parameter as memory usage will proportionally
6378 increase.
6379
6380 <size> is the maximum number of entries that can fit in the table. This
Cyril Bonté78caf842010-03-10 22:41:43 +01006381 value directly impacts memory usage. Count approximately
6382 50 bytes per entry, plus the size of a string if any. The size
6383 supports suffixes "k", "m", "g" for 2^10, 2^20 and 2^30 factors.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006384
6385 [nopurge] indicates that we refuse to purge older entries when the table
6386 is full. When not specified and the table is full when haproxy
6387 wants to store an entry in it, it will flush a few of the oldest
6388 entries in order to release some space for the new ones. This is
6389 most often the desired behaviour. In some specific cases, it
6390 be desirable to refuse new entries instead of purging the older
6391 ones. That may be the case when the amount of data to store is
6392 far above the hardware limits and we prefer not to offer access
6393 to new clients than to reject the ones already connected. When
6394 using this parameter, be sure to properly set the "expire"
6395 parameter (see below).
6396
Emeric Brunf099e792010-09-27 12:05:28 +02006397 <peersect> is the name of the peers section to use for replication. Entries
6398 which associate keys to server IDs are kept synchronized with
6399 the remote peers declared in this section. All entries are also
6400 automatically learned from the local peer (old process) during a
6401 soft restart.
6402
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01006403 NOTE : peers can't be used in multi-process mode.
6404
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006405 <expire> defines the maximum duration of an entry in the table since it
6406 was last created, refreshed or matched. The expiration delay is
6407 defined using the standard time format, similarly as the various
6408 timeouts. The maximum duration is slightly above 24 days. See
6409 section 2.2 for more information. If this delay is not specified,
Cyril Bontédc4d9032012-04-08 21:57:39 +02006410 the session won't automatically expire, but older entries will
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006411 be removed once full. Be sure not to use the "nopurge" parameter
6412 if not expiration delay is specified.
6413
Willy Tarreau08d5f982010-06-06 13:34:54 +02006414 <data_type> is used to store additional information in the stick-table. This
6415 may be used by ACLs in order to control various criteria related
6416 to the activity of the client matching the stick-table. For each
6417 item specified here, the size of each entry will be inflated so
Willy Tarreauc9705a12010-07-27 20:05:50 +02006418 that the additional data can fit. Several data types may be
6419 stored with an entry. Multiple data types may be specified after
6420 the "store" keyword, as a comma-separated list. Alternatively,
6421 it is possible to repeat the "store" keyword followed by one or
6422 several data types. Except for the "server_id" type which is
6423 automatically detected and enabled, all data types must be
6424 explicitly declared to be stored. If an ACL references a data
6425 type which is not stored, the ACL will simply not match. Some
6426 data types require an argument which must be passed just after
6427 the type between parenthesis. See below for the supported data
6428 types and their arguments.
6429
6430 The data types that can be stored with an entry are the following :
6431 - server_id : this is an integer which holds the numeric ID of the server a
6432 request was assigned to. It is used by the "stick match", "stick store",
6433 and "stick on" rules. It is automatically enabled when referenced.
6434
6435 - gpc0 : first General Purpose Counter. It is a positive 32-bit integer
6436 integer which may be used for anything. Most of the time it will be used
6437 to put a special tag on some entries, for instance to note that a
6438 specific behaviour was detected and must be known for future matches.
6439
Willy Tarreauba2ffd12013-05-29 15:54:14 +02006440 - gpc0_rate(<period>) : increment rate of the first General Purpose Counter
6441 over a period. It is a positive 32-bit integer integer which may be used
6442 for anything. Just like <gpc0>, it counts events, but instead of keeping
6443 a cumulative count, it maintains the rate at which the counter is
6444 incremented. Most of the time it will be used to measure the frequency of
6445 occurrence of certain events (eg: requests to a specific URL).
6446
Willy Tarreauc9705a12010-07-27 20:05:50 +02006447 - conn_cnt : Connection Count. It is a positive 32-bit integer which counts
6448 the absolute number of connections received from clients which matched
6449 this entry. It does not mean the connections were accepted, just that
6450 they were received.
6451
6452 - conn_cur : Current Connections. It is a positive 32-bit integer which
6453 stores the concurrent connection counts for the entry. It is incremented
6454 once an incoming connection matches the entry, and decremented once the
6455 connection leaves. That way it is possible to know at any time the exact
6456 number of concurrent connections for an entry.
6457
6458 - conn_rate(<period>) : frequency counter (takes 12 bytes). It takes an
6459 integer parameter <period> which indicates in milliseconds the length
6460 of the period over which the average is measured. It reports the average
6461 incoming connection rate over that period, in connections per period. The
6462 result is an integer which can be matched using ACLs.
6463
6464 - sess_cnt : Session Count. It is a positive 32-bit integer which counts
6465 the absolute number of sessions received from clients which matched this
6466 entry. A session is a connection that was accepted by the layer 4 rules.
6467
6468 - sess_rate(<period>) : frequency counter (takes 12 bytes). It takes an
6469 integer parameter <period> which indicates in milliseconds the length
6470 of the period over which the average is measured. It reports the average
6471 incoming session rate over that period, in sessions per period. The
6472 result is an integer which can be matched using ACLs.
6473
6474 - http_req_cnt : HTTP request Count. It is a positive 32-bit integer which
6475 counts the absolute number of HTTP requests received from clients which
6476 matched this entry. It does not matter whether they are valid requests or
6477 not. Note that this is different from sessions when keep-alive is used on
6478 the client side.
6479
6480 - http_req_rate(<period>) : frequency counter (takes 12 bytes). It takes an
6481 integer parameter <period> which indicates in milliseconds the length
6482 of the period over which the average is measured. It reports the average
6483 HTTP request rate over that period, in requests per period. The result is
6484 an integer which can be matched using ACLs. It does not matter whether
6485 they are valid requests or not. Note that this is different from sessions
6486 when keep-alive is used on the client side.
6487
6488 - http_err_cnt : HTTP Error Count. It is a positive 32-bit integer which
6489 counts the absolute number of HTTP requests errors induced by clients
6490 which matched this entry. Errors are counted on invalid and truncated
6491 requests, as well as on denied or tarpitted requests, and on failed
6492 authentications. If the server responds with 4xx, then the request is
6493 also counted as an error since it's an error triggered by the client
6494 (eg: vulnerability scan).
6495
6496 - http_err_rate(<period>) : frequency counter (takes 12 bytes). It takes an
6497 integer parameter <period> which indicates in milliseconds the length
6498 of the period over which the average is measured. It reports the average
6499 HTTP request error rate over that period, in requests per period (see
6500 http_err_cnt above for what is accounted as an error). The result is an
6501 integer which can be matched using ACLs.
6502
6503 - bytes_in_cnt : client to server byte count. It is a positive 64-bit
6504 integer which counts the cumulated amount of bytes received from clients
6505 which matched this entry. Headers are included in the count. This may be
6506 used to limit abuse of upload features on photo or video servers.
6507
6508 - bytes_in_rate(<period>) : frequency counter (takes 12 bytes). It takes an
6509 integer parameter <period> which indicates in milliseconds the length
6510 of the period over which the average is measured. It reports the average
6511 incoming bytes rate over that period, in bytes per period. It may be used
6512 to detect users which upload too much and too fast. Warning: with large
6513 uploads, it is possible that the amount of uploaded data will be counted
6514 once upon termination, thus causing spikes in the average transfer speed
6515 instead of having a smooth one. This may partially be smoothed with
6516 "option contstats" though this is not perfect yet. Use of byte_in_cnt is
6517 recommended for better fairness.
6518
6519 - bytes_out_cnt : server to client byte count. It is a positive 64-bit
6520 integer which counts the cumulated amount of bytes sent to clients which
6521 matched this entry. Headers are included in the count. This may be used
6522 to limit abuse of bots sucking the whole site.
6523
6524 - bytes_out_rate(<period>) : frequency counter (takes 12 bytes). It takes
6525 an integer parameter <period> which indicates in milliseconds the length
6526 of the period over which the average is measured. It reports the average
6527 outgoing bytes rate over that period, in bytes per period. It may be used
6528 to detect users which download too much and too fast. Warning: with large
6529 transfers, it is possible that the amount of transferred data will be
6530 counted once upon termination, thus causing spikes in the average
6531 transfer speed instead of having a smooth one. This may partially be
6532 smoothed with "option contstats" though this is not perfect yet. Use of
6533 byte_out_cnt is recommended for better fairness.
Willy Tarreau08d5f982010-06-06 13:34:54 +02006534
Willy Tarreauc00cdc22010-06-06 16:48:26 +02006535 There is only one stick-table per proxy. At the moment of writing this doc,
6536 it does not seem useful to have multiple tables per proxy. If this happens
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006537 to be required, simply create a dummy backend with a stick-table in it and
6538 reference it.
6539
6540 It is important to understand that stickiness based on learning information
6541 has some limitations, including the fact that all learned associations are
6542 lost upon restart. In general it can be good as a complement but not always
6543 as an exclusive stickiness.
6544
Willy Tarreauc9705a12010-07-27 20:05:50 +02006545 Last, memory requirements may be important when storing many data types.
6546 Indeed, storing all indicators above at once in each entry requires 116 bytes
6547 per entry, or 116 MB for a 1-million entries table. This is definitely not
6548 something that can be ignored.
6549
6550 Example:
6551 # Keep track of counters of up to 1 million IP addresses over 5 minutes
6552 # and store a general purpose counter and the average connection rate
6553 # computed over a sliding window of 30 seconds.
6554 stick-table type ip size 1m expire 5m store gpc0,conn_rate(30s)
6555
6556 See also : "stick match", "stick on", "stick store-request", section 2.2
David du Colombiera13d1b92011-03-17 10:40:22 +01006557 about time format and section 7 about ACLs.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01006558
6559
Emeric Brun6a1cefa2010-09-24 18:15:17 +02006560stick store-response <pattern> [table <table>] [{if | unless} <condition>]
6561 Define a request pattern used to create an entry in a stickiness table
6562 May be used in sections : defaults | frontend | listen | backend
6563 no | no | yes | yes
6564
6565 Arguments :
Willy Tarreau74ca5042013-06-11 23:12:07 +02006566 <pattern> is a pattern extraction rule as described in section 7.3. It
Emeric Brun6a1cefa2010-09-24 18:15:17 +02006567 describes what elements of the response or connection will
6568 be analysed, extracted and stored in the table once a
6569 server is selected.
6570
6571 <table> is an optional stickiness table name. If unspecified, the same
6572 backend's table is used. A stickiness table is declared using
6573 the "stick-table" statement.
6574
6575 <cond> is an optional storage condition. It makes it possible to store
6576 certain criteria only when some conditions are met (or not met).
6577 For instance, it could be used to store the SSL session ID only
6578 when the response is a SSL server hello.
6579
6580 Some protocols or applications require complex stickiness rules and cannot
6581 always simply rely on cookies nor hashing. The "stick store-response"
6582 statement describes a rule to decide what to extract from the response and
6583 when to do it, in order to store it into a stickiness table for further
6584 requests to match it using the "stick match" statement. Obviously the
6585 extracted part must make sense and have a chance to be matched in a further
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006586 request. Storing an ID found in a header of a response makes sense.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02006587 See section 7 for a complete list of possible patterns and transformation
6588 rules.
6589
6590 The table has to be declared using the "stick-table" statement. It must be of
6591 a type compatible with the pattern. By default it is the one which is present
6592 in the same backend. It is possible to share a table with other backends by
6593 referencing it using the "table" keyword. If another table is referenced,
6594 the server's ID inside the backends are used. By default, all server IDs
6595 start at 1 in each backend, so the server ordering is enough. But in case of
6596 doubt, it is highly recommended to force server IDs using their "id" setting.
6597
6598 It is possible to restrict the conditions where a "stick store-response"
6599 statement will apply, using "if" or "unless" followed by a condition. This
6600 condition will be evaluated while parsing the response, so any criteria can
6601 be used. See section 7 for ACL based conditions.
6602
6603 There is no limit on the number of "stick store-response" statements, but
6604 there is a limit of 8 simultaneous stores per request or response. This
6605 makes it possible to store up to 8 criteria, all extracted from either the
6606 request or the response, regardless of the number of rules. Only the 8 first
6607 ones which match will be kept. Using this, it is possible to feed multiple
6608 tables at once in the hope to increase the chance to recognize a user on
Willy Tarreau9667a802013-12-09 12:52:13 +01006609 another protocol or access method. Using multiple store-response rules with
6610 the same table is possible and may be used to find the best criterion to rely
6611 on, by arranging the rules by decreasing preference order. Only the first
6612 extracted criterion for a given table will be stored. All subsequent store-
6613 response rules referencing the same table will be skipped and their ACLs will
6614 not be evaluated. However, even if a store-request rule references a table, a
6615 store-response rule may also use the same table. This means that each table
6616 may learn exactly one element from the request and one element from the
6617 response at once.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02006618
6619 The table will contain the real server that processed the request.
6620
6621 Example :
6622 # Learn SSL session ID from both request and response and create affinity.
6623 backend https
6624 mode tcp
6625 balance roundrobin
Cyril Bontédc4d9032012-04-08 21:57:39 +02006626 # maximum SSL session ID length is 32 bytes.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02006627 stick-table type binary len 32 size 30k expire 30m
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006628
Emeric Brun6a1cefa2010-09-24 18:15:17 +02006629 acl clienthello req_ssl_hello_type 1
6630 acl serverhello rep_ssl_hello_type 2
6631
6632 # use tcp content accepts to detects ssl client and server hello.
6633 tcp-request inspect-delay 5s
6634 tcp-request content accept if clienthello
6635
6636 # no timeout on response inspect delay by default.
6637 tcp-response content accept if serverhello
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006638
Emeric Brun6a1cefa2010-09-24 18:15:17 +02006639 # SSL session ID (SSLID) may be present on a client or server hello.
6640 # Its length is coded on 1 byte at offset 43 and its value starts
6641 # at offset 44.
6642
6643 # Match and learn on request if client hello.
6644 stick on payload_lv(43,1) if clienthello
6645
6646 # Learn on response if server hello.
6647 stick store-response payload_lv(43,1) if serverhello
Cyril Bontédc4d9032012-04-08 21:57:39 +02006648
Emeric Brun6a1cefa2010-09-24 18:15:17 +02006649 server s1 192.168.1.1:443
6650 server s2 192.168.1.1:443
6651
6652 See also : "stick-table", "stick on", and section 7 about ACLs and pattern
6653 extraction.
6654
6655
Willy Tarreaue9656522010-08-17 15:40:09 +02006656tcp-request connection <action> [{if | unless} <condition>]
6657 Perform an action on an incoming connection depending on a layer 4 condition
Willy Tarreau1a687942010-05-23 22:40:30 +02006658 May be used in sections : defaults | frontend | listen | backend
6659 no | yes | yes | no
Willy Tarreaue9656522010-08-17 15:40:09 +02006660 Arguments :
6661 <action> defines the action to perform if the condition applies. Valid
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02006662 actions include : "accept", "reject", "track-sc0", "track-sc1",
6663 "track-sc2", and "expect-proxy". See below for more details.
Willy Tarreau1a687942010-05-23 22:40:30 +02006664
Willy Tarreaue9656522010-08-17 15:40:09 +02006665 <condition> is a standard layer4-only ACL-based condition (see section 7).
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006666
6667 Immediately after acceptance of a new incoming connection, it is possible to
6668 evaluate some conditions to decide whether this connection must be accepted
Willy Tarreaue9656522010-08-17 15:40:09 +02006669 or dropped or have its counters tracked. Those conditions cannot make use of
6670 any data contents because the connection has not been read from yet, and the
6671 buffers are not yet allocated. This is used to selectively and very quickly
6672 accept or drop connections from various sources with a very low overhead. If
6673 some contents need to be inspected in order to take the decision, the
6674 "tcp-request content" statements must be used instead.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006675
Willy Tarreaue9656522010-08-17 15:40:09 +02006676 The "tcp-request connection" rules are evaluated in their exact declaration
6677 order. If no rule matches or if there is no rule, the default action is to
6678 accept the incoming connection. There is no specific limit to the number of
6679 rules which may be inserted.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006680
Willy Tarreaue9656522010-08-17 15:40:09 +02006681 Three types of actions are supported :
6682 - accept :
6683 accepts the connection if the condition is true (when used with "if")
6684 or false (when used with "unless"). The first such rule executed ends
6685 the rules evaluation.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006686
Willy Tarreaue9656522010-08-17 15:40:09 +02006687 - reject :
6688 rejects the connection if the condition is true (when used with "if")
6689 or false (when used with "unless"). The first such rule executed ends
6690 the rules evaluation. Rejected connections do not even become a
6691 session, which is why they are accounted separately for in the stats,
6692 as "denied connections". They are not considered for the session
6693 rate-limit and are not logged either. The reason is that these rules
6694 should only be used to filter extremely high connection rates such as
6695 the ones encountered during a massive DDoS attack. Under these extreme
6696 conditions, the simple action of logging each event would make the
6697 system collapse and would considerably lower the filtering capacity. If
6698 logging is absolutely desired, then "tcp-request content" rules should
6699 be used instead.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006700
Willy Tarreau4f0d9192013-06-11 20:40:55 +02006701 - expect-proxy layer4 :
6702 configures the client-facing connection to receive a PROXY protocol
6703 header before any byte is read from the socket. This is equivalent to
6704 having the "accept-proxy" keyword on the "bind" line, except that using
6705 the TCP rule allows the PROXY protocol to be accepted only for certain
6706 IP address ranges using an ACL. This is convenient when multiple layers
6707 of load balancers are passed through by traffic coming from public
6708 hosts.
6709
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02006710 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
Willy Tarreaue9656522010-08-17 15:40:09 +02006711 enables tracking of sticky counters from current connection. These
6712 rules do not stop evaluation and do not change default action. Two sets
6713 of counters may be simultaneously tracked by the same connection. The
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02006714 first "track-sc0" rule executed enables tracking of the counters of the
6715 specified table as the first set. The first "track-sc1" rule executed
Willy Tarreaue9656522010-08-17 15:40:09 +02006716 enables tracking of the counters of the specified table as the second
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02006717 set. The first "track-sc2" rule executed enables tracking of the
6718 counters of the specified table as the third set. It is a recommended
6719 practice to use the first set of counters for the per-frontend counters
6720 and the second set for the per-backend ones. But this is just a
6721 guideline, all may be used everywhere.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006722
Willy Tarreaue9656522010-08-17 15:40:09 +02006723 These actions take one or two arguments :
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01006724 <key> is mandatory, and is a pattern extraction rule as described
Willy Tarreau74ca5042013-06-11 23:12:07 +02006725 in section 7.3. It describes what elements of the incoming
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01006726 request or connection will be analysed, extracted, combined,
6727 and used to select which table entry to update the counters.
6728 Note that "tcp-request connection" cannot use content-based
6729 fetches.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006730
Willy Tarreaue9656522010-08-17 15:40:09 +02006731 <table> is an optional table to be used instead of the default one,
6732 which is the stick-table declared in the current proxy. All
6733 the counters for the matches and updates for the key will
6734 then be performed in that table until the session ends.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006735
Willy Tarreaue9656522010-08-17 15:40:09 +02006736 Once a "track-sc*" rule is executed, the key is looked up in the table
6737 and if it is not found, an entry is allocated for it. Then a pointer to
6738 that entry is kept during all the session's life, and this entry's
6739 counters are updated as often as possible, every time the session's
6740 counters are updated, and also systematically when the session ends.
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01006741 Counters are only updated for events that happen after the tracking has
6742 been started. For example, connection counters will not be updated when
6743 tracking layer 7 information, since the connection event happens before
6744 layer7 information is extracted.
6745
Willy Tarreaue9656522010-08-17 15:40:09 +02006746 If the entry tracks concurrent connection counters, one connection is
6747 counted for as long as the entry is tracked, and the entry will not
6748 expire during that time. Tracking counters also provides a performance
6749 advantage over just checking the keys, because only one table lookup is
6750 performed for all ACL checks that make use of it.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006751
Willy Tarreaue9656522010-08-17 15:40:09 +02006752 Note that the "if/unless" condition is optional. If no condition is set on
6753 the action, it is simply performed unconditionally. That can be useful for
6754 "track-sc*" actions as well as for changing the default action to a reject.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006755
Willy Tarreaue9656522010-08-17 15:40:09 +02006756 Example: accept all connections from white-listed hosts, reject too fast
6757 connection without counting them, and track accepted connections.
6758 This results in connection rate being capped from abusive sources.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006759
Willy Tarreaue9656522010-08-17 15:40:09 +02006760 tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006761 tcp-request connection reject if { src_conn_rate gt 10 }
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02006762 tcp-request connection track-sc0 src
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006763
Willy Tarreaue9656522010-08-17 15:40:09 +02006764 Example: accept all connections from white-listed hosts, count all other
6765 connections and reject too fast ones. This results in abusive ones
6766 being blocked as long as they don't slow down.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006767
Willy Tarreaue9656522010-08-17 15:40:09 +02006768 tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02006769 tcp-request connection track-sc0 src
6770 tcp-request connection reject if { sc0_conn_rate gt 10 }
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006771
Willy Tarreau4f0d9192013-06-11 20:40:55 +02006772 Example: enable the PROXY protocol for traffic coming from all known proxies.
6773
6774 tcp-request connection expect-proxy layer4 if { src -f proxies.lst }
6775
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006776 See section 7 about ACL usage.
6777
Willy Tarreaue9656522010-08-17 15:40:09 +02006778 See also : "tcp-request content", "stick-table"
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006779
6780
Willy Tarreaue9656522010-08-17 15:40:09 +02006781tcp-request content <action> [{if | unless} <condition>]
6782 Perform an action on a new session depending on a layer 4-7 condition
Willy Tarreau62644772008-07-16 18:36:06 +02006783 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaufb356202010-08-03 14:02:05 +02006784 no | yes | yes | yes
Willy Tarreaue9656522010-08-17 15:40:09 +02006785 Arguments :
6786 <action> defines the action to perform if the condition applies. Valid
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02006787 actions include : "accept", "reject", "track-sc0", "track-sc1",
6788 and "track-sc2". See "tcp-request connection" above for their
Willy Tarreaue25c9172013-05-28 18:32:20 +02006789 signification.
Willy Tarreau62644772008-07-16 18:36:06 +02006790
Willy Tarreaue9656522010-08-17 15:40:09 +02006791 <condition> is a standard layer 4-7 ACL-based condition (see section 7).
Willy Tarreau62644772008-07-16 18:36:06 +02006792
Willy Tarreaue9656522010-08-17 15:40:09 +02006793 A request's contents can be analysed at an early stage of request processing
6794 called "TCP content inspection". During this stage, ACL-based rules are
6795 evaluated every time the request contents are updated, until either an
6796 "accept" or a "reject" rule matches, or the TCP request inspection delay
6797 expires with no matching rule.
Willy Tarreau62644772008-07-16 18:36:06 +02006798
Willy Tarreaue9656522010-08-17 15:40:09 +02006799 The first difference between these rules and "tcp-request connection" rules
6800 is that "tcp-request content" rules can make use of contents to take a
6801 decision. Most often, these decisions will consider a protocol recognition or
6802 validity. The second difference is that content-based rules can be used in
6803 both frontends and backends. In frontends, they will be evaluated upon new
6804 connections. In backends, they will be evaluated once a session is assigned
6805 a backend. This means that a single frontend connection may be evaluated
6806 several times by one or multiple backends when a session gets reassigned
6807 (for instance after a client-side HTTP keep-alive request).
Willy Tarreau62644772008-07-16 18:36:06 +02006808
Willy Tarreaue9656522010-08-17 15:40:09 +02006809 Content-based rules are evaluated in their exact declaration order. If no
6810 rule matches or if there is no rule, the default action is to accept the
6811 contents. There is no specific limit to the number of rules which may be
6812 inserted.
Willy Tarreau62644772008-07-16 18:36:06 +02006813
Willy Tarreaue9656522010-08-17 15:40:09 +02006814 Three types of actions are supported :
6815 - accept :
6816 - reject :
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02006817 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>]
Willy Tarreau62644772008-07-16 18:36:06 +02006818
Willy Tarreaue9656522010-08-17 15:40:09 +02006819 They have the same meaning as their counter-parts in "tcp-request connection"
6820 so please refer to that section for a complete description.
Willy Tarreau62644772008-07-16 18:36:06 +02006821
Willy Tarreaue9656522010-08-17 15:40:09 +02006822 Also, it is worth noting that if sticky counters are tracked from a rule
6823 defined in a backend, this tracking will automatically end when the session
6824 releases the backend. That allows per-backend counter tracking even in case
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01006825 of HTTP keep-alive requests when the backend changes. This makes a subtle
6826 difference because tracking rules in "frontend" and "listen" section last for
6827 all the session, as opposed to the backend rules. The difference appears when
6828 some layer 7 information is tracked. While there is nothing mandatory about
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02006829 it, it is recommended to use the track-sc0 pointer to track per-frontend
6830 counters and track-sc1 to track per-backend counters, but this is just a
Willy Tarreaue25c9172013-05-28 18:32:20 +02006831 guideline and all counters may be used everywhere.
Willy Tarreau62644772008-07-16 18:36:06 +02006832
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006833 Note that the "if/unless" condition is optional. If no condition is set on
Willy Tarreaue9656522010-08-17 15:40:09 +02006834 the action, it is simply performed unconditionally. That can be useful for
6835 "track-sc*" actions as well as for changing the default action to a reject.
Willy Tarreau62644772008-07-16 18:36:06 +02006836
Willy Tarreaue9656522010-08-17 15:40:09 +02006837 It is perfectly possible to match layer 7 contents with "tcp-request content"
Willy Tarreauc0239e02012-04-16 14:42:55 +02006838 rules, since HTTP-specific ACL matches are able to preliminarily parse the
6839 contents of a buffer before extracting the required data. If the buffered
6840 contents do not parse as a valid HTTP message, then the ACL does not match.
6841 The parser which is involved there is exactly the same as for all other HTTP
6842 processing, so there is no risk of parsing something differently.
Willy Tarreau62644772008-07-16 18:36:06 +02006843
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01006844 Tracking layer7 information is also possible provided that the information
6845 are present when the rule is processed. The current solution for making the
6846 rule engine wait for such information is to set an inspect delay and to
6847 condition its execution with an ACL relying on such information.
6848
Willy Tarreau62644772008-07-16 18:36:06 +02006849 Example:
Willy Tarreaue9656522010-08-17 15:40:09 +02006850 # Accept HTTP requests containing a Host header saying "example.com"
6851 # and reject everything else.
6852 acl is_host_com hdr(Host) -i example.com
6853 tcp-request inspect-delay 30s
Willy Tarreauc0239e02012-04-16 14:42:55 +02006854 tcp-request content accept if is_host_com
Willy Tarreaue9656522010-08-17 15:40:09 +02006855 tcp-request content reject
6856
6857 Example:
Willy Tarreau62644772008-07-16 18:36:06 +02006858 # reject SMTP connection if client speaks first
6859 tcp-request inspect-delay 30s
6860 acl content_present req_len gt 0
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006861 tcp-request content reject if content_present
Willy Tarreau62644772008-07-16 18:36:06 +02006862
6863 # Forward HTTPS connection only if client speaks
6864 tcp-request inspect-delay 30s
6865 acl content_present req_len gt 0
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006866 tcp-request content accept if content_present
Willy Tarreaue9656522010-08-17 15:40:09 +02006867 tcp-request content reject
6868
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01006869 Example:
6870 # Track the last IP from X-Forwarded-For
6871 tcp-request inspect-delay 10s
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02006872 tcp-request content track-sc0 hdr(x-forwarded-for,-1) if HTTP
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01006873
6874 Example:
6875 # track request counts per "base" (concatenation of Host+URL)
6876 tcp-request inspect-delay 10s
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02006877 tcp-request content track-sc0 base table req-rate if HTTP
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01006878
Willy Tarreaue9656522010-08-17 15:40:09 +02006879 Example: track per-frontend and per-backend counters, block abusers at the
6880 frontend when the backend detects abuse.
6881
6882 frontend http
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02006883 # Use General Purpose Couter 0 in SC0 as a global abuse counter
Willy Tarreaue9656522010-08-17 15:40:09 +02006884 # protecting all our sites
6885 stick-table type ip size 1m expire 5m store gpc0
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02006886 tcp-request connection track-sc0 src
6887 tcp-request connection reject if { sc0_get_gpc0 gt 0 }
Willy Tarreaue9656522010-08-17 15:40:09 +02006888 ...
6889 use_backend http_dynamic if { path_end .php }
6890
6891 backend http_dynamic
6892 # if a source makes too fast requests to this dynamic site (tracked
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02006893 # by SC1), block it globally in the frontend.
Willy Tarreaue9656522010-08-17 15:40:09 +02006894 stick-table type ip size 1m expire 5m store http_req_rate(10s)
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02006895 acl click_too_fast sc1_http_req_rate gt 10
6896 acl mark_as_abuser sc0_inc_gpc0 gt 0
6897 tcp-request content track-sc1 src
Willy Tarreaue9656522010-08-17 15:40:09 +02006898 tcp-request content reject if click_too_fast mark_as_abuser
Willy Tarreau62644772008-07-16 18:36:06 +02006899
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006900 See section 7 about ACL usage.
Willy Tarreau62644772008-07-16 18:36:06 +02006901
Willy Tarreaue9656522010-08-17 15:40:09 +02006902 See also : "tcp-request connection", "tcp-request inspect-delay"
Willy Tarreau62644772008-07-16 18:36:06 +02006903
6904
6905tcp-request inspect-delay <timeout>
6906 Set the maximum allowed time to wait for data during content inspection
6907 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaufb356202010-08-03 14:02:05 +02006908 no | yes | yes | yes
Willy Tarreau62644772008-07-16 18:36:06 +02006909 Arguments :
6910 <timeout> is the timeout value specified in milliseconds by default, but
6911 can be in any other unit if the number is suffixed by the unit,
6912 as explained at the top of this document.
6913
6914 People using haproxy primarily as a TCP relay are often worried about the
6915 risk of passing any type of protocol to a server without any analysis. In
6916 order to be able to analyze the request contents, we must first withhold
6917 the data then analyze them. This statement simply enables withholding of
6918 data for at most the specified amount of time.
6919
Willy Tarreaufb356202010-08-03 14:02:05 +02006920 TCP content inspection applies very early when a connection reaches a
6921 frontend, then very early when the connection is forwarded to a backend. This
6922 means that a connection may experience a first delay in the frontend and a
6923 second delay in the backend if both have tcp-request rules.
6924
Willy Tarreau62644772008-07-16 18:36:06 +02006925 Note that when performing content inspection, haproxy will evaluate the whole
6926 rules for every new chunk which gets in, taking into account the fact that
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006927 those data are partial. If no rule matches before the aforementioned delay,
Willy Tarreau62644772008-07-16 18:36:06 +02006928 a last check is performed upon expiration, this time considering that the
Willy Tarreaud869b242009-03-15 14:43:58 +01006929 contents are definitive. If no delay is set, haproxy will not wait at all
6930 and will immediately apply a verdict based on the available information.
6931 Obviously this is unlikely to be very useful and might even be racy, so such
6932 setups are not recommended.
Willy Tarreau62644772008-07-16 18:36:06 +02006933
6934 As soon as a rule matches, the request is released and continues as usual. If
6935 the timeout is reached and no rule matches, the default policy will be to let
6936 it pass through unaffected.
6937
6938 For most protocols, it is enough to set it to a few seconds, as most clients
6939 send the full request immediately upon connection. Add 3 or more seconds to
6940 cover TCP retransmits but that's all. For some protocols, it may make sense
Willy Tarreaud72758d2010-01-12 10:42:19 +01006941 to use large values, for instance to ensure that the client never talks
Willy Tarreau62644772008-07-16 18:36:06 +02006942 before the server (eg: SMTP), or to wait for a client to talk before passing
6943 data to the server (eg: SSL). Note that the client timeout must cover at
Willy Tarreaub824b002010-09-29 16:36:16 +02006944 least the inspection delay, otherwise it will expire first. If the client
6945 closes the connection or if the buffer is full, the delay immediately expires
6946 since the contents will not be able to change anymore.
Willy Tarreau62644772008-07-16 18:36:06 +02006947
Willy Tarreau55165fe2009-05-10 12:02:55 +02006948 See also : "tcp-request content accept", "tcp-request content reject",
Willy Tarreau62644772008-07-16 18:36:06 +02006949 "timeout client".
6950
6951
Emeric Brun0a3b67f2010-09-24 15:34:53 +02006952tcp-response content <action> [{if | unless} <condition>]
6953 Perform an action on a session response depending on a layer 4-7 condition
6954 May be used in sections : defaults | frontend | listen | backend
6955 no | no | yes | yes
6956 Arguments :
6957 <action> defines the action to perform if the condition applies. Valid
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02006958 actions include : "accept", "close", "reject".
Emeric Brun0a3b67f2010-09-24 15:34:53 +02006959
6960 <condition> is a standard layer 4-7 ACL-based condition (see section 7).
6961
6962 Response contents can be analysed at an early stage of response processing
6963 called "TCP content inspection". During this stage, ACL-based rules are
6964 evaluated every time the response contents are updated, until either an
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02006965 "accept", "close" or a "reject" rule matches, or a TCP response inspection
6966 delay is set and expires with no matching rule.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02006967
6968 Most often, these decisions will consider a protocol recognition or validity.
6969
6970 Content-based rules are evaluated in their exact declaration order. If no
6971 rule matches or if there is no rule, the default action is to accept the
6972 contents. There is no specific limit to the number of rules which may be
6973 inserted.
6974
6975 Two types of actions are supported :
6976 - accept :
6977 accepts the response if the condition is true (when used with "if")
6978 or false (when used with "unless"). The first such rule executed ends
6979 the rules evaluation.
6980
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02006981 - close :
6982 immediately closes the connection with the server if the condition is
6983 true (when used with "if"), or false (when used with "unless"). The
6984 first such rule executed ends the rules evaluation. The main purpose of
6985 this action is to force a connection to be finished between a client
6986 and a server after an exchange when the application protocol expects
6987 some long time outs to elapse first. The goal is to eliminate idle
6988 connections which take signifiant resources on servers with certain
6989 protocols.
6990
Emeric Brun0a3b67f2010-09-24 15:34:53 +02006991 - reject :
6992 rejects the response if the condition is true (when used with "if")
6993 or false (when used with "unless"). The first such rule executed ends
Jamie Gloudonaaa21002012-08-25 00:18:33 -04006994 the rules evaluation. Rejected session are immediately closed.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02006995
6996 Note that the "if/unless" condition is optional. If no condition is set on
6997 the action, it is simply performed unconditionally. That can be useful for
6998 for changing the default action to a reject.
6999
Jamie Gloudonaaa21002012-08-25 00:18:33 -04007000 It is perfectly possible to match layer 7 contents with "tcp-response
7001 content" rules, but then it is important to ensure that a full response has
7002 been buffered, otherwise no contents will match. In order to achieve this,
7003 the best solution involves detecting the HTTP protocol during the inspection
Emeric Brun0a3b67f2010-09-24 15:34:53 +02007004 period.
7005
7006 See section 7 about ACL usage.
7007
7008 See also : "tcp-request content", "tcp-response inspect-delay"
7009
7010
7011tcp-response inspect-delay <timeout>
7012 Set the maximum allowed time to wait for a response during content inspection
7013 May be used in sections : defaults | frontend | listen | backend
7014 no | no | yes | yes
7015 Arguments :
7016 <timeout> is the timeout value specified in milliseconds by default, but
7017 can be in any other unit if the number is suffixed by the unit,
7018 as explained at the top of this document.
7019
7020 See also : "tcp-response content", "tcp-request inspect-delay".
7021
7022
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01007023timeout check <timeout>
7024 Set additional check timeout, but only after a connection has been already
7025 established.
7026
7027 May be used in sections: defaults | frontend | listen | backend
7028 yes | no | yes | yes
7029 Arguments:
7030 <timeout> is the timeout value specified in milliseconds by default, but
7031 can be in any other unit if the number is suffixed by the unit,
7032 as explained at the top of this document.
7033
7034 If set, haproxy uses min("timeout connect", "inter") as a connect timeout
7035 for check and "timeout check" as an additional read timeout. The "min" is
7036 used so that people running with *very* long "timeout connect" (eg. those
7037 who needed this due to the queue or tarpit) do not slow down their checks.
Willy Tarreaud7550a22010-02-10 05:10:19 +01007038 (Please also note that there is no valid reason to have such long connect
7039 timeouts, because "timeout queue" and "timeout tarpit" can always be used to
7040 avoid that).
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01007041
7042 If "timeout check" is not set haproxy uses "inter" for complete check
7043 timeout (connect + read) exactly like all <1.3.15 version.
7044
7045 In most cases check request is much simpler and faster to handle than normal
7046 requests and people may want to kick out laggy servers so this timeout should
Willy Tarreau41a340d2008-01-22 12:25:31 +01007047 be smaller than "timeout server".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01007048
7049 This parameter is specific to backends, but can be specified once for all in
7050 "defaults" sections. This is in fact one of the easiest solutions not to
7051 forget about it.
7052
Willy Tarreau41a340d2008-01-22 12:25:31 +01007053 See also: "timeout connect", "timeout queue", "timeout server",
7054 "timeout tarpit".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01007055
7056
Willy Tarreau0ba27502007-12-24 16:55:16 +01007057timeout client <timeout>
7058timeout clitimeout <timeout> (deprecated)
7059 Set the maximum inactivity time on the client side.
7060 May be used in sections : defaults | frontend | listen | backend
7061 yes | yes | yes | no
7062 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01007063 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01007064 can be in any other unit if the number is suffixed by the unit,
7065 as explained at the top of this document.
7066
7067 The inactivity timeout applies when the client is expected to acknowledge or
7068 send data. In HTTP mode, this timeout is particularly important to consider
7069 during the first phase, when the client sends the request, and during the
7070 response while it is reading data sent by the server. The value is specified
7071 in milliseconds by default, but can be in any other unit if the number is
7072 suffixed by the unit, as specified at the top of this document. In TCP mode
7073 (and to a lesser extent, in HTTP mode), it is highly recommended that the
7074 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01007075 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01007076 losses by specifying timeouts that are slightly above multiples of 3 seconds
Willy Tarreauce887fd2012-05-12 12:50:00 +02007077 (eg: 4 or 5 seconds). If some long-lived sessions are mixed with short-lived
7078 sessions (eg: WebSocket and HTTP), it's worth considering "timeout tunnel",
7079 which overrides "timeout client" and "timeout server" for tunnels.
Willy Tarreau0ba27502007-12-24 16:55:16 +01007080
7081 This parameter is specific to frontends, but can be specified once for all in
7082 "defaults" sections. This is in fact one of the easiest solutions not to
7083 forget about it. An unspecified timeout results in an infinite timeout, which
7084 is not recommended. Such a usage is accepted and works but reports a warning
7085 during startup because it may results in accumulation of expired sessions in
7086 the system if the system's timeouts are not configured either.
7087
7088 This parameter replaces the old, deprecated "clitimeout". It is recommended
7089 to use it to write new configurations. The form "timeout clitimeout" is
7090 provided only by backwards compatibility but its use is strongly discouraged.
7091
Willy Tarreauce887fd2012-05-12 12:50:00 +02007092 See also : "clitimeout", "timeout server", "timeout tunnel".
Willy Tarreau0ba27502007-12-24 16:55:16 +01007093
7094
7095timeout connect <timeout>
7096timeout contimeout <timeout> (deprecated)
7097 Set the maximum time to wait for a connection attempt to a server to succeed.
7098 May be used in sections : defaults | frontend | listen | backend
7099 yes | no | yes | yes
7100 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01007101 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01007102 can be in any other unit if the number is suffixed by the unit,
7103 as explained at the top of this document.
7104
7105 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01007106 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreaud72758d2010-01-12 10:42:19 +01007107 cover one or several TCP packet losses by specifying timeouts that are
Willy Tarreau0ba27502007-12-24 16:55:16 +01007108 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01007109 connect timeout also presets both queue and tarpit timeouts to the same value
7110 if these have not been specified.
Willy Tarreau0ba27502007-12-24 16:55:16 +01007111
7112 This parameter is specific to backends, but can be specified once for all in
7113 "defaults" sections. This is in fact one of the easiest solutions not to
7114 forget about it. An unspecified timeout results in an infinite timeout, which
7115 is not recommended. Such a usage is accepted and works but reports a warning
7116 during startup because it may results in accumulation of failed sessions in
7117 the system if the system's timeouts are not configured either.
7118
7119 This parameter replaces the old, deprecated "contimeout". It is recommended
7120 to use it to write new configurations. The form "timeout contimeout" is
7121 provided only by backwards compatibility but its use is strongly discouraged.
7122
Willy Tarreau41a340d2008-01-22 12:25:31 +01007123 See also: "timeout check", "timeout queue", "timeout server", "contimeout",
7124 "timeout tarpit".
Willy Tarreau0ba27502007-12-24 16:55:16 +01007125
7126
Willy Tarreaub16a5742010-01-10 14:46:16 +01007127timeout http-keep-alive <timeout>
7128 Set the maximum allowed time to wait for a new HTTP request to appear
7129 May be used in sections : defaults | frontend | listen | backend
7130 yes | yes | yes | yes
7131 Arguments :
7132 <timeout> is the timeout value specified in milliseconds by default, but
7133 can be in any other unit if the number is suffixed by the unit,
7134 as explained at the top of this document.
7135
7136 By default, the time to wait for a new request in case of keep-alive is set
7137 by "timeout http-request". However this is not always convenient because some
7138 people want very short keep-alive timeouts in order to release connections
7139 faster, and others prefer to have larger ones but still have short timeouts
7140 once the request has started to present itself.
7141
7142 The "http-keep-alive" timeout covers these needs. It will define how long to
7143 wait for a new HTTP request to start coming after a response was sent. Once
7144 the first byte of request has been seen, the "http-request" timeout is used
7145 to wait for the complete request to come. Note that empty lines prior to a
7146 new request do not refresh the timeout and are not counted as a new request.
7147
7148 There is also another difference between the two timeouts : when a connection
7149 expires during timeout http-keep-alive, no error is returned, the connection
7150 just closes. If the connection expires in "http-request" while waiting for a
7151 connection to complete, a HTTP 408 error is returned.
7152
7153 In general it is optimal to set this value to a few tens to hundreds of
7154 milliseconds, to allow users to fetch all objects of a page at once but
7155 without waiting for further clicks. Also, if set to a very small value (eg:
7156 1 millisecond) it will probably only accept pipelined requests but not the
7157 non-pipelined ones. It may be a nice trade-off for very large sites running
Patrick Mézard2382ad62010-05-09 10:43:32 +02007158 with tens to hundreds of thousands of clients.
Willy Tarreaub16a5742010-01-10 14:46:16 +01007159
7160 If this parameter is not set, the "http-request" timeout applies, and if both
7161 are not set, "timeout client" still applies at the lower level. It should be
7162 set in the frontend to take effect, unless the frontend is in TCP mode, in
7163 which case the HTTP backend's timeout will be used.
7164
7165 See also : "timeout http-request", "timeout client".
7166
7167
Willy Tarreau036fae02008-01-06 13:24:40 +01007168timeout http-request <timeout>
7169 Set the maximum allowed time to wait for a complete HTTP request
7170 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaucd7afc02009-07-12 10:03:17 +02007171 yes | yes | yes | yes
Willy Tarreau036fae02008-01-06 13:24:40 +01007172 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01007173 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau036fae02008-01-06 13:24:40 +01007174 can be in any other unit if the number is suffixed by the unit,
7175 as explained at the top of this document.
7176
7177 In order to offer DoS protection, it may be required to lower the maximum
7178 accepted time to receive a complete HTTP request without affecting the client
7179 timeout. This helps protecting against established connections on which
7180 nothing is sent. The client timeout cannot offer a good protection against
7181 this abuse because it is an inactivity timeout, which means that if the
7182 attacker sends one character every now and then, the timeout will not
7183 trigger. With the HTTP request timeout, no matter what speed the client
7184 types, the request will be aborted if it does not complete in time.
7185
7186 Note that this timeout only applies to the header part of the request, and
7187 not to any data. As soon as the empty line is received, this timeout is not
Willy Tarreaub16a5742010-01-10 14:46:16 +01007188 used anymore. It is used again on keep-alive connections to wait for a second
7189 request if "timeout http-keep-alive" is not set.
Willy Tarreau036fae02008-01-06 13:24:40 +01007190
7191 Generally it is enough to set it to a few seconds, as most clients send the
7192 full request immediately upon connection. Add 3 or more seconds to cover TCP
7193 retransmits but that's all. Setting it to very low values (eg: 50 ms) will
7194 generally work on local networks as long as there are no packet losses. This
7195 will prevent people from sending bare HTTP requests using telnet.
7196
7197 If this parameter is not set, the client timeout still applies between each
Willy Tarreaucd7afc02009-07-12 10:03:17 +02007198 chunk of the incoming request. It should be set in the frontend to take
7199 effect, unless the frontend is in TCP mode, in which case the HTTP backend's
7200 timeout will be used.
Willy Tarreau036fae02008-01-06 13:24:40 +01007201
Willy Tarreaub16a5742010-01-10 14:46:16 +01007202 See also : "timeout http-keep-alive", "timeout client".
Willy Tarreau036fae02008-01-06 13:24:40 +01007203
Willy Tarreau844e3c52008-01-11 16:28:18 +01007204
7205timeout queue <timeout>
7206 Set the maximum time to wait in the queue for a connection slot to be free
7207 May be used in sections : defaults | frontend | listen | backend
7208 yes | no | yes | yes
7209 Arguments :
7210 <timeout> is the timeout value specified in milliseconds by default, but
7211 can be in any other unit if the number is suffixed by the unit,
7212 as explained at the top of this document.
7213
7214 When a server's maxconn is reached, connections are left pending in a queue
7215 which may be server-specific or global to the backend. In order not to wait
7216 indefinitely, a timeout is applied to requests pending in the queue. If the
7217 timeout is reached, it is considered that the request will almost never be
7218 served, so it is dropped and a 503 error is returned to the client.
7219
7220 The "timeout queue" statement allows to fix the maximum time for a request to
7221 be left pending in a queue. If unspecified, the same value as the backend's
7222 connection timeout ("timeout connect") is used, for backwards compatibility
7223 with older versions with no "timeout queue" parameter.
7224
7225 See also : "timeout connect", "contimeout".
7226
7227
7228timeout server <timeout>
7229timeout srvtimeout <timeout> (deprecated)
7230 Set the maximum inactivity time on the server side.
7231 May be used in sections : defaults | frontend | listen | backend
7232 yes | no | yes | yes
7233 Arguments :
7234 <timeout> is the timeout value specified in milliseconds by default, but
7235 can be in any other unit if the number is suffixed by the unit,
7236 as explained at the top of this document.
7237
7238 The inactivity timeout applies when the server is expected to acknowledge or
7239 send data. In HTTP mode, this timeout is particularly important to consider
7240 during the first phase of the server's response, when it has to send the
7241 headers, as it directly represents the server's processing time for the
7242 request. To find out what value to put there, it's often good to start with
7243 what would be considered as unacceptable response times, then check the logs
7244 to observe the response time distribution, and adjust the value accordingly.
7245
7246 The value is specified in milliseconds by default, but can be in any other
7247 unit if the number is suffixed by the unit, as specified at the top of this
7248 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
7249 recommended that the client timeout remains equal to the server timeout in
7250 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01007251 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01007252 packet losses by specifying timeouts that are slightly above multiples of 3
Willy Tarreauce887fd2012-05-12 12:50:00 +02007253 seconds (eg: 4 or 5 seconds minimum). If some long-lived sessions are mixed
7254 with short-lived sessions (eg: WebSocket and HTTP), it's worth considering
7255 "timeout tunnel", which overrides "timeout client" and "timeout server" for
7256 tunnels.
Willy Tarreau844e3c52008-01-11 16:28:18 +01007257
7258 This parameter is specific to backends, but can be specified once for all in
7259 "defaults" sections. This is in fact one of the easiest solutions not to
7260 forget about it. An unspecified timeout results in an infinite timeout, which
7261 is not recommended. Such a usage is accepted and works but reports a warning
7262 during startup because it may results in accumulation of expired sessions in
7263 the system if the system's timeouts are not configured either.
7264
7265 This parameter replaces the old, deprecated "srvtimeout". It is recommended
7266 to use it to write new configurations. The form "timeout srvtimeout" is
7267 provided only by backwards compatibility but its use is strongly discouraged.
7268
Willy Tarreauce887fd2012-05-12 12:50:00 +02007269 See also : "srvtimeout", "timeout client" and "timeout tunnel".
Willy Tarreau844e3c52008-01-11 16:28:18 +01007270
7271
7272timeout tarpit <timeout>
Cyril Bonté78caf842010-03-10 22:41:43 +01007273 Set the duration for which tarpitted connections will be maintained
Willy Tarreau844e3c52008-01-11 16:28:18 +01007274 May be used in sections : defaults | frontend | listen | backend
7275 yes | yes | yes | yes
7276 Arguments :
7277 <timeout> is the tarpit duration specified in milliseconds by default, but
7278 can be in any other unit if the number is suffixed by the unit,
7279 as explained at the top of this document.
7280
7281 When a connection is tarpitted using "reqtarpit", it is maintained open with
7282 no activity for a certain amount of time, then closed. "timeout tarpit"
7283 defines how long it will be maintained open.
7284
7285 The value is specified in milliseconds by default, but can be in any other
7286 unit if the number is suffixed by the unit, as specified at the top of this
7287 document. If unspecified, the same value as the backend's connection timeout
7288 ("timeout connect") is used, for backwards compatibility with older versions
Cyril Bonté78caf842010-03-10 22:41:43 +01007289 with no "timeout tarpit" parameter.
Willy Tarreau844e3c52008-01-11 16:28:18 +01007290
7291 See also : "timeout connect", "contimeout".
7292
7293
Willy Tarreauce887fd2012-05-12 12:50:00 +02007294timeout tunnel <timeout>
7295 Set the maximum inactivity time on the client and server side for tunnels.
7296 May be used in sections : defaults | frontend | listen | backend
7297 yes | no | yes | yes
7298 Arguments :
7299 <timeout> is the timeout value specified in milliseconds by default, but
7300 can be in any other unit if the number is suffixed by the unit,
7301 as explained at the top of this document.
7302
Jamie Gloudonaaa21002012-08-25 00:18:33 -04007303 The tunnel timeout applies when a bidirectional connection is established
Willy Tarreauce887fd2012-05-12 12:50:00 +02007304 between a client and a server, and the connection remains inactive in both
7305 directions. This timeout supersedes both the client and server timeouts once
7306 the connection becomes a tunnel. In TCP, this timeout is used as soon as no
7307 analyser remains attached to either connection (eg: tcp content rules are
7308 accepted). In HTTP, this timeout is used when a connection is upgraded (eg:
7309 when switching to the WebSocket protocol, or forwarding a CONNECT request
7310 to a proxy), or after the first response when no keepalive/close option is
7311 specified.
7312
7313 The value is specified in milliseconds by default, but can be in any other
7314 unit if the number is suffixed by the unit, as specified at the top of this
7315 document. Whatever the expected normal idle time, it is a good practice to
7316 cover at least one or several TCP packet losses by specifying timeouts that
7317 are slightly above multiples of 3 seconds (eg: 4 or 5 seconds minimum).
7318
7319 This parameter is specific to backends, but can be specified once for all in
7320 "defaults" sections. This is in fact one of the easiest solutions not to
7321 forget about it.
7322
7323 Example :
7324 defaults http
7325 option http-server-close
7326 timeout connect 5s
7327 timeout client 30s
7328 timeout client 30s
7329 timeout server 30s
7330 timeout tunnel 1h # timeout to use with WebSocket and CONNECT
7331
7332 See also : "timeout client", "timeout server".
7333
7334
Willy Tarreau844e3c52008-01-11 16:28:18 +01007335transparent (deprecated)
7336 Enable client-side transparent proxying
7337 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +01007338 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +01007339 Arguments : none
7340
7341 This keyword was introduced in order to provide layer 7 persistence to layer
7342 3 load balancers. The idea is to use the OS's ability to redirect an incoming
7343 connection for a remote address to a local process (here HAProxy), and let
7344 this process know what address was initially requested. When this option is
7345 used, sessions without cookies will be forwarded to the original destination
7346 IP address of the incoming request (which should match that of another
7347 equipment), while requests with cookies will still be forwarded to the
7348 appropriate server.
7349
7350 The "transparent" keyword is deprecated, use "option transparent" instead.
7351
7352 Note that contrary to a common belief, this option does NOT make HAProxy
7353 present the client's IP to the server when establishing the connection.
7354
Willy Tarreau844e3c52008-01-11 16:28:18 +01007355 See also: "option transparent"
7356
William Lallemanda73203e2012-03-12 12:48:57 +01007357unique-id-format <string>
7358 Generate a unique ID for each request.
7359 May be used in sections : defaults | frontend | listen | backend
7360 yes | yes | yes | no
7361 Arguments :
7362 <string> is a log-format string.
7363
Cyril Bonté108cf6e2012-04-21 23:30:29 +02007364 This keyword creates a ID for each request using the custom log format. A
7365 unique ID is useful to trace a request passing through many components of
7366 a complex infrastructure. The newly created ID may also be logged using the
7367 %ID tag the log-format string.
William Lallemanda73203e2012-03-12 12:48:57 +01007368
Cyril Bonté108cf6e2012-04-21 23:30:29 +02007369 The format should be composed from elements that are guaranteed to be
7370 unique when combined together. For instance, if multiple haproxy instances
7371 are involved, it might be important to include the node name. It is often
7372 needed to log the incoming connection's source and destination addresses
7373 and ports. Note that since multiple requests may be performed over the same
7374 connection, including a request counter may help differentiate them.
7375 Similarly, a timestamp may protect against a rollover of the counter.
7376 Logging the process ID will avoid collisions after a service restart.
William Lallemanda73203e2012-03-12 12:48:57 +01007377
Cyril Bonté108cf6e2012-04-21 23:30:29 +02007378 It is recommended to use hexadecimal notation for many fields since it
7379 makes them more compact and saves space in logs.
William Lallemanda73203e2012-03-12 12:48:57 +01007380
Cyril Bonté108cf6e2012-04-21 23:30:29 +02007381 Example:
William Lallemanda73203e2012-03-12 12:48:57 +01007382
7383 unique-id-format %{+X}o\ %Ci:%Cp_%Fi:%Fp_%Ts_%rt:%pid
7384
7385 will generate:
7386
7387 7F000001:8296_7F00001E:1F90_4F7B0A69_0003:790A
7388
7389 See also: "unique-id-header"
7390
7391unique-id-header <name>
7392 Add a unique ID header in the HTTP request.
7393 May be used in sections : defaults | frontend | listen | backend
7394 yes | yes | yes | no
7395 Arguments :
7396 <name> is the name of the header.
7397
Cyril Bonté108cf6e2012-04-21 23:30:29 +02007398 Add a unique-id header in the HTTP request sent to the server, using the
7399 unique-id-format. It can't work if the unique-id-format doesn't exist.
William Lallemanda73203e2012-03-12 12:48:57 +01007400
Cyril Bonté108cf6e2012-04-21 23:30:29 +02007401 Example:
William Lallemanda73203e2012-03-12 12:48:57 +01007402
7403 unique-id-format %{+X}o\ %Ci:%Cp_%Fi:%Fp_%Ts_%rt:%pid
7404 unique-id-header X-Unique-ID
7405
7406 will generate:
7407
7408 X-Unique-ID: 7F000001:8296_7F00001E:1F90_4F7B0A69_0003:790A
7409
7410 See also: "unique-id-format"
Willy Tarreau844e3c52008-01-11 16:28:18 +01007411
7412use_backend <backend> if <condition>
7413use_backend <backend> unless <condition>
Willy Tarreau1d0dfb12009-07-07 15:10:31 +02007414 Switch to a specific backend if/unless an ACL-based condition is matched.
Willy Tarreau844e3c52008-01-11 16:28:18 +01007415 May be used in sections : defaults | frontend | listen | backend
7416 no | yes | yes | no
7417 Arguments :
7418 <backend> is the name of a valid backend or "listen" section.
7419
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007420 <condition> is a condition composed of ACLs, as described in section 7.
Willy Tarreau844e3c52008-01-11 16:28:18 +01007421
7422 When doing content-switching, connections arrive on a frontend and are then
7423 dispatched to various backends depending on a number of conditions. The
7424 relation between the conditions and the backends is described with the
Willy Tarreau1d0dfb12009-07-07 15:10:31 +02007425 "use_backend" keyword. While it is normally used with HTTP processing, it can
7426 also be used in pure TCP, either without content using stateless ACLs (eg:
7427 source address validation) or combined with a "tcp-request" rule to wait for
7428 some payload.
Willy Tarreau844e3c52008-01-11 16:28:18 +01007429
7430 There may be as many "use_backend" rules as desired. All of these rules are
7431 evaluated in their declaration order, and the first one which matches will
7432 assign the backend.
7433
7434 In the first form, the backend will be used if the condition is met. In the
7435 second form, the backend will be used if the condition is not met. If no
7436 condition is valid, the backend defined with "default_backend" will be used.
7437 If no default backend is defined, either the servers in the same section are
7438 used (in case of a "listen" section) or, in case of a frontend, no server is
7439 used and a 503 service unavailable response is returned.
7440
Willy Tarreau51aecc72009-07-12 09:47:04 +02007441 Note that it is possible to switch from a TCP frontend to an HTTP backend. In
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01007442 this case, either the frontend has already checked that the protocol is HTTP,
Willy Tarreau51aecc72009-07-12 09:47:04 +02007443 and backend processing will immediately follow, or the backend will wait for
7444 a complete HTTP request to get in. This feature is useful when a frontend
7445 must decode several protocols on a unique port, one of them being HTTP.
7446
Willy Tarreau1d0dfb12009-07-07 15:10:31 +02007447 See also: "default_backend", "tcp-request", and section 7 about ACLs.
Willy Tarreaud72758d2010-01-12 10:42:19 +01007448
Willy Tarreau036fae02008-01-06 13:24:40 +01007449
Willy Tarreau4a5cade2012-04-05 21:09:48 +02007450use-server <server> if <condition>
7451use-server <server> unless <condition>
7452 Only use a specific server if/unless an ACL-based condition is matched.
7453 May be used in sections : defaults | frontend | listen | backend
7454 no | no | yes | yes
7455 Arguments :
Cyril Bonté108cf6e2012-04-21 23:30:29 +02007456 <server> is the name of a valid server in the same backend section.
Willy Tarreau4a5cade2012-04-05 21:09:48 +02007457
7458 <condition> is a condition composed of ACLs, as described in section 7.
7459
7460 By default, connections which arrive to a backend are load-balanced across
7461 the available servers according to the configured algorithm, unless a
7462 persistence mechanism such as a cookie is used and found in the request.
7463
7464 Sometimes it is desirable to forward a particular request to a specific
7465 server without having to declare a dedicated backend for this server. This
7466 can be achieved using the "use-server" rules. These rules are evaluated after
7467 the "redirect" rules and before evaluating cookies, and they have precedence
7468 on them. There may be as many "use-server" rules as desired. All of these
7469 rules are evaluated in their declaration order, and the first one which
7470 matches will assign the server.
7471
7472 If a rule designates a server which is down, and "option persist" is not used
7473 and no force-persist rule was validated, it is ignored and evaluation goes on
7474 with the next rules until one matches.
7475
7476 In the first form, the server will be used if the condition is met. In the
7477 second form, the server will be used if the condition is not met. If no
7478 condition is valid, the processing continues and the server will be assigned
7479 according to other persistence mechanisms.
7480
7481 Note that even if a rule is matched, cookie processing is still performed but
7482 does not assign the server. This allows prefixed cookies to have their prefix
7483 stripped.
7484
7485 The "use-server" statement works both in HTTP and TCP mode. This makes it
7486 suitable for use with content-based inspection. For instance, a server could
7487 be selected in a farm according to the TLS SNI field. And if these servers
7488 have their weight set to zero, they will not be used for other traffic.
7489
7490 Example :
7491 # intercept incoming TLS requests based on the SNI field
7492 use-server www if { req_ssl_sni -i www.example.com }
7493 server www 192.168.0.1:443 weight 0
7494 use-server mail if { req_ssl_sni -i mail.example.com }
7495 server mail 192.168.0.1:587 weight 0
7496 use-server imap if { req_ssl_sni -i imap.example.com }
7497 server mail 192.168.0.1:993 weight 0
7498 # all the rest is forwarded to this server
7499 server default 192.168.0.2:443 check
7500
7501 See also: "use_backend", serction 5 about server and section 7 about ACLs.
7502
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007503
75045. Bind and Server options
7505--------------------------
7506
7507The "bind", "server" and "default-server" keywords support a number of settings
7508depending on some build options and on the system HAProxy was built on. These
7509settings generally each consist in one word sometimes followed by a value,
7510written on the same line as the "bind" or "server" line. All these options are
7511described in this section.
7512
7513
75145.1. Bind options
7515-----------------
7516
7517The "bind" keyword supports a certain number of settings which are all passed
7518as arguments on the same line. The order in which those arguments appear makes
7519no importance, provided that they appear after the bind address. All of these
7520parameters are optional. Some of them consist in a single words (booleans),
7521while other ones expect a value after them. In this case, the value must be
7522provided immediately after the setting name.
7523
7524The currently supported settings are the following ones.
7525
7526accept-proxy
7527 Enforces the use of the PROXY protocol over any connection accepted by any of
7528 the sockets declared on the same line. The PROXY protocol dictates the layer
7529 3/4 addresses of the incoming connection to be used everywhere an address is
7530 used, with the only exception of "tcp-request connection" rules which will
7531 only see the real connection address. Logs will reflect the addresses
7532 indicated in the protocol, unless it is violated, in which case the real
7533 address will still be used. This keyword combined with support from external
7534 components can be used as an efficient and reliable alternative to the
7535 X-Forwarded-For mechanism which is not always reliable and not even always
Willy Tarreau4f0d9192013-06-11 20:40:55 +02007536 usable. See also "tcp-request connection expect-proxy" for a finer-grained
7537 setting of which client is allowed to use the protocol.
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007538
Willy Tarreauab861d32013-04-02 02:30:41 +02007539alpn <protocols>
7540 This enables the TLS ALPN extension and advertises the specified protocol
7541 list as supported on top of ALPN. The protocol list consists in a comma-
7542 delimited list of protocol names, for instance: "http/1.1,http/1.0" (without
7543 quotes). This requires that the SSL library is build with support for TLS
7544 extensions enabled (check with haproxy -vv). The ALPN extension replaces the
7545 initial NPN extension.
7546
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007547backlog <backlog>
7548 Sets the socket's backlog to this value. If unspecified, the frontend's
7549 backlog is used instead, which generally defaults to the maxconn value.
7550
Emeric Brun7fb34422012-09-28 15:26:15 +02007551ecdhe <named curve>
7552 This setting is only available when support for OpenSSL was built in. It sets
Emeric Brun6924ef82013-03-06 14:08:53 +01007553 the named curve (RFC 4492) used to generate ECDH ephemeral keys. By default,
7554 used named curve is prime256v1.
Emeric Brun7fb34422012-09-28 15:26:15 +02007555
Emeric Brunfd33a262012-10-11 16:28:27 +02007556ca-file <cafile>
Emeric Brun1a073b42012-09-28 17:07:34 +02007557 This setting is only available when support for OpenSSL was built in. It
7558 designates a PEM file from which to load CA certificates used to verify
7559 client's certificate.
7560
Emeric Brunb6dc9342012-09-28 17:55:37 +02007561ca-ignore-err [all|<errorID>,...]
7562 This setting is only available when support for OpenSSL was built in.
7563 Sets a comma separated list of errorIDs to ignore during verify at depth > 0.
7564 If set to 'all', all errors are ignored. SSL handshake is not aborted if an
7565 error is ignored.
7566
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007567ciphers <ciphers>
7568 This setting is only available when support for OpenSSL was built in. It sets
7569 the string describing the list of cipher algorithms ("cipher suite") that are
7570 negociated during the SSL/TLS handshake. The format of the string is defined
7571 in "man 1 ciphers" from OpenSSL man pages, and can be for instance a string
7572 such as "AES:ALL:!aNULL:!eNULL:+RC4:@STRENGTH" (without quotes).
7573
Emeric Brunfd33a262012-10-11 16:28:27 +02007574crl-file <crlfile>
Emeric Brun1a073b42012-09-28 17:07:34 +02007575 This setting is only available when support for OpenSSL was built in. It
7576 designates a PEM file from which to load certificate revocation list used
7577 to verify client's certificate.
7578
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007579crt <cert>
Alex Davies0fbf0162013-03-02 16:04:50 +00007580 This setting is only available when support for OpenSSL was built in. It
7581 designates a PEM file containing both the required certificates and any
7582 associated private keys. This file can be built by concatenating multiple
7583 PEM files into one (e.g. cat cert.pem key.pem > combined.pem). If your CA
7584 requires an intermediate certificate, this can also be concatenated into this
7585 file.
7586
7587 If the OpenSSL used supports Diffie-Hellman, parameters present in this file
7588 are loaded.
7589
7590 If a directory name is used instead of a PEM file, then all files found in
7591 that directory will be loaded. This directive may be specified multiple times
7592 in order to load certificates from multiple files or directories. The
7593 certificates will be presented to clients who provide a valid TLS Server Name
7594 Indication field matching one of their CN or alt subjects. Wildcards are
7595 supported, where a wildcard character '*' is used instead of the first
7596 hostname component (eg: *.example.org matches www.example.org but not
7597 www.sub.example.org).
7598
7599 If no SNI is provided by the client or if the SSL library does not support
7600 TLS extensions, or if the client provides an SNI hostname which does not
7601 match any certificate, then the first loaded certificate will be presented.
7602 This means that when loading certificates from a directory, it is highly
7603 recommended to load the default one first as a file.
7604
Emeric Brune032bfa2012-09-28 13:01:45 +02007605 Note that the same cert may be loaded multiple times without side effects.
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007606
Alex Davies0fbf0162013-03-02 16:04:50 +00007607 Some CAs (such as Godaddy) offer a drop down list of server types that do not
7608 include HAProxy when obtaining a certificate. If this happens be sure to
7609 choose a webserver that the CA believes requires a intermediate CA (for
7610 Godaddy, selection Apache Tomcat will get the correct bundle, but many
7611 others, e.g. nginx, result in a wrong bundle that will not work for some
7612 clients).
7613
Emeric Brunb6dc9342012-09-28 17:55:37 +02007614crt-ignore-err <errors>
Alex Davies0fbf0162013-03-02 16:04:50 +00007615 This setting is only available when support for OpenSSL was built in. Sets a
7616 comma separated list of errorIDs to ignore during verify at depth == 0. If
7617 set to 'all', all errors are ignored. SSL handshake is not abored if an error
7618 is ignored.
Emeric Brunb6dc9342012-09-28 17:55:37 +02007619
Emmanuel Hocdetfe616562013-01-22 15:31:15 +01007620crt-list <file>
7621 This setting is only available when support for OpenSSL was built in. It
Emmanuel Hocdet7c41a1b2013-05-07 20:20:06 +02007622 designates a list of PEM file with an optional list of SNI filter per
7623 certificate, with the following format for each line :
Emmanuel Hocdetfe616562013-01-22 15:31:15 +01007624
Emmanuel Hocdet7c41a1b2013-05-07 20:20:06 +02007625 <crtfile> [[!]<snifilter> ...]
Emmanuel Hocdetfe616562013-01-22 15:31:15 +01007626
Emmanuel Hocdet7c41a1b2013-05-07 20:20:06 +02007627 Wildcards are supported in the SNI filter. Negative filter are also supported,
7628 only useful in combination with a wildcard filter to exclude a particular SNI.
7629 The certificates will be presented to clients who provide a valid TLS Server
7630 Name Indication field matching one of the SNI filters. If no SNI filter is
7631 specified, the CN and alt subjects are used. This directive may be specified
7632 multiple times. See the "crt" option for more information. The default
7633 certificate is still needed to meet OpenSSL expectations. If it is not used,
7634 the 'strict-sni' option may be used.
Emmanuel Hocdetfe616562013-01-22 15:31:15 +01007635
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007636defer-accept
7637 Is an optional keyword which is supported only on certain Linux kernels. It
7638 states that a connection will only be accepted once some data arrive on it,
7639 or at worst after the first retransmit. This should be used only on protocols
7640 for which the client talks first (eg: HTTP). It can slightly improve
7641 performance by ensuring that most of the request is already available when
7642 the connection is accepted. On the other hand, it will not be able to detect
7643 connections which don't talk. It is important to note that this option is
7644 broken in all kernels up to 2.6.31, as the connection is never accepted until
7645 the client talks. This can cause issues with front firewalls which would see
7646 an established connection while the proxy will only see it in SYN_RECV. This
7647 option is only supported on TCPv4/TCPv6 sockets and ignored by other ones.
7648
Emeric Brun2cb7ae52012-10-05 14:14:21 +02007649force-sslv3
7650 This option enforces use of SSLv3 only on SSL connections instanciated from
7651 this listener. SSLv3 is generally less expensive than the TLS counterparts
7652 for high connection rates. See also "force-tls*", "no-sslv3", and "no-tls*".
7653
7654force-tlsv10
7655 This option enforces use of TLSv1.0 only on SSL connections instanciated from
7656 this listener. See also "force-tls*", "no-sslv3", and "no-tls*".
7657
7658force-tlsv11
7659 This option enforces use of TLSv1.1 only on SSL connections instanciated from
7660 this listener. See also "force-tls*", "no-sslv3", and "no-tls*".
7661
7662force-tlsv12
7663 This option enforces use of TLSv1.2 only on SSL connections instanciated from
7664 this listener. See also "force-tls*", "no-sslv3", and "no-tls*".
7665
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007666gid <gid>
7667 Sets the group of the UNIX sockets to the designated system gid. It can also
7668 be set by default in the global section's "unix-bind" statement. Note that
7669 some platforms simply ignore this. This setting is equivalent to the "group"
7670 setting except that the group ID is used instead of its name. This setting is
7671 ignored by non UNIX sockets.
7672
7673group <group>
7674 Sets the group of the UNIX sockets to the designated system group. It can
7675 also be set by default in the global section's "unix-bind" statement. Note
7676 that some platforms simply ignore this. This setting is equivalent to the
7677 "gid" setting except that the group name is used instead of its gid. This
7678 setting is ignored by non UNIX sockets.
7679
7680id <id>
7681 Fixes the socket ID. By default, socket IDs are automatically assigned, but
7682 sometimes it is more convenient to fix them to ease monitoring. This value
7683 must be strictly positive and unique within the listener/frontend. This
7684 option can only be used when defining only a single socket.
7685
7686interface <interface>
Lukas Tribusfce2e962013-02-12 22:13:19 +01007687 Restricts the socket to a specific interface. When specified, only packets
7688 received from that particular interface are processed by the socket. This is
7689 currently only supported on Linux. The interface must be a primary system
7690 interface, not an aliased interface. It is also possible to bind multiple
7691 frontends to the same address if they are bound to different interfaces. Note
7692 that binding to a network interface requires root privileges. This parameter
7693 is only compatible with TCPv4/TCPv6 sockets.
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007694
Willy Tarreauabb175f2012-09-24 12:43:26 +02007695level <level>
7696 This setting is used with the stats sockets only to restrict the nature of
7697 the commands that can be issued on the socket. It is ignored by other
7698 sockets. <level> can be one of :
7699 - "user" is the least privileged level ; only non-sensitive stats can be
7700 read, and no change is allowed. It would make sense on systems where it
7701 is not easy to restrict access to the socket.
7702 - "operator" is the default level and fits most common uses. All data can
7703 be read, and only non-sensitive changes are permitted (eg: clear max
7704 counters).
7705 - "admin" should be used with care, as everything is permitted (eg: clear
7706 all counters).
7707
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007708maxconn <maxconn>
7709 Limits the sockets to this number of concurrent connections. Extraneous
7710 connections will remain in the system's backlog until a connection is
7711 released. If unspecified, the limit will be the same as the frontend's
7712 maxconn. Note that in case of port ranges or multiple addresses, the same
7713 value will be applied to each socket. This setting enables different
7714 limitations on expensive sockets, for instance SSL entries which may easily
7715 eat all memory.
7716
7717mode <mode>
7718 Sets the octal mode used to define access permissions on the UNIX socket. It
7719 can also be set by default in the global section's "unix-bind" statement.
7720 Note that some platforms simply ignore this. This setting is ignored by non
7721 UNIX sockets.
7722
7723mss <maxseg>
7724 Sets the TCP Maximum Segment Size (MSS) value to be advertised on incoming
7725 connections. This can be used to force a lower MSS for certain specific
7726 ports, for instance for connections passing through a VPN. Note that this
7727 relies on a kernel feature which is theoretically supported under Linux but
7728 was buggy in all versions prior to 2.6.28. It may or may not work on other
7729 operating systems. It may also not change the advertised value but change the
7730 effective size of outgoing segments. The commonly advertised value for TCPv4
7731 over Ethernet networks is 1460 = 1500(MTU) - 40(IP+TCP). If this value is
7732 positive, it will be used as the advertised MSS. If it is negative, it will
7733 indicate by how much to reduce the incoming connection's advertised MSS for
7734 outgoing segments. This parameter is only compatible with TCP v4/v6 sockets.
7735
7736name <name>
7737 Sets an optional name for these sockets, which will be reported on the stats
7738 page.
7739
7740nice <nice>
7741 Sets the 'niceness' of connections initiated from the socket. Value must be
7742 in the range -1024..1024 inclusive, and defaults to zero. Positive values
7743 means that such connections are more friendly to others and easily offer
7744 their place in the scheduler. On the opposite, negative values mean that
7745 connections want to run with a higher priority than others. The difference
7746 only happens under high loads when the system is close to saturation.
7747 Negative values are appropriate for low-latency or administration services,
7748 and high values are generally recommended for CPU intensive tasks such as SSL
7749 processing or bulk transfers which are less sensible to latency. For example,
7750 it may make sense to use a positive value for an SMTP socket and a negative
7751 one for an RDP socket.
7752
Emeric Brun9b3009b2012-10-05 11:55:06 +02007753no-sslv3
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007754 This setting is only available when support for OpenSSL was built in. It
7755 disables support for SSLv3 on any sockets instanciated from the listener when
7756 SSL is supported. Note that SSLv2 is forced disabled in the code and cannot
Emeric Brun2cb7ae52012-10-05 14:14:21 +02007757 be enabled using any configuration option. See also "force-tls*",
7758 and "force-sslv3".
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007759
Emeric Brun90ad8722012-10-02 14:00:59 +02007760no-tls-tickets
7761 This setting is only available when support for OpenSSL was built in. It
7762 disables the stateless session resumption (RFC 5077 TLS Ticket
7763 extension) and force to use stateful session resumption. Stateless
7764 session resumption is more expensive in CPU usage.
7765
Emeric Brun9b3009b2012-10-05 11:55:06 +02007766no-tlsv10
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007767 This setting is only available when support for OpenSSL was built in. It
Emeric Brun2cb7ae52012-10-05 14:14:21 +02007768 disables support for TLSv1.0 on any sockets instanciated from the listener
7769 when SSL is supported. Note that SSLv2 is forced disabled in the code and
7770 cannot be enabled using any configuration option. See also "force-tls*",
7771 and "force-sslv3".
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007772
Emeric Brun9b3009b2012-10-05 11:55:06 +02007773no-tlsv11
Emeric Brunf5da4932012-09-28 19:42:54 +02007774 This setting is only available when support for OpenSSL was built in. It
Emeric Brun2cb7ae52012-10-05 14:14:21 +02007775 disables support for TLSv1.1 on any sockets instanciated from the listener
7776 when SSL is supported. Note that SSLv2 is forced disabled in the code and
7777 cannot be enabled using any configuration option. See also "force-tls*",
7778 and "force-sslv3".
Emeric Brunf5da4932012-09-28 19:42:54 +02007779
Emeric Brun9b3009b2012-10-05 11:55:06 +02007780no-tlsv12
Emeric Brunf5da4932012-09-28 19:42:54 +02007781 This setting is only available when support for OpenSSL was built in. It
Emeric Brun2cb7ae52012-10-05 14:14:21 +02007782 disables support for TLSv1.2 on any sockets instanciated from the listener
7783 when SSL is supported. Note that SSLv2 is forced disabled in the code and
7784 cannot be enabled using any configuration option. See also "force-tls*",
7785 and "force-sslv3".
Emeric Brunf5da4932012-09-28 19:42:54 +02007786
Willy Tarreau6c9a3d52012-10-18 18:57:14 +02007787npn <protocols>
7788 This enables the NPN TLS extension and advertises the specified protocol list
7789 as supported on top of NPN. The protocol list consists in a comma-delimited
7790 list of protocol names, for instance: "http/1.1,http/1.0" (without quotes).
7791 This requires that the SSL library is build with support for TLS extensions
Willy Tarreauab861d32013-04-02 02:30:41 +02007792 enabled (check with haproxy -vv). Note that the NPN extension has been
7793 replaced with the ALPN extension (see the "alpn" keyword).
Willy Tarreau6c9a3d52012-10-18 18:57:14 +02007794
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007795ssl
7796 This setting is only available when support for OpenSSL was built in. It
7797 enables SSL deciphering on connections instanciated from this listener. A
7798 certificate is necessary (see "crt" above). All contents in the buffers will
7799 appear in clear text, so that ACLs and HTTP processing will only have access
7800 to deciphered contents.
7801
Emmanuel Hocdet65623372013-01-24 17:17:15 +01007802strict-sni
7803 This setting is only available when support for OpenSSL was built in. The
7804 SSL/TLS negotiation is allow only if the client provided an SNI which match
7805 a certificate. The default certificate is not used.
7806 See the "crt" option for more information.
7807
Willy Tarreau1c862c52012-10-05 16:21:00 +02007808tfo
Lukas Tribus0defb902013-02-13 23:35:39 +01007809 Is an optional keyword which is supported only on Linux kernels >= 3.7. It
Willy Tarreau1c862c52012-10-05 16:21:00 +02007810 enables TCP Fast Open on the listening socket, which means that clients which
7811 support this feature will be able to send a request and receive a response
7812 during the 3-way handshake starting from second connection, thus saving one
7813 round-trip after the first connection. This only makes sense with protocols
7814 that use high connection rates and where each round trip matters. This can
7815 possibly cause issues with many firewalls which do not accept data on SYN
7816 packets, so this option should only be enabled once well tested. This option
Lukas Tribus0999f762013-04-02 16:43:24 +02007817 is only supported on TCPv4/TCPv6 sockets and ignored by other ones. You may
7818 need to build HAProxy with USE_TFO=1 if your libc doesn't define
7819 TCP_FASTOPEN.
Willy Tarreau1c862c52012-10-05 16:21:00 +02007820
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007821transparent
7822 Is an optional keyword which is supported only on certain Linux kernels. It
7823 indicates that the addresses will be bound even if they do not belong to the
7824 local machine, and that packets targeting any of these addresses will be
7825 intercepted just as if the addresses were locally configured. This normally
7826 requires that IP forwarding is enabled. Caution! do not use this with the
7827 default address '*', as it would redirect any traffic for the specified port.
7828 This keyword is available only when HAProxy is built with USE_LINUX_TPROXY=1.
7829 This parameter is only compatible with TCPv4 and TCPv6 sockets, depending on
7830 kernel version. Some distribution kernels include backports of the feature,
7831 so check for support with your vendor.
7832
Willy Tarreau77e3af92012-11-24 15:07:23 +01007833v4v6
7834 Is an optional keyword which is supported only on most recent systems
7835 including Linux kernels >= 2.4.21. It is used to bind a socket to both IPv4
7836 and IPv6 when it uses the default address. Doing so is sometimes necessary
7837 on systems which bind to IPv6 only by default. It has no effect on non-IPv6
7838 sockets, and is overriden by the "v6only" option.
7839
Willy Tarreau9b6700f2012-11-24 11:55:28 +01007840v6only
7841 Is an optional keyword which is supported only on most recent systems
7842 including Linux kernels >= 2.4.21. It is used to bind a socket to IPv6 only
7843 when it uses the default address. Doing so is sometimes preferred to doing it
Willy Tarreau77e3af92012-11-24 15:07:23 +01007844 system-wide as it is per-listener. It has no effect on non-IPv6 sockets and
7845 has precedence over the "v4v6" option.
Willy Tarreau9b6700f2012-11-24 11:55:28 +01007846
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007847uid <uid>
7848 Sets the owner of the UNIX sockets to the designated system uid. It can also
7849 be set by default in the global section's "unix-bind" statement. Note that
7850 some platforms simply ignore this. This setting is equivalent to the "user"
7851 setting except that the user numeric ID is used instead of its name. This
7852 setting is ignored by non UNIX sockets.
7853
7854user <user>
7855 Sets the owner of the UNIX sockets to the designated system user. It can also
7856 be set by default in the global section's "unix-bind" statement. Note that
7857 some platforms simply ignore this. This setting is equivalent to the "uid"
7858 setting except that the user name is used instead of its uid. This setting is
7859 ignored by non UNIX sockets.
7860
Emeric Brun1a073b42012-09-28 17:07:34 +02007861verify [none|optional|required]
7862 This setting is only available when support for OpenSSL was built in. If set
7863 to 'none', client certificate is not requested. This is the default. In other
7864 cases, a client certificate is requested. If the client does not provide a
7865 certificate after the request and if 'verify' is set to 'required', then the
7866 handshake is aborted, while it would have succeeded if set to 'optional'. The
Emeric Brunfd33a262012-10-11 16:28:27 +02007867 certificate provided by the client is always verified using CAs from
7868 'ca-file' and optional CRLs from 'crl-file'. On verify failure the handshake
7869 is aborted, regardless of the 'verify' option, unless the error code exactly
7870 matches one of those listed with 'ca-ignore-err' or 'crt-ignore-err'.
Willy Tarreau4a5cade2012-04-05 21:09:48 +02007871
Willy Tarreaub6205fd2012-09-24 12:27:33 +020078725.2. Server and default-server options
Cyril Bontéf0c60612010-02-06 14:44:47 +01007873------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02007874
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01007875The "server" and "default-server" keywords support a certain number of settings
7876which are all passed as arguments on the server line. The order in which those
7877arguments appear does not count, and they are all optional. Some of those
7878settings are single words (booleans) while others expect one or several values
7879after them. In this case, the values must immediately follow the setting name.
7880Except default-server, all those settings must be specified after the server's
7881address if they are used:
Willy Tarreau6a06a402007-07-15 20:15:28 +02007882
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007883 server <name> <address>[:port] [settings ...]
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01007884 default-server [settings ...]
Willy Tarreau6a06a402007-07-15 20:15:28 +02007885
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007886The currently supported settings are the following ones.
Willy Tarreau0ba27502007-12-24 16:55:16 +01007887
Willy Tarreauceb4ac92012-04-28 00:41:46 +02007888addr <ipv4|ipv6>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007889 Using the "addr" parameter, it becomes possible to use a different IP address
7890 to send health-checks. On some servers, it may be desirable to dedicate an IP
7891 address to specific component able to perform complex tests which are more
7892 suitable to health-checks than the application. This parameter is ignored if
7893 the "check" parameter is not set. See also the "port" parameter.
Willy Tarreau6a06a402007-07-15 20:15:28 +02007894
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007895 Supported in default-server: No
7896
Simon Hormand60d6912013-11-25 10:46:36 +09007897agent-check
7898 Enable an auxiliary agent check which is run independently of a regular
7899 health check. An agent health check is performed by making a TCP
7900 connection to the port set by the "agent-port" parameter" and reading
7901 an ASCII string. The string should have one of the following forms:
7902
7903 * An ASCII representation of an positive integer percentage.
7904 e.g. "75%"
7905
7906 Values in this format will set the weight proportional to the initial
7907 weight of a server as configured when haproxy starts.
7908
7909 * The string "drain".
7910
7911 This will cause the weight of a server to be set to 0, and thus it will
7912 not accept any new connections other than those that are accepted via
7913 persistence.
7914
7915 * The string "down", optionally followed by a description string.
7916
7917 Mark the server as down and log the description string as the reason.
7918
7919 * The string "stopped", optionally followed by a description string.
7920
7921 This currently has the same behaviour as "down".
7922
7923 * The string "fail", optionally followed by a description string.
7924
7925 This currently has the same behaviour as "down".
7926
Simon Horman2f1f9552013-11-25 10:46:37 +09007927 Failure to connect to the agent is not considered an error as connectivity
7928 is tested by the regular health check which is enabled by the "check"
7929 parameter.
7930
Simon Hormand60d6912013-11-25 10:46:36 +09007931 Requires the ""agent-port" parameter to be set.
7932 See also the "agent-check" parameter.
7933
7934 Supported in default-server: No
7935
7936agent-inter <delay>
7937 The "agent-inter" parameter sets the interval between two agent checks
7938 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
7939
7940 Just as with every other time-based parameter, it may be entered in any
7941 other explicit unit among { us, ms, s, m, h, d }. The "agent-inter"
7942 parameter also serves as a timeout for agent checks "timeout check" is
7943 not set. In order to reduce "resonance" effects when multiple servers are
7944 hosted on the same hardware, the agent and health checks of all servers
7945 are started with a small time offset between them. It is also possible to
7946 add some random noise in the agent and health checks interval using the
7947 global "spread-checks" keyword. This makes sense for instance when a lot
7948 of backends use the same servers.
7949
7950 See also the "agent-check" and "agent-port" parameters.
7951
7952 Supported in default-server: Yes
7953
7954agent-port <port>
7955 The "agent-port" parameter sets the TCP port used for agent checks.
7956
7957 See also the "agent-check" and "agent-inter" parameters.
7958
7959 Supported in default-server: Yes
7960
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007961backup
7962 When "backup" is present on a server line, the server is only used in load
7963 balancing when all other non-backup servers are unavailable. Requests coming
7964 with a persistence cookie referencing the server will always be served
7965 though. By default, only the first operational backup server is used, unless
7966 the "allbackups" option is set in the backend. See also the "allbackups"
7967 option.
Willy Tarreau6a06a402007-07-15 20:15:28 +02007968
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007969 Supported in default-server: No
7970
Emeric Brunef42d922012-10-11 16:11:36 +02007971ca-file <cafile>
7972 This setting is only available when support for OpenSSL was built in. It
7973 designates a PEM file from which to load CA certificates used to verify
7974 server's certificate.
7975
7976 Supported in default-server: No
7977
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007978check
7979 This option enables health checks on the server. By default, a server is
Patrick Mézardb7aeec62012-01-22 16:01:22 +01007980 always considered available. If "check" is set, the server is available when
7981 accepting periodic TCP connections, to ensure that it is really able to serve
7982 requests. The default address and port to send the tests to are those of the
7983 server, and the default source is the same as the one defined in the
7984 backend. It is possible to change the address using the "addr" parameter, the
7985 port using the "port" parameter, the source address using the "source"
7986 address, and the interval and timers using the "inter", "rise" and "fall"
Simon Hormanafc47ee2013-11-25 10:46:35 +09007987 parameters. The request method is define in the backend using the "httpchk",
7988 "smtpchk", "mysql-check", "pgsql-check" and "ssl-hello-chk" options. Please
7989 refer to those options and parameters for more information.
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007990
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007991 Supported in default-server: No
7992
Willy Tarreau6c16adc2012-10-05 00:04:16 +02007993check-send-proxy
7994 This option forces emission of a PROXY protocol line with outgoing health
7995 checks, regardless of whether the server uses send-proxy or not for the
7996 normal traffic. By default, the PROXY protocol is enabled for health checks
7997 if it is already enabled for normal traffic and if no "port" nor "addr"
7998 directive is present. However, if such a directive is present, the
7999 "check-send-proxy" option needs to be used to force the use of the
8000 protocol. See also the "send-proxy" option for more information.
8001
8002 Supported in default-server: No
8003
Willy Tarreau763a95b2012-10-04 23:15:39 +02008004check-ssl
8005 This option forces encryption of all health checks over SSL, regardless of
8006 whether the server uses SSL or not for the normal traffic. This is generally
8007 used when an explicit "port" or "addr" directive is specified and SSL health
8008 checks are not inherited. It is important to understand that this option
8009 inserts an SSL transport layer below the ckecks, so that a simple TCP connect
8010 check becomes an SSL connect, which replaces the old ssl-hello-chk. The most
8011 common use is to send HTTPS checks by combining "httpchk" with SSL checks.
8012 All SSL settings are common to health checks and traffic (eg: ciphers).
8013 See the "ssl" option for more information.
8014
8015 Supported in default-server: No
8016
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02008017ciphers <ciphers>
8018 This option sets the string describing the list of cipher algorithms that is
8019 is negociated during the SSL/TLS handshake with the server. The format of the
8020 string is defined in "man 1 ciphers". When SSL is used to communicate with
8021 servers on the local network, it is common to see a weaker set of algorithms
8022 than what is used over the internet. Doing so reduces CPU usage on both the
8023 server and haproxy while still keeping it compatible with deployed software.
8024 Some algorithms such as RC4-SHA1 are reasonably cheap. If no security at all
8025 is needed and just connectivity, using DES can be appropriate.
8026
Willy Tarreau763a95b2012-10-04 23:15:39 +02008027 Supported in default-server: No
8028
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008029cookie <value>
8030 The "cookie" parameter sets the cookie value assigned to the server to
8031 <value>. This value will be checked in incoming requests, and the first
8032 operational server possessing the same value will be selected. In return, in
8033 cookie insertion or rewrite modes, this value will be assigned to the cookie
8034 sent to the client. There is nothing wrong in having several servers sharing
8035 the same cookie value, and it is in fact somewhat common between normal and
8036 backup servers. See also the "cookie" keyword in backend section.
8037
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008038 Supported in default-server: No
8039
Emeric Brunef42d922012-10-11 16:11:36 +02008040crl-file <crlfile>
8041 This setting is only available when support for OpenSSL was built in. It
8042 designates a PEM file from which to load certificate revocation list used
8043 to verify server's certificate.
8044
8045 Supported in default-server: No
8046
Emeric Bruna7aa3092012-10-26 12:58:00 +02008047crt <cert>
8048 This setting is only available when support for OpenSSL was built in.
8049 It designates a PEM file from which to load both a certificate and the
8050 associated private key. This file can be built by concatenating both PEM
8051 files into one. This certificate will be sent if the server send a client
8052 certificate request.
8053
8054 Supported in default-server: No
8055
Willy Tarreau96839092010-03-29 10:02:24 +02008056disabled
8057 The "disabled" keyword starts the server in the "disabled" state. That means
8058 that it is marked down in maintenance mode, and no connection other than the
8059 ones allowed by persist mode will reach it. It is very well suited to setup
8060 new servers, because normal traffic will never reach them, while it is still
8061 possible to test the service by making use of the force-persist mechanism.
8062
8063 Supported in default-server: No
8064
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008065error-limit <count>
Willy Tarreau983e01e2010-01-11 18:42:06 +01008066 If health observing is enabled, the "error-limit" parameter specifies the
8067 number of consecutive errors that triggers event selected by the "on-error"
8068 option. By default it is set to 10 consecutive errors.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01008069
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008070 Supported in default-server: Yes
8071
8072 See also the "check", "error-limit" and "on-error".
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01008073
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008074fall <count>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008075 The "fall" parameter states that a server will be considered as dead after
8076 <count> consecutive unsuccessful health checks. This value defaults to 3 if
8077 unspecified. See also the "check", "inter" and "rise" parameters.
8078
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008079 Supported in default-server: Yes
8080
Emeric Brun8694b9a2012-10-05 14:39:07 +02008081force-sslv3
8082 This option enforces use of SSLv3 only when SSL is used to communicate with
8083 the server. SSLv3 is generally less expensive than the TLS counterparts for
8084 high connection rates. See also "no-tlsv*", "no-sslv3".
8085
8086 Supported in default-server: No
8087
8088force-tlsv10
8089 This option enforces use of TLSv1.0 only when SSL is used to communicate with
8090 the server. See also "no-tlsv*", "no-sslv3".
8091
8092 Supported in default-server: No
8093
8094force-tlsv11
8095 This option enforces use of TLSv1.1 only when SSL is used to communicate with
8096 the server. See also "no-tlsv*", "no-sslv3".
8097
8098 Supported in default-server: No
8099
8100force-tlsv12
8101 This option enforces use of TLSv1.2 only when SSL is used to communicate with
8102 the server. See also "no-tlsv*", "no-sslv3".
8103
8104 Supported in default-server: No
8105
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008106id <value>
Willy Tarreau53fb4ae2009-10-04 23:04:08 +02008107 Set a persistent ID for the server. This ID must be positive and unique for
8108 the proxy. An unused ID will automatically be assigned if unset. The first
8109 assigned value will be 1. This ID is currently only returned in statistics.
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008110
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008111 Supported in default-server: No
8112
8113inter <delay>
8114fastinter <delay>
8115downinter <delay>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008116 The "inter" parameter sets the interval between two consecutive health checks
8117 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
8118 It is also possible to use "fastinter" and "downinter" to optimize delays
8119 between checks depending on the server state :
8120
8121 Server state | Interval used
8122 ---------------------------------+-----------------------------------------
8123 UP 100% (non-transitional) | "inter"
8124 ---------------------------------+-----------------------------------------
8125 Transitionally UP (going down), |
8126 Transitionally DOWN (going up), | "fastinter" if set, "inter" otherwise.
8127 or yet unchecked. |
8128 ---------------------------------+-----------------------------------------
8129 DOWN 100% (non-transitional) | "downinter" if set, "inter" otherwise.
8130 ---------------------------------+-----------------------------------------
Willy Tarreaud72758d2010-01-12 10:42:19 +01008131
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008132 Just as with every other time-based parameter, they can be entered in any
8133 other explicit unit among { us, ms, s, m, h, d }. The "inter" parameter also
8134 serves as a timeout for health checks sent to servers if "timeout check" is
8135 not set. In order to reduce "resonance" effects when multiple servers are
Simon Hormand60d6912013-11-25 10:46:36 +09008136 hosted on the same hardware, the agent and health checks of all servers
8137 are started with a small time offset between them. It is also possible to
8138 add some random noise in the agent and health checks interval using the
8139 global "spread-checks" keyword. This makes sense for instance when a lot
8140 of backends use the same servers.
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008141
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008142 Supported in default-server: Yes
8143
8144maxconn <maxconn>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008145 The "maxconn" parameter specifies the maximal number of concurrent
8146 connections that will be sent to this server. If the number of incoming
8147 concurrent requests goes higher than this value, they will be queued, waiting
8148 for a connection to be released. This parameter is very important as it can
8149 save fragile servers from going down under extreme loads. If a "minconn"
8150 parameter is specified, the limit becomes dynamic. The default value is "0"
8151 which means unlimited. See also the "minconn" and "maxqueue" parameters, and
8152 the backend's "fullconn" keyword.
8153
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008154 Supported in default-server: Yes
8155
8156maxqueue <maxqueue>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008157 The "maxqueue" parameter specifies the maximal number of connections which
8158 will wait in the queue for this server. If this limit is reached, next
8159 requests will be redispatched to other servers instead of indefinitely
8160 waiting to be served. This will break persistence but may allow people to
8161 quickly re-log in when the server they try to connect to is dying. The
8162 default value is "0" which means the queue is unlimited. See also the
8163 "maxconn" and "minconn" parameters.
8164
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008165 Supported in default-server: Yes
8166
8167minconn <minconn>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008168 When the "minconn" parameter is set, the maxconn limit becomes a dynamic
8169 limit following the backend's load. The server will always accept at least
8170 <minconn> connections, never more than <maxconn>, and the limit will be on
8171 the ramp between both values when the backend has less than <fullconn>
8172 concurrent connections. This makes it possible to limit the load on the
8173 server during normal loads, but push it further for important loads without
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01008174 overloading the server during exceptional loads. See also the "maxconn"
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008175 and "maxqueue" parameters, as well as the "fullconn" backend keyword.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01008176
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008177 Supported in default-server: Yes
8178
Emeric Brun9b3009b2012-10-05 11:55:06 +02008179no-sslv3
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02008180 This option disables support for SSLv3 when SSL is used to communicate with
8181 the server. Note that SSLv2 is disabled in the code and cannot be enabled
Emeric Brun8694b9a2012-10-05 14:39:07 +02008182 using any configuration option. See also "force-sslv3", "force-tlsv*".
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02008183
Willy Tarreau763a95b2012-10-04 23:15:39 +02008184 Supported in default-server: No
8185
Emeric Brunf9c5c472012-10-11 15:28:34 +02008186no-tls-tickets
8187 This setting is only available when support for OpenSSL was built in. It
8188 disables the stateless session resumption (RFC 5077 TLS Ticket
8189 extension) and force to use stateful session resumption. Stateless
8190 session resumption is more expensive in CPU usage for servers.
8191
8192 Supported in default-server: No
8193
Emeric Brun9b3009b2012-10-05 11:55:06 +02008194no-tlsv10
Emeric Brun8694b9a2012-10-05 14:39:07 +02008195 This option disables support for TLSv1.0 when SSL is used to communicate with
Emeric Brunf5da4932012-09-28 19:42:54 +02008196 the server. Note that SSLv2 is disabled in the code and cannot be enabled
8197 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun8694b9a2012-10-05 14:39:07 +02008198 often makes sense to disable it when communicating with local servers. See
8199 also "force-sslv3", "force-tlsv*".
Emeric Brunf5da4932012-09-28 19:42:54 +02008200
Willy Tarreau763a95b2012-10-04 23:15:39 +02008201 Supported in default-server: No
8202
Emeric Brun9b3009b2012-10-05 11:55:06 +02008203no-tlsv11
Emeric Brun8694b9a2012-10-05 14:39:07 +02008204 This option disables support for TLSv1.1 when SSL is used to communicate with
Emeric Brunf5da4932012-09-28 19:42:54 +02008205 the server. Note that SSLv2 is disabled in the code and cannot be enabled
8206 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun8694b9a2012-10-05 14:39:07 +02008207 often makes sense to disable it when communicating with local servers. See
8208 also "force-sslv3", "force-tlsv*".
Emeric Brunf5da4932012-09-28 19:42:54 +02008209
Willy Tarreau763a95b2012-10-04 23:15:39 +02008210 Supported in default-server: No
8211
Emeric Brun9b3009b2012-10-05 11:55:06 +02008212no-tlsv12
Emeric Brun8694b9a2012-10-05 14:39:07 +02008213 This option disables support for TLSv1.2 when SSL is used to communicate with
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02008214 the server. Note that SSLv2 is disabled in the code and cannot be enabled
8215 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun8694b9a2012-10-05 14:39:07 +02008216 often makes sense to disable it when communicating with local servers. See
8217 also "force-sslv3", "force-tlsv*".
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02008218
Willy Tarreau763a95b2012-10-04 23:15:39 +02008219 Supported in default-server: No
8220
Simon Hormanfa461682011-06-25 09:39:49 +09008221non-stick
8222 Never add connections allocated to this sever to a stick-table.
8223 This may be used in conjunction with backup to ensure that
8224 stick-table persistence is disabled for backup servers.
8225
Willy Tarreau763a95b2012-10-04 23:15:39 +02008226 Supported in default-server: No
8227
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01008228observe <mode>
8229 This option enables health adjusting based on observing communication with
8230 the server. By default this functionality is disabled and enabling it also
8231 requires to enable health checks. There are two supported modes: "layer4" and
8232 "layer7". In layer4 mode, only successful/unsuccessful tcp connections are
8233 significant. In layer7, which is only allowed for http proxies, responses
8234 received from server are verified, like valid/wrong http code, unparsable
Willy Tarreau150d1462012-03-10 08:19:02 +01008235 headers, a timeout, etc. Valid status codes include 100 to 499, 501 and 505.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01008236
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008237 Supported in default-server: No
8238
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01008239 See also the "check", "on-error" and "error-limit".
8240
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008241on-error <mode>
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01008242 Select what should happen when enough consecutive errors are detected.
8243 Currently, four modes are available:
8244 - fastinter: force fastinter
8245 - fail-check: simulate a failed check, also forces fastinter (default)
8246 - sudden-death: simulate a pre-fatal failed health check, one more failed
8247 check will mark a server down, forces fastinter
8248 - mark-down: mark the server immediately down and force fastinter
8249
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008250 Supported in default-server: Yes
8251
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01008252 See also the "check", "observe" and "error-limit".
8253
Simon Hormane0d1bfb2011-06-21 14:34:58 +09008254on-marked-down <action>
8255 Modify what occurs when a server is marked down.
8256 Currently one action is available:
Justin Karnegeseb2c24a2012-05-24 15:28:52 -07008257 - shutdown-sessions: Shutdown peer sessions. When this setting is enabled,
8258 all connections to the server are immediately terminated when the server
8259 goes down. It might be used if the health check detects more complex cases
8260 than a simple connection status, and long timeouts would cause the service
8261 to remain unresponsive for too long a time. For instance, a health check
8262 might detect that a database is stuck and that there's no chance to reuse
8263 existing connections anymore. Connections killed this way are logged with
8264 a 'D' termination code (for "Down").
Simon Hormane0d1bfb2011-06-21 14:34:58 +09008265
8266 Actions are disabled by default
8267
8268 Supported in default-server: Yes
8269
Justin Karnegeseb2c24a2012-05-24 15:28:52 -07008270on-marked-up <action>
8271 Modify what occurs when a server is marked up.
8272 Currently one action is available:
8273 - shutdown-backup-sessions: Shutdown sessions on all backup servers. This is
8274 done only if the server is not in backup state and if it is not disabled
8275 (it must have an effective weight > 0). This can be used sometimes to force
8276 an active server to take all the traffic back after recovery when dealing
8277 with long sessions (eg: LDAP, SQL, ...). Doing this can cause more trouble
8278 than it tries to solve (eg: incomplete transactions), so use this feature
8279 with extreme care. Sessions killed because a server comes up are logged
8280 with an 'U' termination code (for "Up").
8281
8282 Actions are disabled by default
8283
8284 Supported in default-server: Yes
8285
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008286port <port>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008287 Using the "port" parameter, it becomes possible to use a different port to
8288 send health-checks. On some servers, it may be desirable to dedicate a port
8289 to a specific component able to perform complex tests which are more suitable
8290 to health-checks than the application. It is common to run a simple script in
8291 inetd for instance. This parameter is ignored if the "check" parameter is not
8292 set. See also the "addr" parameter.
8293
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008294 Supported in default-server: Yes
8295
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008296redir <prefix>
8297 The "redir" parameter enables the redirection mode for all GET and HEAD
8298 requests addressing this server. This means that instead of having HAProxy
8299 forward the request to the server, it will send an "HTTP 302" response with
8300 the "Location" header composed of this prefix immediately followed by the
8301 requested URI beginning at the leading '/' of the path component. That means
8302 that no trailing slash should be used after <prefix>. All invalid requests
8303 will be rejected, and all non-GET or HEAD requests will be normally served by
8304 the server. Note that since the response is completely forged, no header
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01008305 mangling nor cookie insertion is possible in the response. However, cookies in
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008306 requests are still analysed, making this solution completely usable to direct
8307 users to a remote location in case of local disaster. Main use consists in
8308 increasing bandwidth for static servers by having the clients directly
8309 connect to them. Note: never use a relative location here, it would cause a
8310 loop between the client and HAProxy!
8311
8312 Example : server srv1 192.168.1.1:80 redir http://image1.mydomain.com check
8313
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008314 Supported in default-server: No
8315
8316rise <count>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008317 The "rise" parameter states that a server will be considered as operational
8318 after <count> consecutive successful health checks. This value defaults to 2
8319 if unspecified. See also the "check", "inter" and "fall" parameters.
8320
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008321 Supported in default-server: Yes
8322
Willy Tarreau5ab04ec2011-03-20 10:32:26 +01008323send-proxy
8324 The "send-proxy" parameter enforces use of the PROXY protocol over any
8325 connection established to this server. The PROXY protocol informs the other
8326 end about the layer 3/4 addresses of the incoming connection, so that it can
8327 know the client's address or the public address it accessed to, whatever the
8328 upper layer protocol. For connections accepted by an "accept-proxy" listener,
8329 the advertised address will be used. Only TCPv4 and TCPv6 address families
8330 are supported. Other families such as Unix sockets, will report an UNKNOWN
8331 family. Servers using this option can fully be chained to another instance of
8332 haproxy listening with an "accept-proxy" setting. This setting must not be
Willy Tarreau6c16adc2012-10-05 00:04:16 +02008333 used if the server isn't aware of the protocol. When health checks are sent
8334 to the server, the PROXY protocol is automatically used when this option is
8335 set, unless there is an explicit "port" or "addr" directive, in which case an
8336 explicit "check-send-proxy" directive would also be needed to use the PROXY
8337 protocol. See also the "accept-proxy" option of the "bind" keyword.
Willy Tarreau5ab04ec2011-03-20 10:32:26 +01008338
8339 Supported in default-server: No
8340
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008341slowstart <start_time_in_ms>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008342 The "slowstart" parameter for a server accepts a value in milliseconds which
8343 indicates after how long a server which has just come back up will run at
8344 full speed. Just as with every other time-based parameter, it can be entered
8345 in any other explicit unit among { us, ms, s, m, h, d }. The speed grows
8346 linearly from 0 to 100% during this time. The limitation applies to two
8347 parameters :
8348
8349 - maxconn: the number of connections accepted by the server will grow from 1
8350 to 100% of the usual dynamic limit defined by (minconn,maxconn,fullconn).
8351
8352 - weight: when the backend uses a dynamic weighted algorithm, the weight
8353 grows linearly from 1 to 100%. In this case, the weight is updated at every
8354 health-check. For this reason, it is important that the "inter" parameter
8355 is smaller than the "slowstart", in order to maximize the number of steps.
8356
8357 The slowstart never applies when haproxy starts, otherwise it would cause
8358 trouble to running servers. It only applies when a server has been previously
8359 seen as failed.
8360
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008361 Supported in default-server: Yes
8362
Willy Tarreauc6f4ce82009-06-10 11:09:37 +02008363source <addr>[:<pl>[-<ph>]] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreaubce70882009-09-07 11:51:47 +02008364source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
Willy Tarreauc6f4ce82009-06-10 11:09:37 +02008365source <addr>[:<pl>[-<ph>]] [interface <name>] ...
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008366 The "source" parameter sets the source address which will be used when
8367 connecting to the server. It follows the exact same parameters and principle
8368 as the backend "source" keyword, except that it only applies to the server
8369 referencing it. Please consult the "source" keyword for details.
8370
Willy Tarreauc6f4ce82009-06-10 11:09:37 +02008371 Additionally, the "source" statement on a server line allows one to specify a
8372 source port range by indicating the lower and higher bounds delimited by a
8373 dash ('-'). Some operating systems might require a valid IP address when a
8374 source port range is specified. It is permitted to have the same IP/range for
8375 several servers. Doing so makes it possible to bypass the maximum of 64k
8376 total concurrent connections. The limit will then reach 64k connections per
8377 server.
8378
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008379 Supported in default-server: No
8380
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02008381ssl
Willy Tarreau44f65392013-06-25 07:56:20 +02008382 This option enables SSL ciphering on outgoing connections to the server. It
8383 is critical to verify server certificates using "verify" when using SSL to
8384 connect to servers, otherwise the communication is prone to trivial man in
8385 the-middle attacks rendering SSL useless. When this option is used, health
8386 checks are automatically sent in SSL too unless there is a "port" or an
8387 "addr" directive indicating the check should be sent to a different location.
8388 See the "check-ssl" optino to force SSL health checks.
Willy Tarreau763a95b2012-10-04 23:15:39 +02008389
8390 Supported in default-server: No
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02008391
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008392track [<proxy>/]<server>
8393 This option enables ability to set the current state of the server by
8394 tracking another one. Only a server with checks enabled can be tracked
8395 so it is not possible for example to track a server that tracks another
8396 one. If <proxy> is omitted the current one is used. If disable-on-404 is
8397 used, it has to be enabled on both proxies.
8398
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008399 Supported in default-server: No
8400
Emeric Brunef42d922012-10-11 16:11:36 +02008401verify [none|required]
8402 This setting is only available when support for OpenSSL was built in. If set
8403 to 'none', server certificate is not verified. This is the default. In the
8404 other case, The certificate provided by the server is verified using CAs from
8405 'ca-file' and optional CRLs from 'crl-file'. On verify failure the handshake
Willy Tarreau44f65392013-06-25 07:56:20 +02008406 is aborted. It is critically important to verify server certificates when
8407 using SSL to connect to servers, otherwise the communication is prone to
8408 trivial man-in-the-middle attacks rendering SSL totally useless.
Emeric Brunef42d922012-10-11 16:11:36 +02008409
8410 Supported in default-server: No
8411
Evan Broderbe554312013-06-27 00:05:25 -07008412verifyhost <hostname>
8413 This setting is only available when support for OpenSSL was built in, and
8414 only takes effect if 'verify required' is also specified. When set, the
8415 hostnames in the subject and subjectAlternateNames of the certificate
8416 provided by the server are checked. If none of the hostnames in the
8417 certificate match the specified hostname, the handshake is aborted. The
8418 hostnames in the server-provided certificate may include wildcards.
8419
8420 Supported in default-server: No
8421
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008422weight <weight>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008423 The "weight" parameter is used to adjust the server's weight relative to
8424 other servers. All servers will receive a load proportional to their weight
8425 relative to the sum of all weights, so the higher the weight, the higher the
Willy Tarreau6704d672009-06-15 10:56:05 +02008426 load. The default weight is 1, and the maximal value is 256. A value of 0
8427 means the server will not participate in load-balancing but will still accept
8428 persistent connections. If this parameter is used to distribute the load
8429 according to server's capacity, it is recommended to start with values which
8430 can both grow and shrink, for instance between 10 and 100 to leave enough
8431 room above and below for later adjustments.
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008432
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01008433 Supported in default-server: Yes
8434
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008435
84366. HTTP header manipulation
8437---------------------------
8438
8439In HTTP mode, it is possible to rewrite, add or delete some of the request and
8440response headers based on regular expressions. It is also possible to block a
8441request or a response if a particular header matches a regular expression,
8442which is enough to stop most elementary protocol attacks, and to protect
8443against information leak from the internal network. But there is a limitation
8444to this : since HAProxy's HTTP engine does not support keep-alive, only headers
8445passed during the first request of a TCP session will be seen. All subsequent
8446headers will be considered data only and not analyzed. Furthermore, HAProxy
8447never touches data contents, it stops analysis at the end of headers.
8448
Willy Tarreau816b9792009-09-15 21:25:21 +02008449There is an exception though. If HAProxy encounters an "Informational Response"
8450(status code 1xx), it is able to process all rsp* rules which can allow, deny,
8451rewrite or delete a header, but it will refuse to add a header to any such
8452messages as this is not HTTP-compliant. The reason for still processing headers
8453in such responses is to stop and/or fix any possible information leak which may
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01008454happen, for instance because another downstream equipment would unconditionally
Willy Tarreau816b9792009-09-15 21:25:21 +02008455add a header, or if a server name appears there. When such messages are seen,
8456normal processing still occurs on the next non-informational messages.
8457
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008458This section covers common usage of the following keywords, described in detail
8459in section 4.2 :
8460
8461 - reqadd <string>
8462 - reqallow <search>
8463 - reqiallow <search>
8464 - reqdel <search>
8465 - reqidel <search>
8466 - reqdeny <search>
8467 - reqideny <search>
8468 - reqpass <search>
8469 - reqipass <search>
8470 - reqrep <search> <replace>
8471 - reqirep <search> <replace>
8472 - reqtarpit <search>
8473 - reqitarpit <search>
8474 - rspadd <string>
8475 - rspdel <search>
8476 - rspidel <search>
8477 - rspdeny <search>
8478 - rspideny <search>
8479 - rsprep <search> <replace>
8480 - rspirep <search> <replace>
8481
8482With all these keywords, the same conventions are used. The <search> parameter
8483is a POSIX extended regular expression (regex) which supports grouping through
8484parenthesis (without the backslash). Spaces and other delimiters must be
8485prefixed with a backslash ('\') to avoid confusion with a field delimiter.
8486Other characters may be prefixed with a backslash to change their meaning :
8487
8488 \t for a tab
8489 \r for a carriage return (CR)
8490 \n for a new line (LF)
8491 \ to mark a space and differentiate it from a delimiter
8492 \# to mark a sharp and differentiate it from a comment
8493 \\ to use a backslash in a regex
8494 \\\\ to use a backslash in the text (*2 for regex, *2 for haproxy)
8495 \xXX to write the ASCII hex code XX as in the C language
8496
8497The <replace> parameter contains the string to be used to replace the largest
8498portion of text matching the regex. It can make use of the special characters
8499above, and can reference a substring which is delimited by parenthesis in the
8500regex, by writing a backslash ('\') immediately followed by one digit from 0 to
85019 indicating the group position (0 designating the entire line). This practice
8502is very common to users of the "sed" program.
8503
8504The <string> parameter represents the string which will systematically be added
8505after the last header line. It can also use special character sequences above.
8506
8507Notes related to these keywords :
8508---------------------------------
8509 - these keywords are not always convenient to allow/deny based on header
8510 contents. It is strongly recommended to use ACLs with the "block" keyword
8511 instead, resulting in far more flexible and manageable rules.
8512
8513 - lines are always considered as a whole. It is not possible to reference
8514 a header name only or a value only. This is important because of the way
8515 headers are written (notably the number of spaces after the colon).
8516
8517 - the first line is always considered as a header, which makes it possible to
8518 rewrite or filter HTTP requests URIs or response codes, but in turn makes
8519 it harder to distinguish between headers and request line. The regex prefix
8520 ^[^\ \t]*[\ \t] matches any HTTP method followed by a space, and the prefix
8521 ^[^ \t:]*: matches any header name followed by a colon.
8522
8523 - for performances reasons, the number of characters added to a request or to
8524 a response is limited at build time to values between 1 and 4 kB. This
8525 should normally be far more than enough for most usages. If it is too short
8526 on occasional usages, it is possible to gain some space by removing some
8527 useless headers before adding new ones.
8528
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01008529 - keywords beginning with "reqi" and "rspi" are the same as their counterpart
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008530 without the 'i' letter except that they ignore case when matching patterns.
8531
8532 - when a request passes through a frontend then a backend, all req* rules
8533 from the frontend will be evaluated, then all req* rules from the backend
8534 will be evaluated. The reverse path is applied to responses.
8535
8536 - req* statements are applied after "block" statements, so that "block" is
8537 always the first one, but before "use_backend" in order to permit rewriting
Willy Tarreaud72758d2010-01-12 10:42:19 +01008538 before switching.
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008539
8540
Willy Tarreau74ca5042013-06-11 23:12:07 +020085417. Using ACLs and fetching samples
8542----------------------------------
8543
8544Haproxy is capable of extracting data from request or response streams, from
8545client or server information, from tables, environmental information etc...
8546The action of extracting such data is called fetching a sample. Once retrieved,
8547these samples may be used for various purposes such as a key to a stick-table,
8548but most common usages consist in matching them against predefined constant
8549data called patterns.
8550
8551
85527.1. ACL basics
8553---------------
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008554
8555The use of Access Control Lists (ACL) provides a flexible solution to perform
8556content switching and generally to take decisions based on content extracted
8557from the request, the response or any environmental status. The principle is
8558simple :
8559
Willy Tarreau74ca5042013-06-11 23:12:07 +02008560 - extract a data sample from a stream, table or the environment
Willy Tarreaue6b11e42013-11-26 19:02:32 +01008561 - optionally apply some format conversion to the extracted sample
Willy Tarreau74ca5042013-06-11 23:12:07 +02008562 - apply one or multiple pattern matching methods on this sample
8563 - perform actions only when a pattern matches the sample
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008564
Willy Tarreau74ca5042013-06-11 23:12:07 +02008565The actions generally consist in blocking a request, selecting a backend, or
8566adding a header.
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008567
8568In order to define a test, the "acl" keyword is used. The syntax is :
8569
Willy Tarreau74ca5042013-06-11 23:12:07 +02008570 acl <aclname> <criterion> [flags] [operator] [<value>] ...
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008571
8572This creates a new ACL <aclname> or completes an existing one with new tests.
8573Those tests apply to the portion of request/response specified in <criterion>
8574and may be adjusted with optional flags [flags]. Some criteria also support
Willy Tarreaue6b11e42013-11-26 19:02:32 +01008575an operator which may be specified before the set of values. Optionally some
8576conversion operators may be applied to the sample, and they will be specified
8577as a comma-delimited list of keywords just after the first keyword. The values
8578are of the type supported by the criterion, and are separated by spaces.
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008579
8580ACL names must be formed from upper and lower case letters, digits, '-' (dash),
8581'_' (underscore) , '.' (dot) and ':' (colon). ACL names are case-sensitive,
8582which means that "my_acl" and "My_Acl" are two different ACLs.
8583
8584There is no enforced limit to the number of ACLs. The unused ones do not affect
8585performance, they just consume a small amount of memory.
8586
Willy Tarreau74ca5042013-06-11 23:12:07 +02008587The criterion generally is the name of a sample fetch method, or one of its ACL
8588specific declinations. The default test method is implied by the output type of
8589this sample fetch method. The ACL declinations can describe alternate matching
Willy Tarreaue6b11e42013-11-26 19:02:32 +01008590methods of a same sample fetch method. The sample fetch methods are the only
8591ones supporting a conversion.
Willy Tarreau74ca5042013-06-11 23:12:07 +02008592
8593Sample fetch methods return data which can be of the following types :
8594 - boolean
8595 - integer (signed or unsigned)
8596 - IPv4 or IPv6 address
8597 - string
8598 - data block
8599
Willy Tarreaue6b11e42013-11-26 19:02:32 +01008600Converters transform any of these data into any of these. For example, some
8601converters might convert a string to a lower-case string while other ones
8602would turn a string to an IPv4 address, or apply a netmask to an IP address.
8603The resulting sample is of the type of the last converter applied to the list,
8604which defaults to the type of the sample fetch method.
8605
Willy Tarreau74ca5042013-06-11 23:12:07 +02008606The ACL engine can match these types against patterns of the following types :
8607 - boolean
8608 - integer or integer range
8609 - IP address / network
8610 - string (exact, substring, suffix, prefix, subdir, domain)
8611 - regular expression
8612 - hex block
8613
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008614The following ACL flags are currently supported :
8615
Willy Tarreau2b5285d2010-05-09 23:45:24 +02008616 -i : ignore case during matching of all subsequent patterns.
8617 -f : load patterns from a file.
Willy Tarreau74ca5042013-06-11 23:12:07 +02008618 -m : use a specific pattern matching method
Willy Tarreau6a06a402007-07-15 20:15:28 +02008619 -- : force end of flags. Useful when a string looks like one of the flags.
8620
Willy Tarreau74ca5042013-06-11 23:12:07 +02008621The "-f" flag is followed by the name of a file from which all lines will be
8622read as individual values. It is even possible to pass multiple "-f" arguments
8623if the patterns are to be loaded from multiple files. Empty lines as well as
8624lines beginning with a sharp ('#') will be ignored. All leading spaces and tabs
8625will be stripped. If it is absolutely necessary to insert a valid pattern
8626beginning with a sharp, just prefix it with a space so that it is not taken for
8627a comment. Depending on the data type and match method, haproxy may load the
8628lines into a binary tree, allowing very fast lookups. This is true for IPv4 and
8629exact string matching. In this case, duplicates will automatically be removed.
8630
8631Also, note that the "-i" flag applies to subsequent entries and not to entries
8632loaded from files preceding it. For instance :
8633
8634 acl valid-ua hdr(user-agent) -f exact-ua.lst -i -f generic-ua.lst test
8635
8636In this example, each line of "exact-ua.lst" will be exactly matched against
8637the "user-agent" header of the request. Then each line of "generic-ua" will be
8638case-insensitively matched. Then the word "test" will be insensitively matched
8639as well.
8640
8641The "-m" flag is used to select a specific pattern matching method on the input
8642sample. All ACL-specific criteria imply a pattern matching method and generally
8643do not need this flag. However, this flag is useful with generic sample fetch
8644methods to describe how they're going to be matched against the patterns. This
8645is required for sample fetches which return data type for which there is no
8646obvious matching method (eg: string or binary). When "-m" is specified and
8647followed by a pattern matching method name, this method is used instead of the
8648default one for the criterion. This makes it possible to match contents in ways
8649that were not initially planned, or with sample fetch methods which return a
8650string. The matching method also affects the way the patterns are parsed.
8651
8652There are some restrictions however. Not all methods can be used with all
8653sample fetch methods. Also, if "-m" is used in conjunction with "-f", it must
8654be placed first. The pattern matching method must be one of the following :
Willy Tarreau5adeda12013-03-31 22:13:34 +02008655
8656 - "found" : only check if the requested sample could be found in the stream,
8657 but do not compare it against any pattern. It is recommended not
Willy Tarreau74ca5042013-06-11 23:12:07 +02008658 to pass any pattern to avoid confusion. This matching method is
8659 particularly useful to detect presence of certain contents such
8660 as headers, cookies, etc... even if they are empty and without
8661 comparing them to anything nor counting them.
Willy Tarreau5adeda12013-03-31 22:13:34 +02008662
8663 - "bool" : check the value as a boolean. It can only be applied to fetches
8664 which return a boolean or integer value, and takes no pattern.
Willy Tarreau74ca5042013-06-11 23:12:07 +02008665 Value zero or false does not match, all other values do match.
Willy Tarreau5adeda12013-03-31 22:13:34 +02008666
8667 - "int" : match the value as an integer. It can be used with integer and
Willy Tarreau74ca5042013-06-11 23:12:07 +02008668 boolean samples. Boolean false is integer 0, true is integer 1.
Willy Tarreau5adeda12013-03-31 22:13:34 +02008669
8670 - "ip" : match the value as an IPv4 or IPv6 address. It is compatible
Willy Tarreau74ca5042013-06-11 23:12:07 +02008671 with IP address samples only, so it is implied and never needed.
Willy Tarreau5adeda12013-03-31 22:13:34 +02008672
8673 - "bin" : match the contents against an hexadecimal string representing a
8674 binary sequence. This may be used with binary or string samples.
8675
8676 - "len" : match the sample's length as an integer. This may be used with
8677 binary or string samples.
8678
Willy Tarreau74ca5042013-06-11 23:12:07 +02008679 - "str" : exact match : match the contents against a string. This may be
8680 used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +02008681
Willy Tarreau74ca5042013-06-11 23:12:07 +02008682 - "sub" : substring match : check that the contents contain at least one of
8683 the provided string patterns. This may be used with binary or
8684 string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +02008685
Willy Tarreau74ca5042013-06-11 23:12:07 +02008686 - "reg" : regex match : match the contents against a list of regular
8687 expressions. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +02008688
Willy Tarreau74ca5042013-06-11 23:12:07 +02008689 - "beg" : prefix match : check that the contents begin like the provided
8690 string patterns. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +02008691
Willy Tarreau74ca5042013-06-11 23:12:07 +02008692 - "end" : suffix match : check that the contents end like the provided
8693 string patterns. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +02008694
Willy Tarreau74ca5042013-06-11 23:12:07 +02008695 - "dir" : subdir match : check that a slash-delimited portion of the
8696 contents exactly matches one of the provided string patterns.
Willy Tarreau5adeda12013-03-31 22:13:34 +02008697 This may be used with binary or string samples.
8698
Willy Tarreau74ca5042013-06-11 23:12:07 +02008699 - "dom" : domain match : check that a dot-delimited portion of the contents
8700 exactly match one of the provided string patterns. This may be
8701 used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +02008702
8703For example, to quickly detect the presence of cookie "JSESSIONID" in an HTTP
8704request, it is possible to do :
8705
8706 acl jsess_present cook(JSESSIONID) -m found
8707
8708In order to apply a regular expression on the 500 first bytes of data in the
8709buffer, one would use the following acl :
8710
8711 acl script_tag payload(0,500) -m reg -i <script>
8712
Willy Tarreaue6b11e42013-11-26 19:02:32 +01008713On systems where the regex library is much slower when using "-i", it is
8714possible to convert the sample to lowercase before matching, like this :
8715
8716 acl script_tag payload(0,500),lower -m reg <script>
8717
Willy Tarreau74ca5042013-06-11 23:12:07 +02008718All ACL-specific criteria imply a default matching method. Most often, these
8719criteria are composed by concatenating the name of the original sample fetch
8720method and the matching method. For example, "hdr_beg" applies the "beg" match
8721to samples retrieved using the "hdr" fetch method. Since all ACL-specific
8722criteria rely on a sample fetch method, it is always possible instead to use
8723the original sample fetch method and the explicit matching method using "-m".
Willy Tarreau2b5285d2010-05-09 23:45:24 +02008724
Willy Tarreau74ca5042013-06-11 23:12:07 +02008725If an alternate match is specified using "-m" on an ACL-specific criterion,
8726the mathing method is simply applied to the underlying sample fetch method. For
8727example, all ACLs below are exact equivalent :
Willy Tarreau2b5285d2010-05-09 23:45:24 +02008728
Willy Tarreau74ca5042013-06-11 23:12:07 +02008729 acl short_form hdr_beg(host) www.
8730 acl alternate1 hdr_beg(host) -m beg www.
8731 acl alternate2 hdr_dom(host) -m beg www.
8732 acl alternate3 hdr(host) -m beg www.
Willy Tarreau2b5285d2010-05-09 23:45:24 +02008733
Willy Tarreau2b5285d2010-05-09 23:45:24 +02008734
Willy Tarreaue6b11e42013-11-26 19:02:32 +01008735The table below summarizes the compatibility matrix between sample types
Willy Tarreau74ca5042013-06-11 23:12:07 +02008736and the pattern types to fetch against. It indicates for each compatible
8737combination the name of the matching method to be used, prefixed with "*" when
8738the method is implicit and will work by default without "-m".
Willy Tarreau0ba27502007-12-24 16:55:16 +01008739
Willy Tarreau74ca5042013-06-11 23:12:07 +02008740 +-------------------------------------------------+
8741 | Input sample type |
8742 +----------------------+---------+---------+---------+---------+---------+
8743 | pattern type | boolean | integer | IP | string | binary |
8744 +----------------------+---------+---------+---------+---------+---------+
8745 | none (presence only) | found | found | found | found | found |
8746 +----------------------+---------+---------+---------+---------+---------+
8747 | none (boolean value) | *bool | bool | | | |
8748 +----------------------+---------+---------+---------+---------+---------+
8749 | integer (value) | int | *int | | | |
8750 +----------------------+---------+---------+---------+---------+---------+
8751 | integer (length) | | | | len | len |
8752 +----------------------+---------+---------+---------+---------+---------+
8753 | IP address | | | *ip | | |
8754 +----------------------+---------+---------+---------+---------+---------+
8755 | exact string | | | | str | str |
8756 +----------------------+---------+---------+---------+---------+---------+
8757 | prefix | | | | beg | beg |
8758 +----------------------+---------+---------+---------+---------+---------+
8759 | suffix | | | | end | end |
8760 +----------------------+---------+---------+---------+---------+---------+
8761 | substring | | | | sub | sub |
8762 +----------------------+---------+---------+---------+---------+---------+
8763 | subdir | | | | dir | dir |
8764 +----------------------+---------+---------+---------+---------+---------+
8765 | domain | | | | dom | dom |
8766 +----------------------+---------+---------+---------+---------+---------+
8767 | regex | | | | reg | reg |
8768 +----------------------+---------+---------+---------+---------+---------+
8769 | hex block | | | | bin | bin |
8770 +----------------------+---------+---------+---------+---------+---------+
Willy Tarreau6a06a402007-07-15 20:15:28 +02008771
8772
Willy Tarreau74ca5042013-06-11 23:12:07 +020087737.1.1. Matching booleans
8774------------------------
8775
8776In order to match a boolean, no value is needed and all values are ignored.
8777Boolean matching is used by default for all fetch methods of type "boolean".
8778When boolean matching is used, the fetched value is returned as-is, which means
8779that a boolean "true" will always match and a boolean "false" will never match.
8780
8781Boolean matching may also be enforced using "-m bool" on fetch methods which
8782return an integer value. Then, integer value 0 is converted to the boolean
8783"false" and all other values are converted to "true".
8784
Willy Tarreau6a06a402007-07-15 20:15:28 +02008785
Willy Tarreau74ca5042013-06-11 23:12:07 +020087867.1.2. Matching integers
8787------------------------
8788
8789Integer matching applies by default to integer fetch methods. It can also be
8790enforced on boolean fetches using "-m int". In this case, "false" is converted
8791to the integer 0, and "true" is converted to the integer 1.
8792
8793Integer matching also supports integer ranges and operators. Note that integer
8794matching only applies to positive values. A range is a value expressed with a
8795lower and an upper bound separated with a colon, both of which may be omitted.
Willy Tarreau6a06a402007-07-15 20:15:28 +02008796
8797For instance, "1024:65535" is a valid range to represent a range of
8798unprivileged ports, and "1024:" would also work. "0:1023" is a valid
8799representation of privileged ports, and ":1023" would also work.
8800
Willy Tarreau62644772008-07-16 18:36:06 +02008801As a special case, some ACL functions support decimal numbers which are in fact
8802two integers separated by a dot. This is used with some version checks for
8803instance. All integer properties apply to those decimal numbers, including
8804ranges and operators.
8805
Willy Tarreau6a06a402007-07-15 20:15:28 +02008806For an easier usage, comparison operators are also supported. Note that using
Willy Tarreau0ba27502007-12-24 16:55:16 +01008807operators with ranges does not make much sense and is strongly discouraged.
8808Similarly, it does not make much sense to perform order comparisons with a set
8809of values.
Willy Tarreau6a06a402007-07-15 20:15:28 +02008810
Willy Tarreau0ba27502007-12-24 16:55:16 +01008811Available operators for integer matching are :
Willy Tarreau6a06a402007-07-15 20:15:28 +02008812
8813 eq : true if the tested value equals at least one value
8814 ge : true if the tested value is greater than or equal to at least one value
8815 gt : true if the tested value is greater than at least one value
8816 le : true if the tested value is less than or equal to at least one value
8817 lt : true if the tested value is less than at least one value
8818
Willy Tarreau0ba27502007-12-24 16:55:16 +01008819For instance, the following ACL matches any negative Content-Length header :
Willy Tarreau6a06a402007-07-15 20:15:28 +02008820
8821 acl negative-length hdr_val(content-length) lt 0
8822
Willy Tarreau62644772008-07-16 18:36:06 +02008823This one matches SSL versions between 3.0 and 3.1 (inclusive) :
8824
8825 acl sslv3 req_ssl_ver 3:3.1
8826
Willy Tarreau6a06a402007-07-15 20:15:28 +02008827
Willy Tarreau74ca5042013-06-11 23:12:07 +020088287.1.3. Matching strings
8829-----------------------
8830
8831String matching applies to string or binary fetch methods, and exists in 6
8832different forms :
8833
8834 - exact match (-m str) : the extracted string must exactly match the
8835 patterns ;
8836
8837 - substring match (-m sub) : the patterns are looked up inside the
8838 extracted string, and the ACL matches if any of them is found inside ;
8839
8840 - prefix match (-m beg) : the patterns are compared with the beginning of
8841 the extracted string, and the ACL matches if any of them matches.
8842
8843 - suffix match (-m end) : the patterns are compared with the end of the
8844 extracted string, and the ACL matches if any of them matches.
8845
8846 - subdir match (-m sub) : the patterns are looked up inside the extracted
8847 string, delimited with slashes ("/"), and the ACL matches if any of them
8848 matches.
8849
8850 - domain match (-m dom) : the patterns are looked up inside the extracted
8851 string, delimited with dots ("."), and the ACL matches if any of them
8852 matches.
Willy Tarreau6a06a402007-07-15 20:15:28 +02008853
8854String matching applies to verbatim strings as they are passed, with the
8855exception of the backslash ("\") which makes it possible to escape some
8856characters such as the space. If the "-i" flag is passed before the first
8857string, then the matching will be performed ignoring the case. In order
8858to match the string "-i", either set it second, or pass the "--" flag
Willy Tarreau0ba27502007-12-24 16:55:16 +01008859before the first string. Same applies of course to match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02008860
8861
Willy Tarreau74ca5042013-06-11 23:12:07 +020088627.1.4. Matching regular expressions (regexes)
8863---------------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02008864
8865Just like with string matching, regex matching applies to verbatim strings as
8866they are passed, with the exception of the backslash ("\") which makes it
8867possible to escape some characters such as the space. If the "-i" flag is
8868passed before the first regex, then the matching will be performed ignoring
8869the case. In order to match the string "-i", either set it second, or pass
Willy Tarreau0ba27502007-12-24 16:55:16 +01008870the "--" flag before the first string. Same principle applies of course to
8871match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02008872
8873
Willy Tarreau74ca5042013-06-11 23:12:07 +020088747.1.5. Matching arbitrary data blocks
8875-------------------------------------
8876
8877It is possible to match some extracted samples against a binary block which may
8878not safely be represented as a string. For this, the patterns must be passed as
8879a series of hexadecimal digits in an even number, when the match method is set
8880to binary. Each sequence of two digits will represent a byte. The hexadecimal
8881digits may be used upper or lower case.
8882
8883Example :
8884 # match "Hello\n" in the input stream (\x48 \x65 \x6c \x6c \x6f \x0a)
8885 acl hello payload(0,6) -m bin 48656c6c6f0a
8886
8887
88887.1.6. Matching IPv4 and IPv6 addresses
8889---------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02008890
8891IPv4 addresses values can be specified either as plain addresses or with a
8892netmask appended, in which case the IPv4 address matches whenever it is
8893within the network. Plain addresses may also be replaced with a resolvable
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01008894host name, but this practice is generally discouraged as it makes it more
Willy Tarreau0ba27502007-12-24 16:55:16 +01008895difficult to read and debug configurations. If hostnames are used, you should
8896at least ensure that they are present in /etc/hosts so that the configuration
8897does not depend on any random DNS match at the moment the configuration is
8898parsed.
Willy Tarreau6a06a402007-07-15 20:15:28 +02008899
Willy Tarreauceb4ac92012-04-28 00:41:46 +02008900IPv6 may be entered in their usual form, with or without a netmask appended.
8901Only bit counts are accepted for IPv6 netmasks. In order to avoid any risk of
8902trouble with randomly resolved IP addresses, host names are never allowed in
8903IPv6 patterns.
8904
8905HAProxy is also able to match IPv4 addresses with IPv6 addresses in the
8906following situations :
8907 - tested address is IPv4, pattern address is IPv4, the match applies
8908 in IPv4 using the supplied mask if any.
8909 - tested address is IPv6, pattern address is IPv6, the match applies
8910 in IPv6 using the supplied mask if any.
8911 - tested address is IPv6, pattern address is IPv4, the match applies in IPv4
8912 using the pattern's mask if the IPv6 address matches with 2002:IPV4::,
8913 ::IPV4 or ::ffff:IPV4, otherwise it fails.
8914 - tested address is IPv4, pattern address is IPv6, the IPv4 address is first
8915 converted to IPv6 by prefixing ::ffff: in front of it, then the match is
8916 applied in IPv6 using the supplied IPv6 mask.
8917
Willy Tarreau74ca5042013-06-11 23:12:07 +02008918
89197.2. Using ACLs to form conditions
8920----------------------------------
8921
8922Some actions are only performed upon a valid condition. A condition is a
8923combination of ACLs with operators. 3 operators are supported :
8924
8925 - AND (implicit)
8926 - OR (explicit with the "or" keyword or the "||" operator)
8927 - Negation with the exclamation mark ("!")
Willy Tarreau6a06a402007-07-15 20:15:28 +02008928
Willy Tarreau74ca5042013-06-11 23:12:07 +02008929A condition is formed as a disjunctive form:
Willy Tarreau6a06a402007-07-15 20:15:28 +02008930
Willy Tarreau74ca5042013-06-11 23:12:07 +02008931 [!]acl1 [!]acl2 ... [!]acln { or [!]acl1 [!]acl2 ... [!]acln } ...
Willy Tarreaubef91e72013-03-31 23:14:46 +02008932
Willy Tarreau74ca5042013-06-11 23:12:07 +02008933Such conditions are generally used after an "if" or "unless" statement,
8934indicating when the condition will trigger the action.
Willy Tarreaubef91e72013-03-31 23:14:46 +02008935
Willy Tarreau74ca5042013-06-11 23:12:07 +02008936For instance, to block HTTP requests to the "*" URL with methods other than
8937"OPTIONS", as well as POST requests without content-length, and GET or HEAD
8938requests with a content-length greater than 0, and finally every request which
8939is not either GET/HEAD/POST/OPTIONS !
8940
8941 acl missing_cl hdr_cnt(Content-length) eq 0
8942 block if HTTP_URL_STAR !METH_OPTIONS || METH_POST missing_cl
8943 block if METH_GET HTTP_CONTENT
8944 block unless METH_GET or METH_POST or METH_OPTIONS
8945
8946To select a different backend for requests to static contents on the "www" site
8947and to every request on the "img", "video", "download" and "ftp" hosts :
8948
8949 acl url_static path_beg /static /images /img /css
8950 acl url_static path_end .gif .png .jpg .css .js
8951 acl host_www hdr_beg(host) -i www
8952 acl host_static hdr_beg(host) -i img. video. download. ftp.
8953
8954 # now use backend "static" for all static-only hosts, and for static urls
8955 # of host "www". Use backend "www" for the rest.
8956 use_backend static if host_static or host_www url_static
8957 use_backend www if host_www
8958
8959It is also possible to form rules using "anonymous ACLs". Those are unnamed ACL
8960expressions that are built on the fly without needing to be declared. They must
8961be enclosed between braces, with a space before and after each brace (because
8962the braces must be seen as independent words). Example :
8963
8964 The following rule :
8965
8966 acl missing_cl hdr_cnt(Content-length) eq 0
8967 block if METH_POST missing_cl
8968
8969 Can also be written that way :
8970
8971 block if METH_POST { hdr_cnt(Content-length) eq 0 }
8972
8973It is generally not recommended to use this construct because it's a lot easier
8974to leave errors in the configuration when written that way. However, for very
8975simple rules matching only one source IP address for instance, it can make more
8976sense to use them than to declare ACLs with random names. Another example of
8977good use is the following :
8978
8979 With named ACLs :
8980
8981 acl site_dead nbsrv(dynamic) lt 2
8982 acl site_dead nbsrv(static) lt 2
8983 monitor fail if site_dead
8984
8985 With anonymous ACLs :
8986
8987 monitor fail if { nbsrv(dynamic) lt 2 } || { nbsrv(static) lt 2 }
8988
8989See section 4.2 for detailed help on the "block" and "use_backend" keywords.
8990
8991
89927.3. Fetching samples
8993---------------------
8994
8995Historically, sample fetch methods were only used to retrieve data to match
8996against patterns using ACLs. With the arrival of stick-tables, a new class of
8997sample fetch methods was created, most often sharing the same syntax as their
8998ACL counterpart. These sample fetch methods are also known as "fetches". As
8999of now, ACLs and fetches have converged. All ACL fetch methods have been made
9000available as fetch methods, and ACLs may use any sample fetch method as well.
9001
9002This section details all available sample fetch methods and their output type.
9003Some sample fetch methods have deprecated aliases that are used to maintain
9004compatibility with existing configurations. They are then explicitly marked as
9005deprecated and should not be used in new setups.
9006
9007The ACL derivatives are also indicated when available, with their respective
9008matching methods. These ones all have a well defined default pattern matching
9009method, so it is never necessary (though allowed) to pass the "-m" option to
9010indicate how the sample will be matched using ACLs.
9011
9012As indicated in the sample type versus matching compatibility matrix above,
9013when using a generic sample fetch method in an ACL, the "-m" option is
9014mandatory unless the sample type is one of boolean, integer, IPv4 or IPv6. When
9015the same keyword exists as an ACL keyword and as a standard fetch method, the
9016ACL engine will automatically pick the ACL-only one by default.
9017
9018Some of these keywords support one or multiple mandatory arguments, and one or
9019multiple optional arguments. These arguments are strongly typed and are checked
9020when the configuration is parsed so that there is no risk of running with an
9021incorrect argument (eg: an unresolved backend name). Fetch function arguments
9022are passed between parenthesis and are delimited by commas. When an argument
9023is optional, it will be indicated below between square brackets ('[ ]'). When
9024all arguments are optional, the parenthesis may be omitted.
9025
9026Thus, the syntax of a standard sample fetch method is one of the following :
9027 - name
9028 - name(arg1)
9029 - name(arg1,arg2)
9030
Willy Tarreaue6b11e42013-11-26 19:02:32 +01009031Sample fetch methods may be combined with transformations to be applied on top
9032of the fetched sample (also called "converters"). These combinations form what
9033is called "sample expressions" and the result is a "sample". Initially this
9034was only supported by "stick on" and "stick store-request" directives but this
9035has now be extended to all places where samples may be used (acls, log-format,
9036unique-id-format, add-header, ...).
9037
9038These transformations are enumerated as a series of specific keywords after the
9039sample fetch method. These keywords may equally be appended immediately after
9040the fetch keyword's argument, delimited by a comma. These keywords can also
9041support some arguments (eg: a netmask) which must be passed in parenthesis.
Willy Tarreau0ba27502007-12-24 16:55:16 +01009042
Willy Tarreau74ca5042013-06-11 23:12:07 +02009043The currently available list of transformation keywords include :
Willy Tarreau0ba27502007-12-24 16:55:16 +01009044
Willy Tarreau74ca5042013-06-11 23:12:07 +02009045 lower Convert a string sample to lower case. This can only be placed
9046 after a string sample fetch function or after a transformation
9047 keyword returning a string type. The result is of type string.
Willy Tarreau6a06a402007-07-15 20:15:28 +02009048
Willy Tarreau74ca5042013-06-11 23:12:07 +02009049 upper Convert a string sample to upper case. This can only be placed
9050 after a string sample fetch function or after a transformation
9051 keyword returning a string type. The result is of type string.
Willy Tarreau6a06a402007-07-15 20:15:28 +02009052
Willy Tarreau74ca5042013-06-11 23:12:07 +02009053 ipmask(<mask>) Apply a mask to an IPv4 address, and use the result for
9054 lookups and storage. This can be used to make all hosts within
9055 a certain mask to share the same table entries and as such use
9056 the same server. The mask can be passed in dotted form (eg:
9057 255.255.255.0) or in CIDR form (eg: 24).
9058
Willy Tarreau276fae92013-07-25 14:36:01 +02009059 http_date([<offset>])
9060 Converts an integer supposed to contain a date since epoch to
9061 a string representing this date in a format suitable for use
9062 in HTTP header fields. If an offset value is specified, then
9063 it is a number of seconds that is added to the date before the
9064 conversion is operated. This is particularly useful to emit
9065 Date header fields, Expires values in responses when combined
9066 with a positive offset, or Last-Modified values when the
9067 offset is negative.
Willy Tarreau74ca5042013-06-11 23:12:07 +02009068
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +01009069 map(<map_file>[,<default_value>])
9070 map_<match_type>(<map_file>[,<default_value>])
9071 map_<match_type>_<output_type>(<map_file>[,<default_value>])
9072 Search the input value from <map_file> using the <match_type>
9073 matching method, and return the associated value converted to
9074 the type <output_type>. If the input value cannot be found in
9075 the <map_file>, the converter returns the <default_value>. If
9076 the <default_value> is not set, the converter fails and acts
9077 as if no input value could be fetched. If the <match_type> is
9078 not set, it defaults to "str". Likewise, if the <output_type>
9079 is not set, it defaults to "str". For convenience, the "map"
9080 keyword is an alias for "map_str" and maps a string to another
9081 string. The following array contains contains the list of all
9082 the map* converters.
9083
9084 It is important to avoid overlapping between the keys : IP
9085 addresses and strings are stored in trees, so the first of the
9086 finest match will be used. Other keys are stored in lists, so
9087 the first matching occurrence will be used.
9088
9089 +----+----------+---------+-------------+------------+
9090 | `-_ out | | | |
9091 | input `-_ | str | int | ip |
9092 | / match `-_ | | | |
9093 +---------------+---------+-------------+------------+
9094 | str / str | map_str | map_str_int | map_str_ip |
9095 | str / sub | map_sub | map_sub_int | map_sub_ip |
9096 | str / dir | map_dir | map_dir_int | map_dir_ip |
9097 | str / dom | map_dom | map_dom_int | map_dom_ip |
9098 | str / end | map_end | map_end_int | map_end_ip |
9099 | str / reg | map_reg | map_reg_int | map_reg_ip |
9100 | int / int | map_int | map_int_int | map_int_ip |
9101 | ip / ip | map_ip | map_ip_int | map_ip_ip |
9102 +---------------+---------+-------------+------------+
9103
9104 The file contains one key + value per line. Lines which start
9105 with '#' are ignored, just like empty lines. Leading tabs and
9106 spaces are stripped. The key is then the first "word" (series
9107 of non-space/tabs characters), and the value is what follows
9108 this series of space/tab till the end of the line excluding
9109 trailing spaces/tabs.
9110
9111 Example :
9112
9113 # this is a comment and is ignored
9114 2.22.246.0/23 United Kingdom \n
9115 <-><-----------><--><------------><---->
9116 | | | | `- trailing spaces ignored
9117 | | | `----------- value
9118 | | `--------------------- middle spaces ignored
9119 | `---------------------------- key
9120 `------------------------------------ leading spaces ignored
9121
Willy Tarreau74ca5042013-06-11 23:12:07 +020091227.3.1. Fetching samples from internal states
9123--------------------------------------------
9124
9125A first set of sample fetch methods applies to internal information which does
9126not even relate to any client information. These ones are sometimes used with
9127"monitor-fail" directives to report an internal status to external watchers.
9128The sample fetch methods described in this section are usable anywhere.
9129
9130always_false : boolean
9131 Always returns the boolean "false" value. It may be used with ACLs as a
9132 temporary replacement for another one when adjusting configurations.
9133
9134always_true : boolean
9135 Always returns the boolean "true" value. It may be used with ACLs as a
9136 temporary replacement for another one when adjusting configurations.
9137
9138avg_queue([<backend>]) : integer
Willy Tarreaud63335a2010-02-26 12:56:52 +01009139 Returns the total number of queued connections of the designated backend
Willy Tarreau74ca5042013-06-11 23:12:07 +02009140 divided by the number of active servers. The current backend is used if no
9141 backend is specified. This is very similar to "queue" except that the size of
9142 the farm is considered, in order to give a more accurate measurement of the
9143 time it may take for a new connection to be processed. The main usage is with
9144 ACL to return a sorry page to new users when it becomes certain they will get
9145 a degraded service, or to pass to the backend servers in a header so that
9146 they decide to work in degraded mode or to disable some functions to speed up
9147 the processing a bit. Note that in the event there would not be any active
9148 server anymore, twice the number of queued connections would be considered as
9149 the measured value. This is a fair estimate, as we expect one server to get
9150 back soon anyway, but we still prefer to send new traffic to another backend
9151 if in better shape. See also the "queue", "be_conn", and "be_sess_rate"
9152 sample fetches.
Krzysztof Piotr Oledzki346f76d2010-01-12 21:59:30 +01009153
Willy Tarreau74ca5042013-06-11 23:12:07 +02009154be_conn([<backend>]) : integer
Willy Tarreaua36af912009-10-10 12:02:45 +02009155 Applies to the number of currently established connections on the backend,
9156 possibly including the connection being evaluated. If no backend name is
9157 specified, the current one is used. But it is also possible to check another
9158 backend. It can be used to use a specific farm when the nominal one is full.
9159 See also the "fe_conn", "queue" and "be_sess_rate" criteria.
Willy Tarreau6a06a402007-07-15 20:15:28 +02009160
Willy Tarreau74ca5042013-06-11 23:12:07 +02009161be_sess_rate([<backend>]) : integer
9162 Returns an integer value corresponding to the sessions creation rate on the
9163 backend, in number of new sessions per second. This is used with ACLs to
9164 switch to an alternate backend when an expensive or fragile one reaches too
9165 high a session rate, or to limit abuse of service (eg. prevent sucking of an
9166 online dictionary). It can also be useful to add this element to logs using a
9167 log-format directive.
Willy Tarreaud63335a2010-02-26 12:56:52 +01009168
9169 Example :
9170 # Redirect to an error page if the dictionary is requested too often
9171 backend dynamic
9172 mode http
9173 acl being_scanned be_sess_rate gt 100
9174 redirect location /denied.html if being_scanned
Willy Tarreau0ba27502007-12-24 16:55:16 +01009175
Willy Tarreau74ca5042013-06-11 23:12:07 +02009176connslots([<backend>]) : integer
9177 Returns an integer value corresponding to the number of connection slots
9178 still available in the backend, by totalizing the maximum amount of
9179 connections on all servers and the maximum queue size. This is probably only
9180 used with ACLs.
Tait Clarridge7896d522012-12-05 21:39:31 -05009181
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +08009182 The basic idea here is to be able to measure the number of connection "slots"
Willy Tarreau55165fe2009-05-10 12:02:55 +02009183 still available (connection + queue), so that anything beyond that (intended
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +08009184 usage; see "use_backend" keyword) can be redirected to a different backend.
9185
Willy Tarreau55165fe2009-05-10 12:02:55 +02009186 'connslots' = number of available server connection slots, + number of
9187 available server queue slots.
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +08009188
Willy Tarreaua36af912009-10-10 12:02:45 +02009189 Note that while "fe_conn" may be used, "connslots" comes in especially
Willy Tarreau55165fe2009-05-10 12:02:55 +02009190 useful when you have a case of traffic going to one single ip, splitting into
Willy Tarreau74ca5042013-06-11 23:12:07 +02009191 multiple backends (perhaps using ACLs to do name-based load balancing) and
Willy Tarreau55165fe2009-05-10 12:02:55 +02009192 you want to be able to differentiate between different backends, and their
9193 available "connslots". Also, whereas "nbsrv" only measures servers that are
Willy Tarreau74ca5042013-06-11 23:12:07 +02009194 actually *down*, this fetch is more fine-grained and looks into the number of
Willy Tarreaua36af912009-10-10 12:02:45 +02009195 available connection slots as well. See also "queue" and "avg_queue".
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +08009196
Willy Tarreau55165fe2009-05-10 12:02:55 +02009197 OTHER CAVEATS AND NOTES: at this point in time, the code does not take care
9198 of dynamic connections. Also, if any of the server maxconn, or maxqueue is 0,
Willy Tarreau74ca5042013-06-11 23:12:07 +02009199 then this fetch clearly does not make sense, in which case the value returned
Willy Tarreau55165fe2009-05-10 12:02:55 +02009200 will be -1.
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +08009201
Willy Tarreau6236d3a2013-07-25 14:28:25 +02009202date([<offset>]) : integer
9203 Returns the current date as the epoch (number of seconds since 01/01/1970).
9204 If an offset value is specified, then it is a number of seconds that is added
9205 to the current date before returning the value. This is particularly useful
9206 to compute relative dates, as both positive and negative offsets are allowed.
Willy Tarreau276fae92013-07-25 14:36:01 +02009207 It is useful combined with the http_date converter.
9208
9209 Example :
9210
9211 # set an expires header to now+1 hour in every response
9212 http-response set-header Expires %[date(3600),http_date]
Willy Tarreau6236d3a2013-07-25 14:28:25 +02009213
Willy Tarreau595ec542013-06-12 21:34:28 +02009214env(<name>) : string
9215 Returns a string containing the value of environment variable <name>. As a
9216 reminder, environment variables are per-process and are sampled when the
9217 process starts. This can be useful to pass some information to a next hop
9218 server, or with ACLs to take specific action when the process is started a
9219 certain way.
9220
9221 Examples :
9222 # Pass the Via header to next hop with the local hostname in it
9223 http-request add-header Via 1.1\ %[env(HOSTNAME)]
9224
9225 # reject cookie-less requests when the STOP environment variable is set
9226 http-request deny if !{ cook(SESSIONID) -m found } { env(STOP) -m found }
9227
Willy Tarreau74ca5042013-06-11 23:12:07 +02009228fe_conn([<frontend>]) : integer
9229 Returns the number of currently established connections on the frontend,
Willy Tarreaud63335a2010-02-26 12:56:52 +01009230 possibly including the connection being evaluated. If no frontend name is
9231 specified, the current one is used. But it is also possible to check another
Willy Tarreau74ca5042013-06-11 23:12:07 +02009232 frontend. It can be used to return a sorry page before hard-blocking, or to
9233 use a specific backend to drain new requests when the farm is considered
9234 full. This is mostly used with ACLs but can also be used to pass some
9235 statistics to servers in HTTP headers. See also the "dst_conn", "be_conn",
9236 "fe_sess_rate" fetches.
Willy Tarreaua36af912009-10-10 12:02:45 +02009237
Willy Tarreau74ca5042013-06-11 23:12:07 +02009238fe_sess_rate([<frontend>]) : integer
9239 Returns an integer value corresponding to the sessions creation rate on the
9240 frontend, in number of new sessions per second. This is used with ACLs to
9241 limit the incoming session rate to an acceptable range in order to prevent
9242 abuse of service at the earliest moment, for example when combined with other
9243 layer 4 ACLs in order to force the clients to wait a bit for the rate to go
9244 down below the limit. It can also be useful to add this element to logs using
9245 a log-format directive. See also the "rate-limit sessions" directive for use
9246 in frontends.
Willy Tarreau079ff0a2009-03-05 21:34:28 +01009247
9248 Example :
9249 # This frontend limits incoming mails to 10/s with a max of 100
9250 # concurrent connections. We accept any connection below 10/s, and
9251 # force excess clients to wait for 100 ms. Since clients are limited to
9252 # 100 max, there cannot be more than 10 incoming mails per second.
9253 frontend mail
9254 bind :25
9255 mode tcp
9256 maxconn 100
9257 acl too_fast fe_sess_rate ge 10
9258 tcp-request inspect-delay 100ms
9259 tcp-request content accept if ! too_fast
9260 tcp-request content accept if WAIT_END
Willy Tarreaud72758d2010-01-12 10:42:19 +01009261
Willy Tarreau74ca5042013-06-11 23:12:07 +02009262nbsrv([<backend>]) : integer
9263 Returns an integer value corresponding to the number of usable servers of
9264 either the current backend or the named backend. This is mostly used with
9265 ACLs but can also be useful when added to logs. This is normally used to
Willy Tarreaud63335a2010-02-26 12:56:52 +01009266 switch to an alternate backend when the number of servers is too low to
9267 to handle some load. It is useful to report a failure when combined with
9268 "monitor fail".
Willy Tarreau079ff0a2009-03-05 21:34:28 +01009269
Willy Tarreau74ca5042013-06-11 23:12:07 +02009270queue([<backend>]) : integer
Willy Tarreaud63335a2010-02-26 12:56:52 +01009271 Returns the total number of queued connections of the designated backend,
9272 including all the connections in server queues. If no backend name is
9273 specified, the current one is used, but it is also possible to check another
Willy Tarreau74ca5042013-06-11 23:12:07 +02009274 one. This is useful with ACLs or to pass statistics to backend servers. This
9275 can be used to take actions when queuing goes above a known level, generally
9276 indicating a surge of traffic or a massive slowdown on the servers. One
9277 possible action could be to reject new users but still accept old ones. See
9278 also the "avg_queue", "be_conn", and "be_sess_rate" fetches.
9279
9280srv_conn([<backend>/]<server>) : integer
9281 Returns an integer value corresponding to the number of currently established
9282 connections on the designated server, possibly including the connection being
9283 evaluated. If <backend> is omitted, then the server is looked up in the
9284 current backend. It can be used to use a specific farm when one server is
9285 full, or to inform the server about our view of the number of active
9286 connections with it. See also the "fe_conn", "be_conn" and "queue" fetch
9287 methods.
9288
9289srv_is_up([<backend>/]<server>) : boolean
9290 Returns true when the designated server is UP, and false when it is either
9291 DOWN or in maintenance mode. If <backend> is omitted, then the server is
9292 looked up in the current backend. It is mainly used to take action based on
9293 an external status reported via a health check (eg: a geographical site's
9294 availability). Another possible use which is more of a hack consists in
9295 using dummy servers as boolean variables that can be enabled or disabled from
9296 the CLI, so that rules depending on those ACLs can be tweaked in realtime.
9297
9298srv_sess_rate([<backend>/]<server>) : integer
9299 Returns an integer corresponding to the sessions creation rate on the
9300 designated server, in number of new sessions per second. If <backend> is
9301 omitted, then the server is looked up in the current backend. This is mosly
9302 used with ACLs but can make sense with logs too. This is used to switch to an
9303 alternate backend when an expensive or fragile one reaches too high a session
9304 rate, or to limit abuse of service (eg. prevent latent requests from
9305 overloading servers).
9306
9307 Example :
9308 # Redirect to a separate back
9309 acl srv1_full srv_sess_rate(be1/srv1) gt 50
9310 acl srv2_full srv_sess_rate(be1/srv2) gt 50
9311 use_backend be2 if srv1_full or srv2_full
9312
9313table_avl([<table>]) : integer
9314 Returns the total number of available entries in the current proxy's
9315 stick-table or in the designated stick-table. See also table_cnt.
9316
9317table_cnt([<table>]) : integer
9318 Returns the total number of entries currently in use in the current proxy's
9319 stick-table or in the designated stick-table. See also src_conn_cnt and
9320 table_avl for other entry counting methods.
9321
9322
93237.3.2. Fetching samples at Layer 4
9324----------------------------------
9325
9326The layer 4 usually describes just the transport layer which in haproxy is
9327closest to the connection, where no content is yet made available. The fetch
9328methods described here are usable as low as the "tcp-request connection" rule
9329sets unless they require some future information. Those generally include
9330TCP/IP addresses and ports, as well as elements from stick-tables related to
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009331the incoming connection. For retrieving a value from a sticky counters, the
9332counter number can be explicitly set as 0, 1, or 2 using the pre-defined
9333"sc0_", "sc1_", or "sc2_" prefix, or it can be specified as the first integer
Willy Tarreau0f791d42013-07-23 19:56:43 +02009334argument when using the "sc_" prefix. An optional table may be specified with
9335the "sc*" form, in which case the currently tracked key will be looked up into
9336this alternate table instead of the table currently being tracked.
Willy Tarreau74ca5042013-06-11 23:12:07 +02009337
9338be_id : integer
9339 Returns an integer containing the current backend's id. It can be used in
9340 frontends with responses to check which backend processed the request.
9341
9342dst : ip
9343 This is the destination IPv4 address of the connection on the client side,
9344 which is the address the client connected to. It can be useful when running
9345 in transparent mode. It is of type IP and works on both IPv4 and IPv6 tables.
9346 On IPv6 tables, IPv4 address is mapped to its IPv6 equivalent, according to
9347 RFC 4291.
9348
9349dst_conn : integer
9350 Returns an integer value corresponding to the number of currently established
9351 connections on the same socket including the one being evaluated. It is
9352 normally used with ACLs but can as well be used to pass the information to
9353 servers in an HTTP header or in logs. It can be used to either return a sorry
9354 page before hard-blocking, or to use a specific backend to drain new requests
9355 when the socket is considered saturated. This offers the ability to assign
9356 different limits to different listening ports or addresses. See also the
9357 "fe_conn" and "be_conn" fetches.
Willy Tarreaud63335a2010-02-26 12:56:52 +01009358
Willy Tarreau74ca5042013-06-11 23:12:07 +02009359dst_port : integer
9360 Returns an integer value corresponding to the destination TCP port of the
9361 connection on the client side, which is the port the client connected to.
9362 This might be used when running in transparent mode, when assigning dynamic
9363 ports to some clients for a whole application session, to stick all users to
9364 a same server, or to pass the destination port information to a server using
9365 an HTTP header.
9366
9367fe_id : integer
9368 Returns an integer containing the current frontend's id. It can be used in
9369 backends to check from which backend it was called, or to stick all users
9370 coming via a same frontend to the same server.
9371
Willy Tarreau0f791d42013-07-23 19:56:43 +02009372sc_bytes_in_rate(<ctr>,[<table>]) : integer
9373sc0_bytes_in_rate([<table>]) : integer
9374sc1_bytes_in_rate([<table>]) : integer
9375sc2_bytes_in_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +02009376 Returns the average client-to-server bytes rate from the currently tracked
9377 counters, measured in amount of bytes over the period configured in the
9378 table. See also src_bytes_in_rate.
9379
Willy Tarreau0f791d42013-07-23 19:56:43 +02009380sc_bytes_out_rate(<ctr>,[<table>]) : integer
9381sc0_bytes_out_rate([<table>]) : integer
9382sc1_bytes_out_rate([<table>]) : integer
9383sc2_bytes_out_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +02009384 Returns the average server-to-client bytes rate from the currently tracked
9385 counters, measured in amount of bytes over the period configured in the
9386 table. See also src_bytes_out_rate.
9387
Willy Tarreau0f791d42013-07-23 19:56:43 +02009388sc_clr_gpc0(<ctr>,[<table>]) : integer
9389sc0_clr_gpc0([<table>]) : integer
9390sc1_clr_gpc0([<table>]) : integer
9391sc2_clr_gpc0([<table>]) : integer
Willy Tarreauf73cd112011-08-13 01:45:16 +02009392 Clears the first General Purpose Counter associated to the currently tracked
9393 counters, and returns its previous value. Before the first invocation, the
Willy Tarreau869948b2013-01-04 14:14:57 +01009394 stored value is zero, so first invocation will always return zero. This is
9395 typically used as a second ACL in an expression in order to mark a connection
9396 when a first ACL was verified :
Willy Tarreauf73cd112011-08-13 01:45:16 +02009397
9398 # block if 5 consecutive requests continue to come faster than 10 sess
9399 # per second, and reset the counter as soon as the traffic slows down.
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009400 acl abuse sc0_http_req_rate gt 10
9401 acl kill sc0_inc_gpc0 gt 5
9402 acl save sc0_clr_gpc0 ge 0
Willy Tarreauf73cd112011-08-13 01:45:16 +02009403 tcp-request connection accept if !abuse save
9404 tcp-request connection reject if abuse kill
9405
Willy Tarreau0f791d42013-07-23 19:56:43 +02009406sc_conn_cnt(<ctr>,[<table>]) : integer
9407sc0_conn_cnt([<table>]) : integer
9408sc1_conn_cnt([<table>]) : integer
9409sc2_conn_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +02009410 Returns the cumulated number of incoming connections from currently tracked
9411 counters. See also src_conn_cnt.
9412
Willy Tarreau0f791d42013-07-23 19:56:43 +02009413sc_conn_cur(<ctr>,[<table>]) : integer
9414sc0_conn_cur([<table>]) : integer
9415sc1_conn_cur([<table>]) : integer
9416sc2_conn_cur([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +02009417 Returns the current amount of concurrent connections tracking the same
9418 tracked counters. This number is automatically incremented when tracking
9419 begins and decremented when tracking stops. See also src_conn_cur.
9420
Willy Tarreau0f791d42013-07-23 19:56:43 +02009421sc_conn_rate(<ctr>,[<table>]) : integer
9422sc0_conn_rate([<table>]) : integer
9423sc1_conn_rate([<table>]) : integer
9424sc2_conn_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +02009425 Returns the average connection rate from the currently tracked counters,
9426 measured in amount of connections over the period configured in the table.
9427 See also src_conn_rate.
9428
Willy Tarreau0f791d42013-07-23 19:56:43 +02009429sc_get_gpc0(<ctr>,[<table>]) : integer
9430sc0_get_gpc0([<table>]) : integer
9431sc1_get_gpc0([<table>]) : integer
9432sc2_get_gpc0([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +02009433 Returns the value of the first General Purpose Counter associated to the
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009434 currently tracked counters. See also src_get_gpc0 and sc/sc0/sc1/sc2_inc_gpc0.
Willy Tarreauba2ffd12013-05-29 15:54:14 +02009435
Willy Tarreau0f791d42013-07-23 19:56:43 +02009436sc_gpc0_rate(<ctr>,[<table>]) : integer
9437sc0_gpc0_rate([<table>]) : integer
9438sc1_gpc0_rate([<table>]) : integer
9439sc2_gpc0_rate([<table>]) : integer
Willy Tarreauba2ffd12013-05-29 15:54:14 +02009440 Returns the average increment rate of the first General Purpose Counter
9441 associated to the currently tracked counters. It reports the frequency
9442 which the gpc0 counter was incremented over the configured period. See also
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009443 src_gpc0_rate, sc/sc0/sc1/sc2_get_gpc0, and sc/sc0/sc1/sc2_inc_gpc0. Note
9444 that the "gpc0_rate" counter must be stored in the stick-table for a value to
9445 be returned, as "gpc0" only holds the event count.
Willy Tarreaue9656522010-08-17 15:40:09 +02009446
Willy Tarreau0f791d42013-07-23 19:56:43 +02009447sc_http_err_cnt(<ctr>,[<table>]) : integer
9448sc0_http_err_cnt([<table>]) : integer
9449sc1_http_err_cnt([<table>]) : integer
9450sc2_http_err_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +02009451 Returns the cumulated number of HTTP errors from the currently tracked
9452 counters. This includes the both request errors and 4xx error responses.
9453 See also src_http_err_cnt.
9454
Willy Tarreau0f791d42013-07-23 19:56:43 +02009455sc_http_err_rate(<ctr>,[<table>]) : integer
9456sc0_http_err_rate([<table>]) : integer
9457sc1_http_err_rate([<table>]) : integer
9458sc2_http_err_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +02009459 Returns the average rate of HTTP errors from the currently tracked counters,
9460 measured in amount of errors over the period configured in the table. This
9461 includes the both request errors and 4xx error responses. See also
9462 src_http_err_rate.
9463
Willy Tarreau0f791d42013-07-23 19:56:43 +02009464sc_http_req_cnt(<ctr>,[<table>]) : integer
9465sc0_http_req_cnt([<table>]) : integer
9466sc1_http_req_cnt([<table>]) : integer
9467sc2_http_req_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +02009468 Returns the cumulated number of HTTP requests from the currently tracked
9469 counters. This includes every started request, valid or not. See also
9470 src_http_req_cnt.
9471
Willy Tarreau0f791d42013-07-23 19:56:43 +02009472sc_http_req_rate(<ctr>,[<table>]) : integer
9473sc0_http_req_rate([<table>]) : integer
9474sc1_http_req_rate([<table>]) : integer
9475sc2_http_req_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +02009476 Returns the average rate of HTTP requests from the currently tracked
9477 counters, measured in amount of requests over the period configured in
9478 the table. This includes every started request, valid or not. See also
9479 src_http_req_rate.
9480
Willy Tarreau0f791d42013-07-23 19:56:43 +02009481sc_inc_gpc0(<ctr>,[<table>]) : integer
9482sc0_inc_gpc0([<table>]) : integer
9483sc1_inc_gpc0([<table>]) : integer
9484sc2_inc_gpc0([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +02009485 Increments the first General Purpose Counter associated to the currently
Willy Tarreau869948b2013-01-04 14:14:57 +01009486 tracked counters, and returns its new value. Before the first invocation,
9487 the stored value is zero, so first invocation will increase it to 1 and will
9488 return 1. This is typically used as a second ACL in an expression in order
9489 to mark a connection when a first ACL was verified :
Willy Tarreaue9656522010-08-17 15:40:09 +02009490
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009491 acl abuse sc0_http_req_rate gt 10
9492 acl kill sc0_inc_gpc0 gt 0
Willy Tarreaue9656522010-08-17 15:40:09 +02009493 tcp-request connection reject if abuse kill
9494
Willy Tarreau0f791d42013-07-23 19:56:43 +02009495sc_kbytes_in(<ctr>,[<table>]) : integer
9496sc0_kbytes_in([<table>]) : integer
9497sc1_kbytes_in([<table>]) : integer
9498sc2_kbytes_in([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +02009499 Returns the amount of client-to-server data from the currently tracked
9500 counters, measured in kilobytes over the period configured in the table. The
9501 test is currently performed on 32-bit integers, which limits values to 4
9502 terabytes. See also src_kbytes_in.
9503
Willy Tarreau0f791d42013-07-23 19:56:43 +02009504sc_kbytes_out(<ctr>,[<table>]) : integer
9505sc0_kbytes_out([<table>]) : integer
9506sc1_kbytes_out([<table>]) : integer
9507sc2_kbytes_out([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +02009508 Returns the amount of server-to-client data from the currently tracked
9509 counters, measured in kilobytes over the period configured in the table. The
9510 test is currently performed on 32-bit integers, which limits values to 4
9511 terabytes. See also src_kbytes_out.
9512
Willy Tarreau0f791d42013-07-23 19:56:43 +02009513sc_sess_cnt(<ctr>,[<table>]) : integer
9514sc0_sess_cnt([<table>]) : integer
9515sc1_sess_cnt([<table>]) : integer
9516sc2_sess_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +02009517 Returns the cumulated number of incoming connections that were transformed
9518 into sessions, which means that they were accepted by a "tcp-request
9519 connection" rule, from the currently tracked counters. A backend may count
9520 more sessions than connections because each connection could result in many
Jamie Gloudonaaa21002012-08-25 00:18:33 -04009521 backend sessions if some HTTP keep-alive is performed over the connection
Willy Tarreaue9656522010-08-17 15:40:09 +02009522 with the client. See also src_sess_cnt.
9523
Willy Tarreau0f791d42013-07-23 19:56:43 +02009524sc_sess_rate(<ctr>,[<table>]) : integer
9525sc0_sess_rate([<table>]) : integer
9526sc1_sess_rate([<table>]) : integer
9527sc2_sess_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +02009528 Returns the average session rate from the currently tracked counters,
9529 measured in amount of sessions over the period configured in the table. A
9530 session is a connection that got past the early "tcp-request connection"
9531 rules. A backend may count more sessions than connections because each
9532 connection could result in many backend sessions if some HTTP keep-alive is
Jamie Gloudonaaa21002012-08-25 00:18:33 -04009533 performed over the connection with the client. See also src_sess_rate.
Willy Tarreaue9656522010-08-17 15:40:09 +02009534
Willy Tarreau0f791d42013-07-23 19:56:43 +02009535sc_tracked(<ctr>,[<table>]) : boolean
9536sc0_tracked([<table>]) : boolean
9537sc1_tracked([<table>]) : boolean
9538sc2_tracked([<table>]) : boolean
Willy Tarreau6f1615f2013-06-03 15:15:22 +02009539 Returns true if the designated session counter is currently being tracked by
9540 the current session. This can be useful when deciding whether or not we want
9541 to set some values in a header passed to the server.
9542
Willy Tarreau0f791d42013-07-23 19:56:43 +02009543sc_trackers(<ctr>,[<table>]) : integer
9544sc0_trackers([<table>]) : integer
9545sc1_trackers([<table>]) : integer
9546sc2_trackers([<table>]) : integer
Willy Tarreau2406db42012-12-09 12:16:43 +01009547 Returns the current amount of concurrent connections tracking the same
9548 tracked counters. This number is automatically incremented when tracking
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009549 begins and decremented when tracking stops. It differs from sc0_conn_cur in
Willy Tarreau2406db42012-12-09 12:16:43 +01009550 that it does not rely on any stored information but on the table's reference
9551 count (the "use" value which is returned by "show table" on the CLI). This
Willy Tarreau74ca5042013-06-11 23:12:07 +02009552 may sometimes be more suited for layer7 tracking. It can be used to tell a
9553 server how many concurrent connections there are from a given address for
9554 example.
Willy Tarreau2406db42012-12-09 12:16:43 +01009555
Willy Tarreau74ca5042013-06-11 23:12:07 +02009556so_id : integer
9557 Returns an integer containing the current listening socket's id. It is useful
9558 in frontends involving many "bind" lines, or to stick all users coming via a
9559 same socket to the same server.
Willy Tarreaud63335a2010-02-26 12:56:52 +01009560
Willy Tarreau74ca5042013-06-11 23:12:07 +02009561src : ip
9562 This is the source IPv4 address of the client of the session. It is of type
9563 IP and works on both IPv4 and IPv6 tables. On IPv6 tables, IPv4 addresses are
9564 mapped to their IPv6 equivalent, according to RFC 4291. Note that it is the
9565 TCP-level source address which is used, and not the address of a client
9566 behind a proxy. However if the "accept-proxy" bind directive is used, it can
9567 be the address of a client behind another PROXY-protocol compatible component
9568 for all rule sets except "tcp-request connection" which sees the real address.
Willy Tarreaud63335a2010-02-26 12:56:52 +01009569
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +01009570 Example:
9571 # add an HTTP header in requests with the originating address' country
9572 http-request set-header X-Country %[src,map_ip(geoip.lst)]
9573
Willy Tarreau74ca5042013-06-11 23:12:07 +02009574src_bytes_in_rate([<table>]) : integer
9575 Returns the average bytes rate from the incoming connection's source address
9576 in the current proxy's stick-table or in the designated stick-table, measured
9577 in amount of bytes over the period configured in the table. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009578 not found, zero is returned. See also sc/sc0/sc1/sc2_bytes_in_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +02009579
Willy Tarreau74ca5042013-06-11 23:12:07 +02009580src_bytes_out_rate([<table>]) : integer
9581 Returns the average bytes rate to the incoming connection's source address in
9582 the current proxy's stick-table or in the designated stick-table, measured in
Willy Tarreauc9705a12010-07-27 20:05:50 +02009583 amount of bytes over the period configured in the table. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009584 not found, zero is returned. See also sc/sc0/sc1/sc2_bytes_out_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +02009585
Willy Tarreau74ca5042013-06-11 23:12:07 +02009586src_clr_gpc0([<table>]) : integer
9587 Clears the first General Purpose Counter associated to the incoming
9588 connection's source address in the current proxy's stick-table or in the
9589 designated stick-table, and returns its previous value. If the address is not
9590 found, an entry is created and 0 is returned. This is typically used as a
9591 second ACL in an expression in order to mark a connection when a first ACL
9592 was verified :
Willy Tarreauf73cd112011-08-13 01:45:16 +02009593
9594 # block if 5 consecutive requests continue to come faster than 10 sess
9595 # per second, and reset the counter as soon as the traffic slows down.
9596 acl abuse src_http_req_rate gt 10
9597 acl kill src_inc_gpc0 gt 5
Willy Tarreau869948b2013-01-04 14:14:57 +01009598 acl save src_clr_gpc0 ge 0
Willy Tarreauf73cd112011-08-13 01:45:16 +02009599 tcp-request connection accept if !abuse save
9600 tcp-request connection reject if abuse kill
9601
Willy Tarreau74ca5042013-06-11 23:12:07 +02009602src_conn_cnt([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +02009603 Returns the cumulated number of connections initiated from the current
Willy Tarreau74ca5042013-06-11 23:12:07 +02009604 incoming connection's source address in the current proxy's stick-table or in
Willy Tarreauc9705a12010-07-27 20:05:50 +02009605 the designated stick-table. If the address is not found, zero is returned.
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009606 See also sc/sc0/sc1/sc2_conn_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +02009607
Willy Tarreau74ca5042013-06-11 23:12:07 +02009608src_conn_cur([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +02009609 Returns the current amount of concurrent connections initiated from the
Willy Tarreau74ca5042013-06-11 23:12:07 +02009610 current incoming connection's source address in the current proxy's
9611 stick-table or in the designated stick-table. If the address is not found,
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009612 zero is returned. See also sc/sc0/sc1/sc2_conn_cur.
Willy Tarreauc9705a12010-07-27 20:05:50 +02009613
Willy Tarreau74ca5042013-06-11 23:12:07 +02009614src_conn_rate([<table>]) : integer
9615 Returns the average connection rate from the incoming connection's source
9616 address in the current proxy's stick-table or in the designated stick-table,
9617 measured in amount of connections over the period configured in the table. If
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009618 the address is not found, zero is returned. See also sc/sc0/sc1/sc2_conn_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +02009619
Willy Tarreau74ca5042013-06-11 23:12:07 +02009620src_get_gpc0([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +02009621 Returns the value of the first General Purpose Counter associated to the
Willy Tarreau74ca5042013-06-11 23:12:07 +02009622 incoming connection's source address in the current proxy's stick-table or in
Willy Tarreauc9705a12010-07-27 20:05:50 +02009623 the designated stick-table. If the address is not found, zero is returned.
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009624 See also sc/sc0/sc1/sc2_get_gpc0 and src_inc_gpc0.
Willy Tarreauc9705a12010-07-27 20:05:50 +02009625
Willy Tarreau74ca5042013-06-11 23:12:07 +02009626src_gpc0_rate([<table>]) : integer
Willy Tarreauba2ffd12013-05-29 15:54:14 +02009627 Returns the average increment rate of the first General Purpose Counter
Willy Tarreau74ca5042013-06-11 23:12:07 +02009628 associated to the incoming connection's source address in the current proxy's
Willy Tarreauba2ffd12013-05-29 15:54:14 +02009629 stick-table or in the designated stick-table. It reports the frequency
9630 which the gpc0 counter was incremented over the configured period. See also
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009631 sc/sc0/sc1/sc2_gpc0_rate, src_get_gpc0, and sc/sc0/sc1/sc2_inc_gpc0. Note
9632 that the "gpc0_rate" counter must be stored in the stick-table for a value to
9633 be returned, as "gpc0" only holds the event count.
Willy Tarreauba2ffd12013-05-29 15:54:14 +02009634
Willy Tarreau74ca5042013-06-11 23:12:07 +02009635src_http_err_cnt([<table>]) : integer
9636 Returns the cumulated number of HTTP errors from the incoming connection's
9637 source address in the current proxy's stick-table or in the designated
Willy Tarreauc9705a12010-07-27 20:05:50 +02009638 stick-table. This includes the both request errors and 4xx error responses.
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009639 See also sc/sc0/sc1/sc2_http_err_cnt. If the address is not found, zero is
Willy Tarreau74ca5042013-06-11 23:12:07 +02009640 returned.
Willy Tarreauc9705a12010-07-27 20:05:50 +02009641
Willy Tarreau74ca5042013-06-11 23:12:07 +02009642src_http_err_rate([<table>]) : integer
9643 Returns the average rate of HTTP errors from the incoming connection's source
9644 address in the current proxy's stick-table or in the designated stick-table,
9645 measured in amount of errors over the period configured in the table. This
9646 includes the both request errors and 4xx error responses. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009647 not found, zero is returned. See also sc/sc0/sc1/sc2_http_err_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +02009648
Willy Tarreau74ca5042013-06-11 23:12:07 +02009649src_http_req_cnt([<table>]) : integer
9650 Returns the cumulated number of HTTP requests from the incoming connection's
9651 source address in the current proxy's stick-table or in the designated stick-
9652 table. This includes every started request, valid or not. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009653 not found, zero is returned. See also sc/sc0/sc1/sc2_http_req_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +02009654
Willy Tarreau74ca5042013-06-11 23:12:07 +02009655src_http_req_rate([<table>]) : integer
9656 Returns the average rate of HTTP requests from the incoming connection's
9657 source address in the current proxy's stick-table or in the designated stick-
9658 table, measured in amount of requests over the period configured in the
Willy Tarreauc9705a12010-07-27 20:05:50 +02009659 table. This includes every started request, valid or not. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009660 not found, zero is returned. See also sc/sc0/sc1/sc2_http_req_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +02009661
Willy Tarreau74ca5042013-06-11 23:12:07 +02009662src_inc_gpc0([<table>]) : integer
9663 Increments the first General Purpose Counter associated to the incoming
9664 connection's source address in the current proxy's stick-table or in the
9665 designated stick-table, and returns its new value. If the address is not
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009666 found, an entry is created and 1 is returned. See also sc0/sc2/sc2_inc_gpc0.
Willy Tarreau74ca5042013-06-11 23:12:07 +02009667 This is typically used as a second ACL in an expression in order to mark a
9668 connection when a first ACL was verified :
Willy Tarreauc9705a12010-07-27 20:05:50 +02009669
9670 acl abuse src_http_req_rate gt 10
Willy Tarreau869948b2013-01-04 14:14:57 +01009671 acl kill src_inc_gpc0 gt 0
Willy Tarreaue9656522010-08-17 15:40:09 +02009672 tcp-request connection reject if abuse kill
Willy Tarreauc9705a12010-07-27 20:05:50 +02009673
Willy Tarreau74ca5042013-06-11 23:12:07 +02009674src_kbytes_in([<table>]) : integer
9675 Returns the amount of data received from the incoming connection's source
9676 address in the current proxy's stick-table or in the designated stick-table,
9677 measured in kilobytes over the period configured in the table. If the address
9678 is not found, zero is returned. The test is currently performed on 32-bit
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009679 integers, which limits values to 4 terabytes. See also
9680 sc/sc0/sc1/sc2_kbytes_in.
Willy Tarreauc9705a12010-07-27 20:05:50 +02009681
Willy Tarreau74ca5042013-06-11 23:12:07 +02009682src_kbytes_out([<table>]) : integer
9683 Returns the amount of data sent to the incoming connection's source address
9684 in the current proxy's stick-table or in the designated stick-table, measured
Willy Tarreauc9705a12010-07-27 20:05:50 +02009685 in kilobytes over the period configured in the table. If the address is not
9686 found, zero is returned. The test is currently performed on 32-bit integers,
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009687 which limits values to 4 terabytes. See also sc/sc0/sc1/sc2_kbytes_out.
Willy Tarreaua975b8f2010-06-05 19:13:27 +02009688
Willy Tarreau74ca5042013-06-11 23:12:07 +02009689src_port : integer
9690 Returns an integer value corresponding to the TCP source port of the
9691 connection on the client side, which is the port the client connected from.
9692 Usage of this function is very limited as modern protocols do not care much
9693 about source ports nowadays.
Willy Tarreau079ff0a2009-03-05 21:34:28 +01009694
Willy Tarreau74ca5042013-06-11 23:12:07 +02009695src_sess_cnt([<table>]) : integer
9696 Returns the cumulated number of connections initiated from the incoming
Willy Tarreauc9705a12010-07-27 20:05:50 +02009697 connection's source IPv4 address in the current proxy's stick-table or in the
9698 designated stick-table, that were transformed into sessions, which means that
9699 they were accepted by "tcp-request" rules. If the address is not found, zero
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009700 is returned. See also sc/sc0/sc1/sc2_sess_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +02009701
Willy Tarreau74ca5042013-06-11 23:12:07 +02009702src_sess_rate([<table>]) : integer
9703 Returns the average session rate from the incoming connection's source
9704 address in the current proxy's stick-table or in the designated stick-table,
9705 measured in amount of sessions over the period configured in the table. A
9706 session is a connection that went past the early "tcp-request" rules. If the
Willy Tarreau4d4149c2013-07-23 19:33:46 +02009707 address is not found, zero is returned. See also sc/sc0/sc1/sc2_sess_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +02009708
Willy Tarreau74ca5042013-06-11 23:12:07 +02009709src_updt_conn_cnt([<table>]) : integer
9710 Creates or updates the entry associated to the incoming connection's source
9711 address in the current proxy's stick-table or in the designated stick-table.
9712 This table must be configured to store the "conn_cnt" data type, otherwise
9713 the match will be ignored. The current count is incremented by one, and the
9714 expiration timer refreshed. The updated count is returned, so this match
9715 can't return zero. This was used to reject service abusers based on their
9716 source address. Note: it is recommended to use the more complete "track-sc*"
9717 actions in "tcp-request" rules instead.
Willy Tarreaua975b8f2010-06-05 19:13:27 +02009718
9719 Example :
9720 # This frontend limits incoming SSH connections to 3 per 10 second for
9721 # each source address, and rejects excess connections until a 10 second
9722 # silence is observed. At most 20 addresses are tracked.
9723 listen ssh
9724 bind :22
9725 mode tcp
9726 maxconn 100
Willy Tarreauc9705a12010-07-27 20:05:50 +02009727 stick-table type ip size 20 expire 10s store conn_cnt
Willy Tarreau74ca5042013-06-11 23:12:07 +02009728 tcp-request content reject if { src_updt_conn_cnt gt 3 }
Willy Tarreaua975b8f2010-06-05 19:13:27 +02009729 server local 127.0.0.1:22
9730
Willy Tarreau74ca5042013-06-11 23:12:07 +02009731srv_id : integer
9732 Returns an integer containing the server's id when processing the response.
9733 While it's almost only used with ACLs, it may be used for logging or
9734 debugging.
Hervé COMMOWICKdaa824e2011-08-05 12:09:44 +02009735
Hervé COMMOWICK35ed8012010-12-15 14:04:51 +01009736
Willy Tarreau74ca5042013-06-11 23:12:07 +020097377.3.3. Fetching samples at Layer 5
9738----------------------------------
Willy Tarreau0b1cd942010-05-16 22:18:27 +02009739
Willy Tarreau74ca5042013-06-11 23:12:07 +02009740The layer 5 usually describes just the session layer which in haproxy is
9741closest to the session once all the connection handshakes are finished, but
9742when no content is yet made available. The fetch methods described here are
9743usable as low as the "tcp-request content" rule sets unless they require some
9744future information. Those generally include the results of SSL negociations.
Willy Tarreauc735a072011-03-29 00:57:02 +02009745
Willy Tarreau74ca5042013-06-11 23:12:07 +02009746ssl_c_ca_err : integer
9747 When the incoming connection was made over an SSL/TLS transport layer,
9748 returns the ID of the first error detected during verification of the client
9749 certificate at depth > 0, or 0 if no error was encountered during this
9750 verification process. Please refer to your SSL library's documentation to
9751 find the exhaustive list of error codes.
Willy Tarreauc735a072011-03-29 00:57:02 +02009752
Willy Tarreau74ca5042013-06-11 23:12:07 +02009753ssl_c_ca_err_depth : integer
9754 When the incoming connection was made over an SSL/TLS transport layer,
9755 returns the depth in the CA chain of the first error detected during the
9756 verification of the client certificate. If no error is encountered, 0 is
9757 returned.
Willy Tarreau0ba27502007-12-24 16:55:16 +01009758
Willy Tarreau74ca5042013-06-11 23:12:07 +02009759ssl_c_err : integer
9760 When the incoming connection was made over an SSL/TLS transport layer,
9761 returns the ID of the first error detected during verification at depth 0, or
9762 0 if no error was encountered during this verification process. Please refer
9763 to your SSL library's documentation to find the exhaustive list of error
9764 codes.
Willy Tarreau62644772008-07-16 18:36:06 +02009765
Willy Tarreau74ca5042013-06-11 23:12:07 +02009766ssl_c_i_dn([<entry>[,<occ>]]) : string
9767 When the incoming connection was made over an SSL/TLS transport layer,
9768 returns the full distinguished name of the issuer of the certificate
9769 presented by the client when no <entry> is specified, or the value of the
9770 first given entry found from the beginning of the DN. If a positive/negative
9771 occurrence number is specified as the optional second argument, it returns
9772 the value of the nth given entry value from the beginning/end of the DN.
9773 For instance, "ssl_c_i_dn(OU,2)" the second organization unit, and
9774 "ssl_c_i_dn(CN)" retrieves the common name.
Willy Tarreau62644772008-07-16 18:36:06 +02009775
Willy Tarreau74ca5042013-06-11 23:12:07 +02009776 ACL derivatives :
9777 ssl_c_i_dn([<entry>[,<occ>]]) : exact string match
Willy Tarreaub6672b52011-12-12 17:23:41 +01009778
Willy Tarreau74ca5042013-06-11 23:12:07 +02009779ssl_c_key_alg : string
9780 Returns the name of the algorithm used to generate the key of the certificate
9781 presented by the client when the incoming connection was made over an SSL/TLS
9782 transport layer.
Willy Tarreau62644772008-07-16 18:36:06 +02009783
Willy Tarreau74ca5042013-06-11 23:12:07 +02009784 ACL derivatives :
9785 ssl_c_key_alg : exact string match
Willy Tarreau2492d5b2009-07-11 00:06:00 +02009786
Willy Tarreau74ca5042013-06-11 23:12:07 +02009787ssl_c_notafter : string
9788 Returns the end date presented by the client as a formatted string
9789 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
9790 transport layer.
Emeric Brunbede3d02009-06-30 17:54:00 +02009791
Willy Tarreau74ca5042013-06-11 23:12:07 +02009792 ACL derivatives :
9793 ssl_c_notafter : exact string match
Emeric Brunbede3d02009-06-30 17:54:00 +02009794
Willy Tarreau74ca5042013-06-11 23:12:07 +02009795ssl_c_notbefore : string
9796 Returns the start date presented by the client as a formatted string
9797 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
9798 transport layer.
Willy Tarreaub6672b52011-12-12 17:23:41 +01009799
Willy Tarreau74ca5042013-06-11 23:12:07 +02009800 ACL derivatives :
9801 ssl_c_notbefore : exact string match
Willy Tarreaub6672b52011-12-12 17:23:41 +01009802
Willy Tarreau74ca5042013-06-11 23:12:07 +02009803ssl_c_s_dn([<entry>[,<occ>]]) : string
9804 When the incoming connection was made over an SSL/TLS transport layer,
9805 returns the full distinguished name of the subject of the certificate
9806 presented by the client when no <entry> is specified, or the value of the
9807 first given entry found from the beginning of the DN. If a positive/negative
9808 occurrence number is specified as the optional second argument, it returns
9809 the value of the nth given entry value from the beginning/end of the DN.
9810 For instance, "ssl_c_s_dn(OU,2)" the second organization unit, and
9811 "ssl_c_s_dn(CN)" retrieves the common name.
Willy Tarreaub6672b52011-12-12 17:23:41 +01009812
Willy Tarreau74ca5042013-06-11 23:12:07 +02009813 ACL derivatives :
9814 ssl_c_s_dn([<entry>[,<occ>]]) : exact string match
Willy Tarreau7875d092012-09-10 08:20:03 +02009815
Willy Tarreau74ca5042013-06-11 23:12:07 +02009816ssl_c_serial : binary
9817 Returns the serial of the certificate presented by the client when the
9818 incoming connection was made over an SSL/TLS transport layer. When used for
9819 an ACL, the value(s) to match against can be passed in hexadecimal form.
Emeric Brun2525b6b2012-10-18 15:59:43 +02009820
Willy Tarreau74ca5042013-06-11 23:12:07 +02009821 ACL derivatives :
9822 ssl_c_serial : hex block match
Emeric Brun2525b6b2012-10-18 15:59:43 +02009823
Willy Tarreau74ca5042013-06-11 23:12:07 +02009824ssl_c_sha1 : binary
9825 Returns the SHA-1 fingerprint of the certificate presented by the client when
9826 the incoming connection was made over an SSL/TLS transport layer. This can be
9827 used to stick a client to a server, or to pass this information to a server.
Emeric Brun2525b6b2012-10-18 15:59:43 +02009828
Willy Tarreau74ca5042013-06-11 23:12:07 +02009829ssl_c_sig_alg : string
9830 Returns the name of the algorithm used to sign the certificate presented by
9831 the client when the incoming connection was made over an SSL/TLS transport
9832 layer.
Emeric Brun87855892012-10-17 17:39:35 +02009833
Willy Tarreau74ca5042013-06-11 23:12:07 +02009834 ACL derivatives :
9835 ssl_c_sig_alg : exact string match
9836
9837ssl_c_used : boolean
9838 Returns true if current SSL session uses a client certificate even if current
9839 connection uses SSL session resumption. See also "ssl_fc_has_crt".
Emeric Brun7f56e742012-10-19 18:15:40 +02009840
Willy Tarreau74ca5042013-06-11 23:12:07 +02009841ssl_c_verify : integer
9842 Returns the verify result error ID when the incoming connection was made over
9843 an SSL/TLS transport layer, otherwise zero if no error is encountered. Please
9844 refer to your SSL library's documentation for an exhaustive list of error
9845 codes.
Emeric Brunce5ad802012-10-22 14:11:22 +02009846
Willy Tarreau74ca5042013-06-11 23:12:07 +02009847ssl_c_version : integer
9848 Returns the version of the certificate presented by the client when the
9849 incoming connection was made over an SSL/TLS transport layer.
Emeric Brunce5ad802012-10-22 14:11:22 +02009850
Willy Tarreau74ca5042013-06-11 23:12:07 +02009851ssl_f_i_dn([<entry>[,<occ>]]) : string
9852 When the incoming connection was made over an SSL/TLS transport layer,
9853 returns the full distinguished name of the issuer of the certificate
9854 presented by the frontend when no <entry> is specified, or the value of the
9855 first given entry found from the beginning of the DN. If a positive/negative
Emeric Brun87855892012-10-17 17:39:35 +02009856 occurrence number is specified as the optional second argument, it returns
Willy Tarreau74ca5042013-06-11 23:12:07 +02009857 the value of the nth given entry value from the beginning/end of the DN.
9858 For instance, "ssl_f_i_dn(OU,2)" the second organization unit, and
9859 "ssl_f_i_dn(CN)" retrieves the common name.
Emeric Brun87855892012-10-17 17:39:35 +02009860
Willy Tarreau74ca5042013-06-11 23:12:07 +02009861 ACL derivatives :
9862 ssl_f_i_dn([<entry>[,<occ>]]) : exact string match
Willy Tarreau8d598402012-10-22 17:58:39 +02009863
Willy Tarreau74ca5042013-06-11 23:12:07 +02009864ssl_f_key_alg : string
9865 Returns the name of the algorithm used to generate the key of the certificate
9866 presented by the frontend when the incoming connection was made over an
9867 SSL/TLS transport layer.
Emeric Brun7f56e742012-10-19 18:15:40 +02009868
Willy Tarreau74ca5042013-06-11 23:12:07 +02009869 ACL derivatives :
9870 ssl_f_key_alg : exact string match
Emeric Brun9143d372012-12-20 15:44:16 +01009871
Willy Tarreau74ca5042013-06-11 23:12:07 +02009872ssl_f_notafter : string
9873 Returns the end date presented by the frontend as a formatted string
9874 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
9875 transport layer.
Emeric Brun2525b6b2012-10-18 15:59:43 +02009876
Willy Tarreau74ca5042013-06-11 23:12:07 +02009877 ACL derivatives :
9878 ssl_f_notafter : exact string match
Emeric Bruna7359fd2012-10-17 15:03:11 +02009879
Willy Tarreau74ca5042013-06-11 23:12:07 +02009880ssl_f_notbefore : string
9881 Returns the start date presented by the frontend as a formatted string
9882 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
9883 transport layer.
Emeric Brun87855892012-10-17 17:39:35 +02009884
Willy Tarreau74ca5042013-06-11 23:12:07 +02009885 ACL derivatives :
9886 ssl_f_notbefore : exact string match
Emeric Brun7f56e742012-10-19 18:15:40 +02009887
Willy Tarreau74ca5042013-06-11 23:12:07 +02009888ssl_f_s_dn([<entry>[,<occ>]]) : string
9889 When the incoming connection was made over an SSL/TLS transport layer,
9890 returns the full distinguished name of the subject of the certificate
9891 presented by the frontend when no <entry> is specified, or the value of the
9892 first given entry found from the beginning of the DN. If a positive/negative
9893 occurrence number is specified as the optional second argument, it returns
9894 the value of the nth given entry value from the beginning/end of the DN.
9895 For instance, "ssl_f_s_dn(OU,2)" the second organization unit, and
9896 "ssl_f_s_dn(CN)" retrieves the common name.
Emeric Brunce5ad802012-10-22 14:11:22 +02009897
Willy Tarreau74ca5042013-06-11 23:12:07 +02009898 ACL derivatives :
9899 ssl_f_s_dn([<entry>[,<occ>]]) : exact string match
Emeric Brunce5ad802012-10-22 14:11:22 +02009900
Willy Tarreau74ca5042013-06-11 23:12:07 +02009901ssl_f_serial : binary
9902 Returns the serial of the certificate presented by the frontend when the
9903 incoming connection was made over an SSL/TLS transport layer. When used for
9904 an ACL, the value(s) to match against can be passed in hexadecimal form.
Emeric Brun87855892012-10-17 17:39:35 +02009905
Willy Tarreau74ca5042013-06-11 23:12:07 +02009906 ACL derivatives :
9907 ssl_f_serial : hex block match
Willy Tarreau8d598402012-10-22 17:58:39 +02009908
Willy Tarreau74ca5042013-06-11 23:12:07 +02009909ssl_f_sig_alg : string
9910 Returns the name of the algorithm used to sign the certificate presented by
9911 the frontend when the incoming connection was made over an SSL/TLS transport
9912 layer.
Emeric Brun7f56e742012-10-19 18:15:40 +02009913
Willy Tarreau74ca5042013-06-11 23:12:07 +02009914 ACL derivatives :
9915 ssl_f_sig_alg : exact string match
Emeric Bruna7359fd2012-10-17 15:03:11 +02009916
Willy Tarreau74ca5042013-06-11 23:12:07 +02009917ssl_f_version : integer
9918 Returns the version of the certificate presented by the frontend when the
9919 incoming connection was made over an SSL/TLS transport layer.
9920
9921ssl_fc : boolean
Emeric Brun2525b6b2012-10-18 15:59:43 +02009922 Returns true when the front connection was made via an SSL/TLS transport
9923 layer and is locally deciphered. This means it has matched a socket declared
9924 with a "bind" line having the "ssl" option.
9925
Willy Tarreau74ca5042013-06-11 23:12:07 +02009926 Example :
9927 # This passes "X-Proto: https" to servers when client connects over SSL
9928 listen http-https
9929 bind :80
9930 bind :443 ssl crt /etc/haproxy.pem
9931 http-request add-header X-Proto https if { ssl_fc }
9932
9933ssl_fc_alg_keysize : integer
9934 Returns the symmetric cipher key size supported in bits when the incoming
9935 connection was made over an SSL/TLS transport layer.
9936
9937ssl_fc_alpn : string
9938 This extracts the Application Layer Protocol Negociation field from an
9939 incoming connection made via a TLS transport layer and locally deciphered by
9940 haproxy. The result is a string containing the protocol name advertised by
9941 the client. The SSL library must have been built with support for TLS
9942 extensions enabled (check haproxy -vv). Note that the TLS ALPN extension is
9943 not advertised unless the "alpn" keyword on the "bind" line specifies a
9944 protocol list. Also, nothing forces the client to pick a protocol from this
9945 list, any other one may be requested. The TLS ALPN extension is meant to
9946 replace the TLS NPN extension. See also "ssl_fc_npn".
9947
9948 ACL derivatives :
9949 ssl_fc_alpn : exact string match
Emeric Brun589fcad2012-10-16 14:13:26 +02009950
Willy Tarreau74ca5042013-06-11 23:12:07 +02009951ssl_fc_cipher : string
9952 Returns the name of the used cipher when the incoming connection was made
9953 over an SSL/TLS transport layer.
Willy Tarreauab861d32013-04-02 02:30:41 +02009954
Willy Tarreau74ca5042013-06-11 23:12:07 +02009955 ACL derivatives :
9956 ssl_fc_cipher : exact string match
Emeric Brun589fcad2012-10-16 14:13:26 +02009957
Willy Tarreau74ca5042013-06-11 23:12:07 +02009958ssl_fc_has_crt : boolean
Emeric Brun2525b6b2012-10-18 15:59:43 +02009959 Returns true if a client certificate is present in an incoming connection over
9960 SSL/TLS transport layer. Useful if 'verify' statement is set to 'optional'.
Emeric Brun9143d372012-12-20 15:44:16 +01009961 Note: on SSL session resumption with Session ID or TLS ticket, client
9962 certificate is not present in the current connection but may be retrieved
9963 from the cache or the ticket. So prefer "ssl_c_used" if you want to check if
9964 current SSL session uses a client certificate.
Emeric Brun2525b6b2012-10-18 15:59:43 +02009965
Willy Tarreau74ca5042013-06-11 23:12:07 +02009966ssl_fc_has_sni : boolean
9967 This checks for the presence of a Server Name Indication TLS extension (SNI)
Willy Tarreauf7bc57c2012-10-03 00:19:48 +02009968 in an incoming connection was made over an SSL/TLS transport layer. Returns
9969 true when the incoming connection presents a TLS SNI field. This requires
9970 that the SSL library is build with support for TLS extensions enabled (check
9971 haproxy -vv).
Willy Tarreau7875d092012-09-10 08:20:03 +02009972
Willy Tarreau74ca5042013-06-11 23:12:07 +02009973ssl_fc_npn : string
9974 This extracts the Next Protocol Negociation field from an incoming connection
9975 made via a TLS transport layer and locally deciphered by haproxy. The result
9976 is a string containing the protocol name advertised by the client. The SSL
9977 library must have been built with support for TLS extensions enabled (check
9978 haproxy -vv). Note that the TLS NPN extension is not advertised unless the
9979 "npn" keyword on the "bind" line specifies a protocol list. Also, nothing
9980 forces the client to pick a protocol from this list, any other one may be
9981 requested. Please note that the TLS NPN extension was replaced with ALPN.
Willy Tarreaua33c6542012-10-15 13:19:06 +02009982
Willy Tarreau74ca5042013-06-11 23:12:07 +02009983 ACL derivatives :
9984 ssl_fc_npn : exact string match
Emeric Brun589fcad2012-10-16 14:13:26 +02009985
Willy Tarreau74ca5042013-06-11 23:12:07 +02009986ssl_fc_protocol : string
9987 Returns the name of the used protocol when the incoming connection was made
9988 over an SSL/TLS transport layer.
Willy Tarreau7875d092012-09-10 08:20:03 +02009989
Willy Tarreau74ca5042013-06-11 23:12:07 +02009990 ACL derivatives :
9991 ssl_fc_protocol : exact string match
9992
9993ssl_fc_session_id : binary
9994 Returns the SSL ID of the front connection when the incoming connection was
9995 made over an SSL/TLS transport layer. It is useful to stick a given client to
9996 a server. It is important to note that some browsers refresh their session ID
9997 every few minutes.
Willy Tarreau7875d092012-09-10 08:20:03 +02009998
Willy Tarreau74ca5042013-06-11 23:12:07 +02009999ssl_fc_sni : string
10000 This extracts the Server Name Indication TLS extension (SNI) field from an
10001 incoming connection made via an SSL/TLS transport layer and locally
10002 deciphered by haproxy. The result (when present) typically is a string
10003 matching the HTTPS host name (253 chars or less). The SSL library must have
10004 been built with support for TLS extensions enabled (check haproxy -vv).
10005
10006 This fetch is different from "req_ssl_sni" above in that it applies to the
10007 connection being deciphered by haproxy and not to SSL contents being blindly
10008 forwarded. See also "ssl_fc_sni_end" and "ssl_fc_sni_reg" below. This
Cyril Bonté9c1eb1e2012-10-09 22:45:34 +020010009 requires that the SSL library is build with support for TLS extensions
10010 enabled (check haproxy -vv).
Willy Tarreau62644772008-07-16 18:36:06 +020010011
Willy Tarreau74ca5042013-06-11 23:12:07 +020010012 ACL derivatives :
10013 ssl_fc_sni : exact string match
10014 ssl_fc_sni_end : suffix match
10015 ssl_fc_sni_reg : regex match
Emeric Brun589fcad2012-10-16 14:13:26 +020010016
Willy Tarreau74ca5042013-06-11 23:12:07 +020010017ssl_fc_use_keysize : integer
10018 Returns the symmetric cipher key size used in bits when the incoming
10019 connection was made over an SSL/TLS transport layer.
Willy Tarreaub6fb4202008-07-20 11:18:28 +020010020
Willy Tarreaub6fb4202008-07-20 11:18:28 +020010021
Willy Tarreau74ca5042013-06-11 23:12:07 +0200100227.3.4. Fetching samples from buffer contents (Layer 6)
10023------------------------------------------------------
Willy Tarreaub6fb4202008-07-20 11:18:28 +020010024
Willy Tarreau74ca5042013-06-11 23:12:07 +020010025Fetching samples from buffer contents is a bit different from the previous
10026sample fetches above because the sampled data are ephemeral. These data can
10027only be used when they're available and will be lost when they're forwarded.
10028For this reason, samples fetched from buffer contents during a request cannot
10029be used in a response for example. Even while the data are being fetched, they
10030can change. Sometimes it is necessary to set some delays or combine multiple
10031sample fetch methods to ensure that the expected data are complete and usable,
10032for example through TCP request content inspection. Please see the "tcp-request
10033content" keyword for more detailed information on the subject.
Willy Tarreau62644772008-07-16 18:36:06 +020010034
Willy Tarreau74ca5042013-06-11 23:12:07 +020010035payload(<offset>,<length>) : binary (deprecated)
10036 This is an alias for "req.payload" when used in the context of a request (eg:
10037 "stick on", "stick match"), and for "res.payload" when used in the context of
10038 a response such as in "stick store response".
Willy Tarreau0ba27502007-12-24 16:55:16 +010010039
Willy Tarreau74ca5042013-06-11 23:12:07 +020010040payload_lv(<offset1>,<length>[,<offset2>]) : binary (deprecated)
10041 This is an alias for "req.payload_lv" when used in the context of a request
10042 (eg: "stick on", "stick match"), and for "res.payload_lv" when used in the
10043 context of a response such as in "stick store response".
Willy Tarreau0ba27502007-12-24 16:55:16 +010010044
Willy Tarreau74ca5042013-06-11 23:12:07 +020010045req.len : integer
10046req_len : integer (deprecated)
10047 Returns an integer value corresponding to the number of bytes present in the
10048 request buffer. This is mostly used in ACL. It is important to understand
10049 that this test does not return false as long as the buffer is changing. This
10050 means that a check with equality to zero will almost always immediately match
10051 at the beginning of the session, while a test for more data will wait for
10052 that data to come in and return false only when haproxy is certain that no
10053 more data will come in. This test was designed to be used with TCP request
10054 content inspection.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020010055
Willy Tarreau74ca5042013-06-11 23:12:07 +020010056req.payload(<offset>,<length>) : binary
10057 This extracts a binary block of <length> bytes and starting at byte <offset>
Willy Tarreau00f00842013-08-02 11:07:32 +020010058 in the request buffer. As a special case, if the <length> argument is zero,
10059 the the whole buffer from <offset> to the end is extracted. This can be used
10060 with ACLs in order to check for the presence of some content in a buffer at
10061 any location.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020010062
Willy Tarreau74ca5042013-06-11 23:12:07 +020010063 ACL alternatives :
10064 payload(<offset>,<length>) : hex binary match
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020010065
Willy Tarreau74ca5042013-06-11 23:12:07 +020010066req.payload_lv(<offset1>,<length>[,<offset2>]) : binary
10067 This extracts a binary block whose size is specified at <offset1> for <length>
10068 bytes, and which starts at <offset2> if specified or just after the length in
10069 the request buffer. The <offset2> parameter also supports relative offsets if
10070 prepended with a '+' or '-' sign.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020010071
Willy Tarreau74ca5042013-06-11 23:12:07 +020010072 ACL alternatives :
10073 payload_lv(<offset1>,<length>[,<offset2>]) : hex binary match
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020010074
Willy Tarreau74ca5042013-06-11 23:12:07 +020010075 Example : please consult the example from the "stick store-response" keyword.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020010076
Willy Tarreau74ca5042013-06-11 23:12:07 +020010077req.proto_http : boolean
10078req_proto_http : boolean (deprecated)
10079 Returns true when data in the request buffer look like HTTP and correctly
10080 parses as such. It is the same parser as the common HTTP request parser which
10081 is used so there should be no surprises. The test does not match until the
10082 request is complete, failed or timed out. This test may be used to report the
10083 protocol in TCP logs, but the biggest use is to block TCP request analysis
10084 until a complete HTTP request is present in the buffer, for example to track
10085 a header.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020010086
Willy Tarreau74ca5042013-06-11 23:12:07 +020010087 Example:
10088 # track request counts per "base" (concatenation of Host+URL)
10089 tcp-request inspect-delay 10s
10090 tcp-request content reject if !HTTP
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020010091 tcp-request content track-sc0 base table req-rate
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020010092
Willy Tarreau74ca5042013-06-11 23:12:07 +020010093req.rdp_cookie([<name>]) : string
10094rdp_cookie([<name>]) : string (deprecated)
10095 When the request buffer looks like the RDP protocol, extracts the RDP cookie
10096 <name>, or any cookie if unspecified. The parser only checks for the first
10097 cookie, as illustrated in the RDP protocol specification. The cookie name is
10098 case insensitive. Generally the "MSTS" cookie name will be used, as it can
10099 contain the user name of the client connecting to the server if properly
10100 configured on the client. The "MSTSHASH" cookie is often used as well for
10101 session stickiness to servers.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020010102
Willy Tarreau74ca5042013-06-11 23:12:07 +020010103 This differs from "balance rdp-cookie" in that any balancing algorithm may be
10104 used and thus the distribution of clients to backend servers is not linked to
10105 a hash of the RDP cookie. It is envisaged that using a balancing algorithm
10106 such as "balance roundrobin" or "balance leastconn" will lead to a more even
10107 distribution of clients to backend servers than the hash used by "balance
10108 rdp-cookie".
Willy Tarreau04aa6a92012-04-06 18:57:55 +020010109
Willy Tarreau74ca5042013-06-11 23:12:07 +020010110 ACL derivatives :
10111 req_rdp_cookie([<name>]) : exact string match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020010112
Willy Tarreau74ca5042013-06-11 23:12:07 +020010113 Example :
10114 listen tse-farm
10115 bind 0.0.0.0:3389
10116 # wait up to 5s for an RDP cookie in the request
10117 tcp-request inspect-delay 5s
10118 tcp-request content accept if RDP_COOKIE
10119 # apply RDP cookie persistence
10120 persist rdp-cookie
10121 # Persist based on the mstshash cookie
10122 # This is only useful makes sense if
10123 # balance rdp-cookie is not used
10124 stick-table type string size 204800
10125 stick on req.rdp_cookie(mstshash)
10126 server srv1 1.1.1.1:3389
10127 server srv1 1.1.1.2:3389
Willy Tarreau04aa6a92012-04-06 18:57:55 +020010128
Willy Tarreau74ca5042013-06-11 23:12:07 +020010129 See also : "balance rdp-cookie", "persist rdp-cookie", "tcp-request" and the
10130 "req_rdp_cookie" ACL.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020010131
Willy Tarreau74ca5042013-06-11 23:12:07 +020010132req.rdp_cookie_cnt([name]) : integer
10133rdp_cookie_cnt([name]) : integer (deprecated)
10134 Tries to parse the request buffer as RDP protocol, then returns an integer
10135 corresponding to the number of RDP cookies found. If an optional cookie name
10136 is passed, only cookies matching this name are considered. This is mostly
10137 used in ACL.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020010138
Willy Tarreau74ca5042013-06-11 23:12:07 +020010139 ACL derivatives :
10140 req_rdp_cookie_cnt([<name>]) : integer match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020010141
Willy Tarreau74ca5042013-06-11 23:12:07 +020010142req.ssl_hello_type : integer
10143req_ssl_hello_type : integer (deprecated)
10144 Returns an integer value containing the type of the SSL hello message found
10145 in the request buffer if the buffer contains data that parse as a complete
10146 SSL (v3 or superior) client hello message. Note that this only applies to raw
10147 contents found in the request buffer and not to contents deciphered via an
10148 SSL data layer, so this will not work with "bind" lines having the "ssl"
10149 option. This is mostly used in ACL to detect presence of an SSL hello message
10150 that is supposed to contain an SSL session ID usable for stickiness.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020010151
Willy Tarreau74ca5042013-06-11 23:12:07 +020010152req.ssl_sni : string
10153req_ssl_sni : string (deprecated)
10154 Returns a string containing the value of the Server Name TLS extension sent
10155 by a client in a TLS stream passing through the request buffer if the buffer
10156 contains data that parse as a complete SSL (v3 or superior) client hello
10157 message. Note that this only applies to raw contents found in the request
10158 buffer and not to contents deciphered via an SSL data layer, so this will not
10159 work with "bind" lines having the "ssl" option. SNI normally contains the
10160 name of the host the client tries to connect to (for recent browsers). SNI is
10161 useful for allowing or denying access to certain hosts when SSL/TLS is used
10162 by the client. This test was designed to be used with TCP request content
10163 inspection. If content switching is needed, it is recommended to first wait
10164 for a complete client hello (type 1), like in the example below. See also
10165 "ssl_fc_sni".
Willy Tarreau04aa6a92012-04-06 18:57:55 +020010166
Willy Tarreau74ca5042013-06-11 23:12:07 +020010167 ACL derivatives :
10168 req_ssl_sni : exact string match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020010169
Willy Tarreau74ca5042013-06-11 23:12:07 +020010170 Examples :
10171 # Wait for a client hello for at most 5 seconds
10172 tcp-request inspect-delay 5s
10173 tcp-request content accept if { req_ssl_hello_type 1 }
10174 use_backend bk_allow if { req_ssl_sni -f allowed_sites }
10175 default_backend bk_sorry_page
Willy Tarreau04aa6a92012-04-06 18:57:55 +020010176
Willy Tarreau74ca5042013-06-11 23:12:07 +020010177res.ssl_hello_type : integer
10178rep_ssl_hello_type : integer (deprecated)
10179 Returns an integer value containing the type of the SSL hello message found
10180 in the response buffer if the buffer contains data that parses as a complete
10181 SSL (v3 or superior) hello message. Note that this only applies to raw
10182 contents found in the response buffer and not to contents deciphered via an
10183 SSL data layer, so this will not work with "server" lines having the "ssl"
10184 option. This is mostly used in ACL to detect presence of an SSL hello message
10185 that is supposed to contain an SSL session ID usable for stickiness.
Willy Tarreau51539362012-05-08 12:46:28 +020010186
Willy Tarreau74ca5042013-06-11 23:12:07 +020010187req.ssl_ver : integer
10188req_ssl_ver : integer (deprecated)
10189 Returns an integer value containing the version of the SSL/TLS protocol of a
10190 stream present in the request buffer. Both SSLv2 hello messages and SSLv3
10191 messages are supported. TLSv1 is announced as SSL version 3.1. The value is
10192 composed of the major version multiplied by 65536, added to the minor
10193 version. Note that this only applies to raw contents found in the request
10194 buffer and not to contents deciphered via an SSL data layer, so this will not
10195 work with "bind" lines having the "ssl" option. The ACL version of the test
10196 matches against a decimal notation in the form MAJOR.MINOR (eg: 3.1). This
10197 fetch is mostly used in ACL.
Willy Tarreaud63335a2010-02-26 12:56:52 +010010198
Willy Tarreau74ca5042013-06-11 23:12:07 +020010199 ACL derivatives :
10200 req_ssl_ver : decimal match
Willy Tarreaud63335a2010-02-26 12:56:52 +010010201
Willy Tarreau47e8eba2013-09-11 23:28:46 +020010202res.len : integer
10203 Returns an integer value corresponding to the number of bytes present in the
10204 response buffer. This is mostly used in ACL. It is important to understand
10205 that this test does not return false as long as the buffer is changing. This
10206 means that a check with equality to zero will almost always immediately match
10207 at the beginning of the session, while a test for more data will wait for
10208 that data to come in and return false only when haproxy is certain that no
10209 more data will come in. This test was designed to be used with TCP response
10210 content inspection.
10211
Willy Tarreau74ca5042013-06-11 23:12:07 +020010212res.payload(<offset>,<length>) : binary
10213 This extracts a binary block of <length> bytes and starting at byte <offset>
Willy Tarreau00f00842013-08-02 11:07:32 +020010214 in the response buffer. As a special case, if the <length> argument is zero,
10215 the the whole buffer from <offset> to the end is extracted. This can be used
10216 with ACLs in order to check for the presence of some content in a buffer at
10217 any location.
Willy Tarreaud63335a2010-02-26 12:56:52 +010010218
Willy Tarreau74ca5042013-06-11 23:12:07 +020010219res.payload_lv(<offset1>,<length>[,<offset2>]) : binary
10220 This extracts a binary block whose size is specified at <offset1> for <length>
10221 bytes, and which starts at <offset2> if specified or just after the length in
10222 the response buffer. The <offset2> parameter also supports relative offsets
10223 if prepended with a '+' or '-' sign.
Willy Tarreaud63335a2010-02-26 12:56:52 +010010224
Willy Tarreau74ca5042013-06-11 23:12:07 +020010225 Example : please consult the example from the "stick store-response" keyword.
Willy Tarreaud63335a2010-02-26 12:56:52 +010010226
Willy Tarreau74ca5042013-06-11 23:12:07 +020010227wait_end : boolean
10228 This fetch either returns true when the inspection period is over, or does
10229 not fetch. It is only used in ACLs, in conjunction with content analysis to
10230 avoid returning a wrong verdict early. It may also be used to delay some
10231 actions, such as a delayed reject for some special addresses. Since it either
10232 stops the rules evaluation or immediately returns true, it is recommended to
10233 use this acl as the last one in a rule. Please note that the default ACL
10234 "WAIT_END" is always usable without prior declaration. This test was designed
10235 to be used with TCP request content inspection.
Willy Tarreaud63335a2010-02-26 12:56:52 +010010236
Willy Tarreau74ca5042013-06-11 23:12:07 +020010237 Examples :
10238 # delay every incoming request by 2 seconds
10239 tcp-request inspect-delay 2s
10240 tcp-request content accept if WAIT_END
Willy Tarreaud63335a2010-02-26 12:56:52 +010010241
Willy Tarreau74ca5042013-06-11 23:12:07 +020010242 # don't immediately tell bad guys they are rejected
10243 tcp-request inspect-delay 10s
10244 acl goodguys src 10.0.0.0/24
10245 acl badguys src 10.0.1.0/24
10246 tcp-request content accept if goodguys
10247 tcp-request content reject if badguys WAIT_END
10248 tcp-request content reject
10249
10250
102517.3.5. Fetching HTTP samples (Layer 7)
10252--------------------------------------
10253
10254It is possible to fetch samples from HTTP contents, requests and responses.
10255This application layer is also called layer 7. It is only possible to fetch the
10256data in this section when a full HTTP request or response has been parsed from
10257its respective request or response buffer. This is always the case with all
10258HTTP specific rules and for sections running with "mode http". When using TCP
10259content inspection, it may be necessary to support an inspection delay in order
10260to let the request or response come in first. These fetches may require a bit
10261more CPU resources than the layer 4 ones, but not much since the request and
10262response are indexed.
10263
10264base : string
10265 This returns the concatenation of the first Host header and the path part of
10266 the request, which starts at the first slash and ends before the question
10267 mark. It can be useful in virtual hosted environments to detect URL abuses as
10268 well as to improve shared caches efficiency. Using this with a limited size
10269 stick table also allows one to collect statistics about most commonly
10270 requested objects by host/path. With ACLs it can allow simple content
10271 switching rules involving the host and the path at the same time, such as
10272 "www.example.com/favicon.ico". See also "path" and "uri".
10273
10274 ACL derivatives :
10275 base : exact string match
10276 base_beg : prefix match
10277 base_dir : subdir match
10278 base_dom : domain match
10279 base_end : suffix match
10280 base_len : length match
10281 base_reg : regex match
10282 base_sub : substring match
10283
10284base32 : integer
10285 This returns a 32-bit hash of the value returned by the "base" fetch method
10286 above. This is useful to track per-URL activity on high traffic sites without
10287 having to store all URLs. Instead a shorter hash is stored, saving a lot of
10288 memory. The output type is an unsigned integer.
10289
10290base32+src : binary
10291 This returns the concatenation of the base32 fetch above and the src fetch
10292 below. The resulting type is of type binary, with a size of 8 or 20 bytes
10293 depending on the source address family. This can be used to track per-IP,
10294 per-URL counters.
10295
10296req.cook([<name>]) : string
10297cook([<name>]) : string (deprecated)
10298 This extracts the last occurrence of the cookie name <name> on a "Cookie"
10299 header line from the request, and returns its value as string. If no name is
10300 specified, the first cookie value is returned. When used with ACLs, all
10301 matching cookies are evaluated. Spaces around the name and the value are
10302 ignored as requested by the Cookie header specification (RFC6265). The cookie
10303 name is case-sensitive. Empty cookies are valid, so an empty cookie may very
10304 well return an empty value if it is present. Use the "found" match to detect
10305 presence. Use the res.cook() variant for response cookies sent by the server.
10306
10307 ACL derivatives :
10308 cook([<name>]) : exact string match
10309 cook_beg([<name>]) : prefix match
10310 cook_dir([<name>]) : subdir match
10311 cook_dom([<name>]) : domain match
10312 cook_end([<name>]) : suffix match
10313 cook_len([<name>]) : length match
10314 cook_reg([<name>]) : regex match
10315 cook_sub([<name>]) : substring match
Willy Tarreaud63335a2010-02-26 12:56:52 +010010316
Willy Tarreau74ca5042013-06-11 23:12:07 +020010317req.cook_cnt([<name>]) : integer
10318cook_cnt([<name>]) : integer (deprecated)
10319 Returns an integer value representing the number of occurrences of the cookie
10320 <name> in the request, or all cookies if <name> is not specified.
Willy Tarreaud63335a2010-02-26 12:56:52 +010010321
Willy Tarreau74ca5042013-06-11 23:12:07 +020010322req.cook_val([<name>]) : integer
10323cook_val([<name>]) : integer (deprecated)
10324 This extracts the last occurrence of the cookie name <name> on a "Cookie"
10325 header line from the request, and converts its value to an integer which is
10326 returned. If no name is specified, the first cookie value is returned. When
10327 used in ACLs, all matching names are iterated over until a value matches.
Willy Tarreau0e698542011-09-16 08:32:32 +020010328
Willy Tarreau74ca5042013-06-11 23:12:07 +020010329cookie([<name>]) : string (deprecated)
10330 This extracts the last occurrence of the cookie name <name> on a "Cookie"
10331 header line from the request, or a "Set-Cookie" header from the response, and
10332 returns its value as a string. A typical use is to get multiple clients
10333 sharing a same profile use the same server. This can be similar to what
10334 "appsession" does with the "request-learn" statement, but with support for
10335 multi-peer synchronization and state keeping across restarts. If no name is
10336 specified, the first cookie value is returned. This fetch should not be used
10337 anymore and should be replaced by req.cook() or res.cook() instead as it
10338 ambiguously uses the direction based on the context where it is used.
10339 See also : "appsession".
Willy Tarreaud63335a2010-02-26 12:56:52 +010010340
Willy Tarreau74ca5042013-06-11 23:12:07 +020010341hdr([<name>[,<occ>]]) : string
10342 This is equivalent to req.hdr() when used on requests, and to res.hdr() when
10343 used on responses. Please refer to these respective fetches for more details.
10344 In case of doubt about the fetch direction, please use the explicit ones.
10345 Note that contrary to the hdr() sample fetch method, the hdr_* ACL keywords
10346 unambiguouslly apply to the request headers.
Willy Tarreaud63335a2010-02-26 12:56:52 +010010347
Willy Tarreau74ca5042013-06-11 23:12:07 +020010348req.fhdr(<name>[,<occ>]) : string
10349 This extracts the last occurrence of header <name> in an HTTP request. When
10350 used from an ACL, all occurrences are iterated over until a match is found.
10351 Optionally, a specific occurrence might be specified as a position number.
10352 Positive values indicate a position from the first occurrence, with 1 being
10353 the first one. Negative values indicate positions relative to the last one,
10354 with -1 being the last one. It differs from req.hdr() in that any commas
10355 present in the value are returned and are not used as delimiters. This is
10356 sometimes useful with headers such as User-Agent.
Willy Tarreaud63335a2010-02-26 12:56:52 +010010357
Willy Tarreau74ca5042013-06-11 23:12:07 +020010358req.fhdr_cnt([<name>]) : integer
10359 Returns an integer value representing the number of occurrences of request
10360 header field name <name>, or the total number of header fields if <name> is
10361 not specified. Contrary to its req.hdr_cnt() cousin, this function returns
10362 the number of full line headers and does not stop on commas.
Willy Tarreaud63335a2010-02-26 12:56:52 +010010363
Willy Tarreau74ca5042013-06-11 23:12:07 +020010364req.hdr([<name>[,<occ>]]) : string
10365 This extracts the last occurrence of header <name> in an HTTP request. When
10366 used from an ACL, all occurrences are iterated over until a match is found.
10367 Optionally, a specific occurrence might be specified as a position number.
10368 Positive values indicate a position from the first occurrence, with 1 being
10369 the first one. Negative values indicate positions relative to the last one,
10370 with -1 being the last one. A typical use is with the X-Forwarded-For header
10371 once converted to IP, associated with an IP stick-table. The function
10372 considers any comma as a delimiter for distinct values. If full-line headers
10373 are desired instead, use req.fhdr(). Please carefully check RFC2616 to know
10374 how certain headers are supposed to be parsed. Also, some of them are case
10375 insensitive (eg: Connection).
Willy Tarreaud63335a2010-02-26 12:56:52 +010010376
Willy Tarreau74ca5042013-06-11 23:12:07 +020010377 ACL derivatives :
10378 hdr([<name>[,<occ>]]) : exact string match
10379 hdr_beg([<name>[,<occ>]]) : prefix match
10380 hdr_dir([<name>[,<occ>]]) : subdir match
10381 hdr_dom([<name>[,<occ>]]) : domain match
10382 hdr_end([<name>[,<occ>]]) : suffix match
10383 hdr_len([<name>[,<occ>]]) : length match
10384 hdr_reg([<name>[,<occ>]]) : regex match
10385 hdr_sub([<name>[,<occ>]]) : substring match
10386
10387req.hdr_cnt([<name>]) : integer
10388hdr_cnt([<header>]) : integer (deprecated)
10389 Returns an integer value representing the number of occurrences of request
10390 header field name <name>, or the total number of header field values if
10391 <name> is not specified. It is important to remember that one header line may
10392 count as several headers if it has several values. The function considers any
10393 comma as a delimiter for distinct values. If full-line headers are desired
10394 instead, req.fhdr_cnt() should be used instead. With ACLs, it can be used to
10395 detect presence, absence or abuse of a specific header, as well as to block
10396 request smuggling attacks by rejecting requests which contain more than one
10397 of certain headers. See "req.hdr" for more information on header matching.
10398
10399req.hdr_ip([<name>[,<occ>]]) : ip
10400hdr_ip([<name>[,<occ>]]) : ip (deprecated)
10401 This extracts the last occurrence of header <name> in an HTTP request,
10402 converts it to an IPv4 or IPv6 address and returns this address. When used
10403 with ACLs, all occurrences are checked, and if <name> is omitted, every value
10404 of every header is checked. Optionally, a specific occurrence might be
10405 specified as a position number. Positive values indicate a position from the
10406 first occurrence, with 1 being the first one. Negative values indicate
10407 positions relative to the last one, with -1 being the last one. A typical use
10408 is with the X-Forwarded-For and X-Client-IP headers.
10409
10410req.hdr_val([<name>[,<occ>]]) : integer
10411hdr_val([<name>[,<occ>]]) : integer (deprecated)
10412 This extracts the last occurrence of header <name> in an HTTP request, and
10413 converts it to an integer value. When used with ACLs, all occurrences are
10414 checked, and if <name> is omitted, every value of every header is checked.
10415 Optionally, a specific occurrence might be specified as a position number.
10416 Positive values indicate a position from the first occurrence, with 1 being
10417 the first one. Negative values indicate positions relative to the last one,
10418 with -1 being the last one. A typical use is with the X-Forwarded-For header.
10419
10420http_auth(<userlist>) : boolean
10421 Returns a boolean indicating whether the authentication data received from
10422 the client match a username & password stored in the specified userlist. This
10423 fetch function is not really useful outside of ACLs. Currently only http
10424 basic auth is supported.
10425
10426http_auth_group(<userlist>) : group
10427 Returns a boolean indicating whether the authentication data received from
10428 the client match a username & password stored in the specified userlist, and
10429 whether that username belongs to one of the groups supplied in ACL patterns.
10430 This fetch function is not really useful outside of ACLs. Currently only http
10431 basic auth is supported.
10432
10433 ACL derivatives :
10434 http_auth_group(<userlist>) : user group match
10435
10436http_first_req : boolean
Willy Tarreau7f18e522010-10-22 20:04:13 +020010437 Returns true when the request being processed is the first one of the
10438 connection. This can be used to add or remove headers that may be missing
Willy Tarreau74ca5042013-06-11 23:12:07 +020010439 from some requests when a request is not the first one, or to help grouping
10440 requests in the logs.
Willy Tarreau7f18e522010-10-22 20:04:13 +020010441
Willy Tarreau74ca5042013-06-11 23:12:07 +020010442method : integer + string
10443 Returns an integer value corresponding to the method in the HTTP request. For
10444 example, "GET" equals 1 (check sources to establish the matching). Value 9
10445 means "other method" and may be converted to a string extracted from the
10446 stream. This should not be used directly as a sample, this is only meant to
10447 be used from ACLs, which transparently convert methods from patterns to these
10448 integer + string values. Some predefined ACL already check for most common
10449 methods.
Willy Tarreau6a06a402007-07-15 20:15:28 +020010450
Willy Tarreau74ca5042013-06-11 23:12:07 +020010451 ACL derivatives :
10452 method : case insensitive method match
Willy Tarreau6a06a402007-07-15 20:15:28 +020010453
Willy Tarreau74ca5042013-06-11 23:12:07 +020010454 Example :
10455 # only accept GET and HEAD requests
10456 acl valid_method method GET HEAD
10457 http-request deny if ! valid_method
Willy Tarreau6a06a402007-07-15 20:15:28 +020010458
Willy Tarreau74ca5042013-06-11 23:12:07 +020010459path : string
10460 This extracts the request's URL path, which starts at the first slash and
10461 ends before the question mark (without the host part). A typical use is with
10462 prefetch-capable caches, and with portals which need to aggregate multiple
10463 information from databases and keep them in caches. Note that with outgoing
10464 caches, it would be wiser to use "url" instead. With ACLs, it's typically
10465 used to match exact file names (eg: "/login.php"), or directory parts using
10466 the derivative forms. See also the "url" and "base" fetch methods.
Willy Tarreau6a06a402007-07-15 20:15:28 +020010467
Willy Tarreau74ca5042013-06-11 23:12:07 +020010468 ACL derivatives :
10469 path : exact string match
10470 path_beg : prefix match
10471 path_dir : subdir match
10472 path_dom : domain match
10473 path_end : suffix match
10474 path_len : length match
10475 path_reg : regex match
10476 path_sub : substring match
Willy Tarreau6a06a402007-07-15 20:15:28 +020010477
Willy Tarreau74ca5042013-06-11 23:12:07 +020010478req.ver : string
10479req_ver : string (deprecated)
10480 Returns the version string from the HTTP request, for example "1.1". This can
10481 be useful for logs, but is mostly there for ACL. Some predefined ACL already
10482 check for versions 1.0 and 1.1.
Willy Tarreaud63335a2010-02-26 12:56:52 +010010483
Willy Tarreau74ca5042013-06-11 23:12:07 +020010484 ACL derivatives :
10485 req_ver : exact string match
Willy Tarreau0e698542011-09-16 08:32:32 +020010486
Willy Tarreau74ca5042013-06-11 23:12:07 +020010487res.comp : boolean
10488 Returns the boolean "true" value if the response has been compressed by
10489 HAProxy, otherwise returns boolean "false". This may be used to add
10490 information in the logs.
Willy Tarreau6a06a402007-07-15 20:15:28 +020010491
Willy Tarreau74ca5042013-06-11 23:12:07 +020010492res.comp_algo : string
10493 Returns a string containing the name of the algorithm used if the response
10494 was compressed by HAProxy, for example : "deflate". This may be used to add
10495 some information in the logs.
Willy Tarreaud63335a2010-02-26 12:56:52 +010010496
Willy Tarreau74ca5042013-06-11 23:12:07 +020010497res.cook([<name>]) : string
10498scook([<name>]) : string (deprecated)
10499 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
10500 header line from the response, and returns its value as string. If no name is
10501 specified, the first cookie value is returned.
Willy Tarreau0ce3aa02012-04-25 18:46:33 +020010502
Willy Tarreau74ca5042013-06-11 23:12:07 +020010503 ACL derivatives :
10504 scook([<name>] : exact string match
Willy Tarreau0ce3aa02012-04-25 18:46:33 +020010505
Willy Tarreau74ca5042013-06-11 23:12:07 +020010506res.cook_cnt([<name>]) : integer
10507scook_cnt([<name>]) : integer (deprecated)
10508 Returns an integer value representing the number of occurrences of the cookie
10509 <name> in the response, or all cookies if <name> is not specified. This is
10510 mostly useful when combined with ACLs to detect suspicious responses.
Willy Tarreaud63335a2010-02-26 12:56:52 +010010511
Willy Tarreau74ca5042013-06-11 23:12:07 +020010512res.cook_val([<name>]) : integer
10513scook_val([<name>]) : integer (deprecated)
10514 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
10515 header line from the response, and converts its value to an integer which is
10516 returned. If no name is specified, the first cookie value is returned.
Willy Tarreaud63335a2010-02-26 12:56:52 +010010517
Willy Tarreau74ca5042013-06-11 23:12:07 +020010518res.fhdr([<name>[,<occ>]]) : string
10519 This extracts the last occurrence of header <name> in an HTTP response, or of
10520 the last header if no <name> is specified. Optionally, a specific occurrence
10521 might be specified as a position number. Positive values indicate a position
10522 from the first occurrence, with 1 being the first one. Negative values
10523 indicate positions relative to the last one, with -1 being the last one. It
10524 differs from res.hdr() in that any commas present in the value are returned
10525 and are not used as delimiters. If this is not desired, the res.hdr() fetch
10526 should be used instead. This is sometimes useful with headers such as Date or
10527 Expires.
Willy Tarreau6a06a402007-07-15 20:15:28 +020010528
Willy Tarreau74ca5042013-06-11 23:12:07 +020010529res.fhdr_cnt([<name>]) : integer
10530 Returns an integer value representing the number of occurrences of response
10531 header field name <name>, or the total number of header fields if <name> is
10532 not specified. Contrary to its res.hdr_cnt() cousin, this function returns
10533 the number of full line headers and does not stop on commas. If this is not
10534 desired, the res.hdr_cnt() fetch should be used instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020010535
Willy Tarreau74ca5042013-06-11 23:12:07 +020010536res.hdr([<name>[,<occ>]]) : string
10537shdr([<name>[,<occ>]]) : string (deprecated)
10538 This extracts the last occurrence of header <name> in an HTTP response, or of
10539 the last header if no <name> is specified. Optionally, a specific occurrence
10540 might be specified as a position number. Positive values indicate a position
10541 from the first occurrence, with 1 being the first one. Negative values
10542 indicate positions relative to the last one, with -1 being the last one. This
10543 can be useful to learn some data into a stick-table. The function considers
10544 any comma as a delimiter for distinct values. If this is not desired, the
10545 res.fhdr() fetch should be used instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020010546
Willy Tarreau74ca5042013-06-11 23:12:07 +020010547 ACL derivatives :
10548 shdr([<name>[,<occ>]]) : exact string match
10549 shdr_beg([<name>[,<occ>]]) : prefix match
10550 shdr_dir([<name>[,<occ>]]) : subdir match
10551 shdr_dom([<name>[,<occ>]]) : domain match
10552 shdr_end([<name>[,<occ>]]) : suffix match
10553 shdr_len([<name>[,<occ>]]) : length match
10554 shdr_reg([<name>[,<occ>]]) : regex match
10555 shdr_sub([<name>[,<occ>]]) : substring match
10556
10557res.hdr_cnt([<name>]) : integer
10558shdr_cnt([<name>]) : integer (deprecated)
10559 Returns an integer value representing the number of occurrences of response
10560 header field name <name>, or the total number of header fields if <name> is
10561 not specified. The function considers any comma as a delimiter for distinct
10562 values. If this is not desired, the res.fhdr_cnt() fetch should be used
10563 instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020010564
Willy Tarreau74ca5042013-06-11 23:12:07 +020010565res.hdr_ip([<name>[,<occ>]]) : ip
10566shdr_ip([<name>[,<occ>]]) : ip (deprecated)
10567 This extracts the last occurrence of header <name> in an HTTP response,
10568 convert it to an IPv4 or IPv6 address and returns this address. Optionally, a
10569 specific occurrence might be specified as a position number. Positive values
10570 indicate a position from the first occurrence, with 1 being the first one.
10571 Negative values indicate positions relative to the last one, with -1 being
10572 the last one. This can be useful to learn some data into a stick table.
Willy Tarreau6a06a402007-07-15 20:15:28 +020010573
Willy Tarreau74ca5042013-06-11 23:12:07 +020010574res.hdr_val([<name>[,<occ>]]) : integer
10575shdr_val([<name>[,<occ>]]) : integer (deprecated)
10576 This extracts the last occurrence of header <name> in an HTTP response, and
10577 converts it to an integer value. Optionally, a specific occurrence might be
10578 specified as a position number. Positive values indicate a position from the
10579 first occurrence, with 1 being the first one. Negative values indicate
10580 positions relative to the last one, with -1 being the last one. This can be
10581 useful to learn some data into a stick table.
Alexandre Cassen5eb1a902007-11-29 15:43:32 +010010582
Willy Tarreau74ca5042013-06-11 23:12:07 +020010583res.ver : string
10584resp_ver : string (deprecated)
10585 Returns the version string from the HTTP response, for example "1.1". This
10586 can be useful for logs, but is mostly there for ACL.
Willy Tarreau0e698542011-09-16 08:32:32 +020010587
Willy Tarreau74ca5042013-06-11 23:12:07 +020010588 ACL derivatives :
10589 resp_ver : exact string match
Alexandre Cassen5eb1a902007-11-29 15:43:32 +010010590
Willy Tarreau74ca5042013-06-11 23:12:07 +020010591set-cookie([<name>]) : string (deprecated)
10592 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
10593 header line from the response and uses the corresponding value to match. This
10594 can be comparable to what "appsession" does with default options, but with
10595 support for multi-peer synchronization and state keeping across restarts.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010010596
Willy Tarreau74ca5042013-06-11 23:12:07 +020010597 This fetch function is deprecated and has been superseded by the "res.cook"
10598 fetch. This keyword will disappear soon.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010010599
Willy Tarreau74ca5042013-06-11 23:12:07 +020010600 See also : "appsession"
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020010601
Willy Tarreau74ca5042013-06-11 23:12:07 +020010602status : integer
10603 Returns an integer containing the HTTP status code in the HTTP response, for
10604 example, 302. It is mostly used within ACLs and integer ranges, for example,
10605 to remove any Location header if the response is not a 3xx.
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020010606
Willy Tarreau74ca5042013-06-11 23:12:07 +020010607url : string
10608 This extracts the request's URL as presented in the request. A typical use is
10609 with prefetch-capable caches, and with portals which need to aggregate
10610 multiple information from databases and keep them in caches. With ACLs, using
10611 "path" is preferred over using "url", because clients may send a full URL as
10612 is normally done with proxies. The only real use is to match "*" which does
10613 not match in "path", and for which there is already a predefined ACL. See
10614 also "path" and "base".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020010615
Willy Tarreau74ca5042013-06-11 23:12:07 +020010616 ACL derivatives :
10617 url : exact string match
10618 url_beg : prefix match
10619 url_dir : subdir match
10620 url_dom : domain match
10621 url_end : suffix match
10622 url_len : length match
10623 url_reg : regex match
10624 url_sub : substring match
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020010625
Willy Tarreau74ca5042013-06-11 23:12:07 +020010626url_ip : ip
10627 This extracts the IP address from the request's URL when the host part is
10628 presented as an IP address. Its use is very limited. For instance, a
10629 monitoring system might use this field as an alternative for the source IP in
10630 order to test what path a given source address would follow, or to force an
10631 entry in a table for a given source address. With ACLs it can be used to
10632 restrict access to certain systems through a proxy, for example when combined
10633 with option "http_proxy".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020010634
Willy Tarreau74ca5042013-06-11 23:12:07 +020010635url_port : integer
10636 This extracts the port part from the request's URL. Note that if the port is
10637 not specified in the request, port 80 is assumed. With ACLs it can be used to
10638 restrict access to certain systems through a proxy, for example when combined
10639 with option "http_proxy".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020010640
Willy Tarreau74ca5042013-06-11 23:12:07 +020010641urlp(<name>[,<delim>]) : string
10642url_param(<name>[,<delim>]) : string
10643 This extracts the first occurrence of the parameter <name> in the query
10644 string, which begins after either '?' or <delim>, and which ends before '&',
10645 ';' or <delim>. The parameter name is case-sensitive. The result is a string
10646 corresponding to the value of the parameter <name> as presented in the
10647 request (no URL decoding is performed). This can be used for session
10648 stickiness based on a client ID, to extract an application cookie passed as a
10649 URL parameter, or in ACLs to apply some checks. Note that the ACL version of
10650 this fetch do not iterate over multiple parameters and stop at the first one
10651 as well.
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020010652
Willy Tarreau74ca5042013-06-11 23:12:07 +020010653 ACL derivatives :
10654 urlp(<name>[,<delim>]) : exact string match
10655 urlp_beg(<name>[,<delim>]) : prefix match
10656 urlp_dir(<name>[,<delim>]) : subdir match
10657 urlp_dom(<name>[,<delim>]) : domain match
10658 urlp_end(<name>[,<delim>]) : suffix match
10659 urlp_len(<name>[,<delim>]) : length match
10660 urlp_reg(<name>[,<delim>]) : regex match
10661 urlp_sub(<name>[,<delim>]) : substring match
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020010662
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020010663
Willy Tarreau74ca5042013-06-11 23:12:07 +020010664 Example :
10665 # match http://example.com/foo?PHPSESSIONID=some_id
10666 stick on urlp(PHPSESSIONID)
10667 # match http://example.com/foo;JSESSIONID=some_id
10668 stick on urlp(JSESSIONID,;)
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020010669
Willy Tarreau74ca5042013-06-11 23:12:07 +020010670urlp_val(<name>[,<delim>]) : integer
10671 See "urlp" above. This one extracts the URL parameter <name> in the request
10672 and converts it to an integer value. This can be used for session stickiness
10673 based on a user ID for example, or with ACLs to match a page number or price.
Willy Tarreaua9fddca2012-07-31 07:51:48 +020010674
Willy Tarreau198a7442008-01-17 12:05:32 +010010675
Willy Tarreau74ca5042013-06-11 23:12:07 +0200106767.4. Pre-defined ACLs
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010677---------------------
Willy Tarreauced27012008-01-17 20:35:34 +010010678
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010679Some predefined ACLs are hard-coded so that they do not have to be declared in
10680every frontend which needs them. They all have their names in upper case in
Patrick Mézard2382ad62010-05-09 10:43:32 +020010681order to avoid confusion. Their equivalence is provided below.
Willy Tarreauced27012008-01-17 20:35:34 +010010682
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010683ACL name Equivalent to Usage
10684---------------+-----------------------------+---------------------------------
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010685FALSE always_false never match
Willy Tarreau2492d5b2009-07-11 00:06:00 +020010686HTTP req_proto_http match if protocol is valid HTTP
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010687HTTP_1.0 req_ver 1.0 match HTTP version 1.0
10688HTTP_1.1 req_ver 1.1 match HTTP version 1.1
Willy Tarreaud63335a2010-02-26 12:56:52 +010010689HTTP_CONTENT hdr_val(content-length) gt 0 match an existing content-length
10690HTTP_URL_ABS url_reg ^[^/:]*:// match absolute URL with scheme
10691HTTP_URL_SLASH url_beg / match URL beginning with "/"
10692HTTP_URL_STAR url * match URL equal to "*"
10693LOCALHOST src 127.0.0.1/8 match connection from local host
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010694METH_CONNECT method CONNECT match HTTP CONNECT method
10695METH_GET method GET HEAD match HTTP GET or HEAD method
10696METH_HEAD method HEAD match HTTP HEAD method
10697METH_OPTIONS method OPTIONS match HTTP OPTIONS method
10698METH_POST method POST match HTTP POST method
10699METH_TRACE method TRACE match HTTP TRACE method
Emeric Brunbede3d02009-06-30 17:54:00 +020010700RDP_COOKIE req_rdp_cookie_cnt gt 0 match presence of an RDP cookie
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010701REQ_CONTENT req_len gt 0 match data in the request buffer
Willy Tarreaud63335a2010-02-26 12:56:52 +010010702TRUE always_true always match
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010703WAIT_END wait_end wait for end of content analysis
10704---------------+-----------------------------+---------------------------------
Willy Tarreauced27012008-01-17 20:35:34 +010010705
Willy Tarreaub937b7e2010-01-12 15:27:54 +010010706
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200107078. Logging
10708----------
Willy Tarreau844e3c52008-01-11 16:28:18 +010010709
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010710One of HAProxy's strong points certainly lies is its precise logs. It probably
10711provides the finest level of information available for such a product, which is
10712very important for troubleshooting complex environments. Standard information
10713provided in logs include client ports, TCP/HTTP state timers, precise session
10714state at termination and precise termination cause, information about decisions
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010010715to direct traffic to a server, and of course the ability to capture arbitrary
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010716headers.
10717
10718In order to improve administrators reactivity, it offers a great transparency
10719about encountered problems, both internal and external, and it is possible to
10720send logs to different sources at the same time with different level filters :
10721
10722 - global process-level logs (system errors, start/stop, etc..)
10723 - per-instance system and internal errors (lack of resource, bugs, ...)
10724 - per-instance external troubles (servers up/down, max connections)
10725 - per-instance activity (client connections), either at the establishment or
10726 at the termination.
10727
10728The ability to distribute different levels of logs to different log servers
10729allow several production teams to interact and to fix their problems as soon
10730as possible. For example, the system team might monitor system-wide errors,
10731while the application team might be monitoring the up/down for their servers in
10732real time, and the security team might analyze the activity logs with one hour
10733delay.
10734
10735
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200107368.1. Log levels
10737---------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010738
Simon Hormandf791f52011-05-29 15:01:10 +090010739TCP and HTTP connections can be logged with information such as the date, time,
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010740source IP address, destination address, connection duration, response times,
Simon Hormandf791f52011-05-29 15:01:10 +090010741HTTP request, HTTP return code, number of bytes transmitted, conditions
10742in which the session ended, and even exchanged cookies values. For example
10743track a particular user's problems. All messages may be sent to up to two
10744syslog servers. Check the "log" keyword in section 4.2 for more information
10745about log facilities.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010746
10747
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200107488.2. Log formats
10749----------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010750
William Lallemand48940402012-01-30 16:47:22 +010010751HAProxy supports 5 log formats. Several fields are common between these formats
Simon Hormandf791f52011-05-29 15:01:10 +090010752and will be detailed in the following sections. A few of them may vary
10753slightly with the configuration, due to indicators specific to certain
10754options. The supported formats are as follows :
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010755
10756 - the default format, which is very basic and very rarely used. It only
10757 provides very basic information about the incoming connection at the moment
10758 it is accepted : source IP:port, destination IP:port, and frontend-name.
10759 This mode will eventually disappear so it will not be described to great
10760 extents.
10761
10762 - the TCP format, which is more advanced. This format is enabled when "option
10763 tcplog" is set on the frontend. HAProxy will then usually wait for the
10764 connection to terminate before logging. This format provides much richer
10765 information, such as timers, connection counts, queue size, etc... This
10766 format is recommended for pure TCP proxies.
10767
10768 - the HTTP format, which is the most advanced for HTTP proxying. This format
10769 is enabled when "option httplog" is set on the frontend. It provides the
10770 same information as the TCP format with some HTTP-specific fields such as
10771 the request, the status code, and captures of headers and cookies. This
10772 format is recommended for HTTP proxies.
10773
Emeric Brun3a058f32009-06-30 18:26:00 +020010774 - the CLF HTTP format, which is equivalent to the HTTP format, but with the
10775 fields arranged in the same order as the CLF format. In this mode, all
10776 timers, captures, flags, etc... appear one per field after the end of the
10777 common fields, in the same order they appear in the standard HTTP format.
10778
William Lallemand48940402012-01-30 16:47:22 +010010779 - the custom log format, allows you to make your own log line.
10780
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010781Next sections will go deeper into details for each of these formats. Format
10782specification will be performed on a "field" basis. Unless stated otherwise, a
10783field is a portion of text delimited by any number of spaces. Since syslog
10784servers are susceptible of inserting fields at the beginning of a line, it is
10785always assumed that the first field is the one containing the process name and
10786identifier.
10787
10788Note : Since log lines may be quite long, the log examples in sections below
10789 might be broken into multiple lines. The example log lines will be
10790 prefixed with 3 closing angle brackets ('>>>') and each time a log is
10791 broken into multiple lines, each non-final line will end with a
10792 backslash ('\') and the next line will start indented by two characters.
10793
10794
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200107958.2.1. Default log format
10796-------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010797
10798This format is used when no specific option is set. The log is emitted as soon
10799as the connection is accepted. One should note that this currently is the only
10800format which logs the request's destination IP and ports.
10801
10802 Example :
10803 listen www
10804 mode http
10805 log global
10806 server srv1 127.0.0.1:8000
10807
10808 >>> Feb 6 12:12:09 localhost \
10809 haproxy[14385]: Connect from 10.0.1.2:33312 to 10.0.3.31:8012 \
10810 (www/HTTP)
10811
10812 Field Format Extract from the example above
10813 1 process_name '[' pid ']:' haproxy[14385]:
10814 2 'Connect from' Connect from
10815 3 source_ip ':' source_port 10.0.1.2:33312
10816 4 'to' to
10817 5 destination_ip ':' destination_port 10.0.3.31:8012
10818 6 '(' frontend_name '/' mode ')' (www/HTTP)
10819
10820Detailed fields description :
10821 - "source_ip" is the IP address of the client which initiated the connection.
10822 - "source_port" is the TCP port of the client which initiated the connection.
10823 - "destination_ip" is the IP address the client connected to.
10824 - "destination_port" is the TCP port the client connected to.
10825 - "frontend_name" is the name of the frontend (or listener) which received
10826 and processed the connection.
10827 - "mode is the mode the frontend is operating (TCP or HTTP).
10828
Willy Tarreauceb24bc2010-11-09 12:46:41 +010010829In case of a UNIX socket, the source and destination addresses are marked as
10830"unix:" and the ports reflect the internal ID of the socket which accepted the
10831connection (the same ID as reported in the stats).
10832
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010833It is advised not to use this deprecated format for newer installations as it
10834will eventually disappear.
10835
10836
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200108378.2.2. TCP log format
10838---------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010839
10840The TCP format is used when "option tcplog" is specified in the frontend, and
10841is the recommended format for pure TCP proxies. It provides a lot of precious
10842information for troubleshooting. Since this format includes timers and byte
10843counts, the log is normally emitted at the end of the session. It can be
10844emitted earlier if "option logasap" is specified, which makes sense in most
10845environments with long sessions such as remote terminals. Sessions which match
10846the "monitor" rules are never logged. It is also possible not to emit logs for
10847sessions for which no data were exchanged between the client and the server, by
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020010848specifying "option dontlognull" in the frontend. Successful connections will
10849not be logged if "option dontlog-normal" is specified in the frontend. A few
10850fields may slightly vary depending on some configuration options, those are
10851marked with a star ('*') after the field name below.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010852
10853 Example :
10854 frontend fnt
10855 mode tcp
10856 option tcplog
10857 log global
10858 default_backend bck
10859
10860 backend bck
10861 server srv1 127.0.0.1:8000
10862
10863 >>> Feb 6 12:12:56 localhost \
10864 haproxy[14387]: 10.0.1.2:33313 [06/Feb/2009:12:12:51.443] fnt \
10865 bck/srv1 0/0/5007 212 -- 0/0/0/0/3 0/0
10866
10867 Field Format Extract from the example above
10868 1 process_name '[' pid ']:' haproxy[14387]:
10869 2 client_ip ':' client_port 10.0.1.2:33313
10870 3 '[' accept_date ']' [06/Feb/2009:12:12:51.443]
10871 4 frontend_name fnt
10872 5 backend_name '/' server_name bck/srv1
10873 6 Tw '/' Tc '/' Tt* 0/0/5007
10874 7 bytes_read* 212
10875 8 termination_state --
10876 9 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 0/0/0/0/3
10877 10 srv_queue '/' backend_queue 0/0
10878
10879Detailed fields description :
10880 - "client_ip" is the IP address of the client which initiated the TCP
Willy Tarreauceb24bc2010-11-09 12:46:41 +010010881 connection to haproxy. If the connection was accepted on a UNIX socket
10882 instead, the IP address would be replaced with the word "unix". Note that
10883 when the connection is accepted on a socket configured with "accept-proxy"
10884 and the PROXY protocol is correctly used, then the logs will reflect the
10885 forwarded connection's information.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010886
10887 - "client_port" is the TCP port of the client which initiated the connection.
Willy Tarreauceb24bc2010-11-09 12:46:41 +010010888 If the connection was accepted on a UNIX socket instead, the port would be
10889 replaced with the ID of the accepting socket, which is also reported in the
10890 stats interface.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010891
10892 - "accept_date" is the exact date when the connection was received by haproxy
10893 (which might be very slightly different from the date observed on the
10894 network if there was some queuing in the system's backlog). This is usually
10895 the same date which may appear in any upstream firewall's log.
10896
10897 - "frontend_name" is the name of the frontend (or listener) which received
10898 and processed the connection.
10899
10900 - "backend_name" is the name of the backend (or listener) which was selected
10901 to manage the connection to the server. This will be the same as the
10902 frontend if no switching rule has been applied, which is common for TCP
10903 applications.
10904
10905 - "server_name" is the name of the last server to which the connection was
10906 sent, which might differ from the first one if there were connection errors
10907 and a redispatch occurred. Note that this server belongs to the backend
10908 which processed the request. If the connection was aborted before reaching
10909 a server, "<NOSRV>" is indicated instead of a server name.
10910
10911 - "Tw" is the total time in milliseconds spent waiting in the various queues.
10912 It can be "-1" if the connection was aborted before reaching the queue.
10913 See "Timers" below for more details.
10914
10915 - "Tc" is the total time in milliseconds spent waiting for the connection to
10916 establish to the final server, including retries. It can be "-1" if the
10917 connection was aborted before a connection could be established. See
10918 "Timers" below for more details.
10919
10920 - "Tt" is the total time in milliseconds elapsed between the accept and the
10921 last close. It covers all possible processings. There is one exception, if
10922 "option logasap" was specified, then the time counting stops at the moment
10923 the log is emitted. In this case, a '+' sign is prepended before the value,
10924 indicating that the final one will be larger. See "Timers" below for more
10925 details.
10926
10927 - "bytes_read" is the total number of bytes transmitted from the server to
10928 the client when the log is emitted. If "option logasap" is specified, the
10929 this value will be prefixed with a '+' sign indicating that the final one
10930 may be larger. Please note that this value is a 64-bit counter, so log
10931 analysis tools must be able to handle it without overflowing.
10932
10933 - "termination_state" is the condition the session was in when the session
10934 ended. This indicates the session state, which side caused the end of
10935 session to happen, and for what reason (timeout, error, ...). The normal
10936 flags should be "--", indicating the session was closed by either end with
10937 no data remaining in buffers. See below "Session state at disconnection"
10938 for more details.
10939
10940 - "actconn" is the total number of concurrent connections on the process when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040010941 the session was logged. It is useful to detect when some per-process system
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010942 limits have been reached. For instance, if actconn is close to 512 when
10943 multiple connection errors occur, chances are high that the system limits
10944 the process to use a maximum of 1024 file descriptors and that all of them
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010945 are used. See section 3 "Global parameters" to find how to tune the system.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010946
10947 - "feconn" is the total number of concurrent connections on the frontend when
10948 the session was logged. It is useful to estimate the amount of resource
10949 required to sustain high loads, and to detect when the frontend's "maxconn"
10950 has been reached. Most often when this value increases by huge jumps, it is
10951 because there is congestion on the backend servers, but sometimes it can be
10952 caused by a denial of service attack.
10953
10954 - "beconn" is the total number of concurrent connections handled by the
10955 backend when the session was logged. It includes the total number of
10956 concurrent connections active on servers as well as the number of
10957 connections pending in queues. It is useful to estimate the amount of
10958 additional servers needed to support high loads for a given application.
10959 Most often when this value increases by huge jumps, it is because there is
10960 congestion on the backend servers, but sometimes it can be caused by a
10961 denial of service attack.
10962
10963 - "srv_conn" is the total number of concurrent connections still active on
10964 the server when the session was logged. It can never exceed the server's
10965 configured "maxconn" parameter. If this value is very often close or equal
10966 to the server's "maxconn", it means that traffic regulation is involved a
10967 lot, meaning that either the server's maxconn value is too low, or that
10968 there aren't enough servers to process the load with an optimal response
10969 time. When only one of the server's "srv_conn" is high, it usually means
10970 that this server has some trouble causing the connections to take longer to
10971 be processed than on other servers.
10972
10973 - "retries" is the number of connection retries experienced by this session
10974 when trying to connect to the server. It must normally be zero, unless a
10975 server is being stopped at the same moment the connection was attempted.
10976 Frequent retries generally indicate either a network problem between
10977 haproxy and the server, or a misconfigured system backlog on the server
10978 preventing new connections from being queued. This field may optionally be
10979 prefixed with a '+' sign, indicating that the session has experienced a
10980 redispatch after the maximal retry count has been reached on the initial
10981 server. In this case, the server name appearing in the log is the one the
10982 connection was redispatched to, and not the first one, though both may
10983 sometimes be the same in case of hashing for instance. So as a general rule
10984 of thumb, when a '+' is present in front of the retry count, this count
10985 should not be attributed to the logged server.
10986
10987 - "srv_queue" is the total number of requests which were processed before
10988 this one in the server queue. It is zero when the request has not gone
10989 through the server queue. It makes it possible to estimate the approximate
10990 server's response time by dividing the time spent in queue by the number of
10991 requests in the queue. It is worth noting that if a session experiences a
10992 redispatch and passes through two server queues, their positions will be
10993 cumulated. A request should not pass through both the server queue and the
10994 backend queue unless a redispatch occurs.
10995
10996 - "backend_queue" is the total number of requests which were processed before
10997 this one in the backend's global queue. It is zero when the request has not
10998 gone through the global queue. It makes it possible to estimate the average
10999 queue length, which easily translates into a number of missing servers when
11000 divided by a server's "maxconn" parameter. It is worth noting that if a
11001 session experiences a redispatch, it may pass twice in the backend's queue,
11002 and then both positions will be cumulated. A request should not pass
11003 through both the server queue and the backend queue unless a redispatch
11004 occurs.
11005
11006
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200110078.2.3. HTTP log format
11008----------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011009
11010The HTTP format is the most complete and the best suited for HTTP proxies. It
11011is enabled by when "option httplog" is specified in the frontend. It provides
11012the same level of information as the TCP format with additional features which
11013are specific to the HTTP protocol. Just like the TCP format, the log is usually
11014emitted at the end of the session, unless "option logasap" is specified, which
11015generally only makes sense for download sites. A session which matches the
11016"monitor" rules will never logged. It is also possible not to log sessions for
11017which no data were sent by the client by specifying "option dontlognull" in the
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020011018frontend. Successful connections will not be logged if "option dontlog-normal"
11019is specified in the frontend.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011020
11021Most fields are shared with the TCP log, some being different. A few fields may
11022slightly vary depending on some configuration options. Those ones are marked
11023with a star ('*') after the field name below.
11024
11025 Example :
11026 frontend http-in
11027 mode http
11028 option httplog
11029 log global
11030 default_backend bck
11031
11032 backend static
11033 server srv1 127.0.0.1:8000
11034
11035 >>> Feb 6 12:14:14 localhost \
11036 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
11037 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 +010011038 {} "GET /index.html HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011039
11040 Field Format Extract from the example above
11041 1 process_name '[' pid ']:' haproxy[14389]:
11042 2 client_ip ':' client_port 10.0.1.2:33317
11043 3 '[' accept_date ']' [06/Feb/2009:12:14:14.655]
11044 4 frontend_name http-in
11045 5 backend_name '/' server_name static/srv1
11046 6 Tq '/' Tw '/' Tc '/' Tr '/' Tt* 10/0/30/69/109
11047 7 status_code 200
11048 8 bytes_read* 2750
11049 9 captured_request_cookie -
11050 10 captured_response_cookie -
11051 11 termination_state ----
11052 12 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 1/1/1/1/0
11053 13 srv_queue '/' backend_queue 0/0
11054 14 '{' captured_request_headers* '}' {haproxy.1wt.eu}
11055 15 '{' captured_response_headers* '}' {}
11056 16 '"' http_request '"' "GET /index.html HTTP/1.1"
Willy Tarreaud72758d2010-01-12 10:42:19 +010011057
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011058
11059Detailed fields description :
11060 - "client_ip" is the IP address of the client which initiated the TCP
Willy Tarreauceb24bc2010-11-09 12:46:41 +010011061 connection to haproxy. If the connection was accepted on a UNIX socket
11062 instead, the IP address would be replaced with the word "unix". Note that
11063 when the connection is accepted on a socket configured with "accept-proxy"
11064 and the PROXY protocol is correctly used, then the logs will reflect the
11065 forwarded connection's information.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011066
11067 - "client_port" is the TCP port of the client which initiated the connection.
Willy Tarreauceb24bc2010-11-09 12:46:41 +010011068 If the connection was accepted on a UNIX socket instead, the port would be
11069 replaced with the ID of the accepting socket, which is also reported in the
11070 stats interface.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011071
11072 - "accept_date" is the exact date when the TCP connection was received by
11073 haproxy (which might be very slightly different from the date observed on
11074 the network if there was some queuing in the system's backlog). This is
11075 usually the same date which may appear in any upstream firewall's log. This
11076 does not depend on the fact that the client has sent the request or not.
11077
11078 - "frontend_name" is the name of the frontend (or listener) which received
11079 and processed the connection.
11080
11081 - "backend_name" is the name of the backend (or listener) which was selected
11082 to manage the connection to the server. This will be the same as the
11083 frontend if no switching rule has been applied.
11084
11085 - "server_name" is the name of the last server to which the connection was
11086 sent, which might differ from the first one if there were connection errors
11087 and a redispatch occurred. Note that this server belongs to the backend
11088 which processed the request. If the request was aborted before reaching a
11089 server, "<NOSRV>" is indicated instead of a server name. If the request was
11090 intercepted by the stats subsystem, "<STATS>" is indicated instead.
11091
11092 - "Tq" is the total time in milliseconds spent waiting for the client to send
11093 a full HTTP request, not counting data. It can be "-1" if the connection
11094 was aborted before a complete request could be received. It should always
11095 be very small because a request generally fits in one single packet. Large
11096 times here generally indicate network trouble between the client and
11097 haproxy. See "Timers" below for more details.
11098
11099 - "Tw" is the total time in milliseconds spent waiting in the various queues.
11100 It can be "-1" if the connection was aborted before reaching the queue.
11101 See "Timers" below for more details.
11102
11103 - "Tc" is the total time in milliseconds spent waiting for the connection to
11104 establish to the final server, including retries. It can be "-1" if the
11105 request was aborted before a connection could be established. See "Timers"
11106 below for more details.
11107
11108 - "Tr" is the total time in milliseconds spent waiting for the server to send
11109 a full HTTP response, not counting data. It can be "-1" if the request was
11110 aborted before a complete response could be received. It generally matches
11111 the server's processing time for the request, though it may be altered by
11112 the amount of data sent by the client to the server. Large times here on
11113 "GET" requests generally indicate an overloaded server. See "Timers" below
11114 for more details.
11115
11116 - "Tt" is the total time in milliseconds elapsed between the accept and the
11117 last close. It covers all possible processings. There is one exception, if
11118 "option logasap" was specified, then the time counting stops at the moment
11119 the log is emitted. In this case, a '+' sign is prepended before the value,
11120 indicating that the final one will be larger. See "Timers" below for more
11121 details.
11122
11123 - "status_code" is the HTTP status code returned to the client. This status
11124 is generally set by the server, but it might also be set by haproxy when
11125 the server cannot be reached or when its response is blocked by haproxy.
11126
11127 - "bytes_read" is the total number of bytes transmitted to the client when
11128 the log is emitted. This does include HTTP headers. If "option logasap" is
11129 specified, the this value will be prefixed with a '+' sign indicating that
11130 the final one may be larger. Please note that this value is a 64-bit
11131 counter, so log analysis tools must be able to handle it without
11132 overflowing.
11133
11134 - "captured_request_cookie" is an optional "name=value" entry indicating that
11135 the client had this cookie in the request. The cookie name and its maximum
11136 length are defined by the "capture cookie" statement in the frontend
11137 configuration. The field is a single dash ('-') when the option is not
11138 set. Only one cookie may be captured, it is generally used to track session
11139 ID exchanges between a client and a server to detect session crossing
11140 between clients due to application bugs. For more details, please consult
11141 the section "Capturing HTTP headers and cookies" below.
11142
11143 - "captured_response_cookie" is an optional "name=value" entry indicating
11144 that the server has returned a cookie with its response. The cookie name
11145 and its maximum length are defined by the "capture cookie" statement in the
11146 frontend configuration. The field is a single dash ('-') when the option is
11147 not set. Only one cookie may be captured, it is generally used to track
11148 session ID exchanges between a client and a server to detect session
11149 crossing between clients due to application bugs. For more details, please
11150 consult the section "Capturing HTTP headers and cookies" below.
11151
11152 - "termination_state" is the condition the session was in when the session
11153 ended. This indicates the session state, which side caused the end of
11154 session to happen, for what reason (timeout, error, ...), just like in TCP
11155 logs, and information about persistence operations on cookies in the last
11156 two characters. The normal flags should begin with "--", indicating the
11157 session was closed by either end with no data remaining in buffers. See
11158 below "Session state at disconnection" for more details.
11159
11160 - "actconn" is the total number of concurrent connections on the process when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040011161 the session was logged. It is useful to detect when some per-process system
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011162 limits have been reached. For instance, if actconn is close to 512 or 1024
11163 when multiple connection errors occur, chances are high that the system
11164 limits the process to use a maximum of 1024 file descriptors and that all
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011165 of them are used. See section 3 "Global parameters" to find how to tune the
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011166 system.
11167
11168 - "feconn" is the total number of concurrent connections on the frontend when
11169 the session was logged. It is useful to estimate the amount of resource
11170 required to sustain high loads, and to detect when the frontend's "maxconn"
11171 has been reached. Most often when this value increases by huge jumps, it is
11172 because there is congestion on the backend servers, but sometimes it can be
11173 caused by a denial of service attack.
11174
11175 - "beconn" is the total number of concurrent connections handled by the
11176 backend when the session was logged. It includes the total number of
11177 concurrent connections active on servers as well as the number of
11178 connections pending in queues. It is useful to estimate the amount of
11179 additional servers needed to support high loads for a given application.
11180 Most often when this value increases by huge jumps, it is because there is
11181 congestion on the backend servers, but sometimes it can be caused by a
11182 denial of service attack.
11183
11184 - "srv_conn" is the total number of concurrent connections still active on
11185 the server when the session was logged. It can never exceed the server's
11186 configured "maxconn" parameter. If this value is very often close or equal
11187 to the server's "maxconn", it means that traffic regulation is involved a
11188 lot, meaning that either the server's maxconn value is too low, or that
11189 there aren't enough servers to process the load with an optimal response
11190 time. When only one of the server's "srv_conn" is high, it usually means
11191 that this server has some trouble causing the requests to take longer to be
11192 processed than on other servers.
11193
11194 - "retries" is the number of connection retries experienced by this session
11195 when trying to connect to the server. It must normally be zero, unless a
11196 server is being stopped at the same moment the connection was attempted.
11197 Frequent retries generally indicate either a network problem between
11198 haproxy and the server, or a misconfigured system backlog on the server
11199 preventing new connections from being queued. This field may optionally be
11200 prefixed with a '+' sign, indicating that the session has experienced a
11201 redispatch after the maximal retry count has been reached on the initial
11202 server. In this case, the server name appearing in the log is the one the
11203 connection was redispatched to, and not the first one, though both may
11204 sometimes be the same in case of hashing for instance. So as a general rule
11205 of thumb, when a '+' is present in front of the retry count, this count
11206 should not be attributed to the logged server.
11207
11208 - "srv_queue" is the total number of requests which were processed before
11209 this one in the server queue. It is zero when the request has not gone
11210 through the server queue. It makes it possible to estimate the approximate
11211 server's response time by dividing the time spent in queue by the number of
11212 requests in the queue. It is worth noting that if a session experiences a
11213 redispatch and passes through two server queues, their positions will be
11214 cumulated. A request should not pass through both the server queue and the
11215 backend queue unless a redispatch occurs.
11216
11217 - "backend_queue" is the total number of requests which were processed before
11218 this one in the backend's global queue. It is zero when the request has not
11219 gone through the global queue. It makes it possible to estimate the average
11220 queue length, which easily translates into a number of missing servers when
11221 divided by a server's "maxconn" parameter. It is worth noting that if a
11222 session experiences a redispatch, it may pass twice in the backend's queue,
11223 and then both positions will be cumulated. A request should not pass
11224 through both the server queue and the backend queue unless a redispatch
11225 occurs.
11226
11227 - "captured_request_headers" is a list of headers captured in the request due
11228 to the presence of the "capture request header" statement in the frontend.
11229 Multiple headers can be captured, they will be delimited by a vertical bar
11230 ('|'). When no capture is enabled, the braces do not appear, causing a
11231 shift of remaining fields. It is important to note that this field may
11232 contain spaces, and that using it requires a smarter log parser than when
11233 it's not used. Please consult the section "Capturing HTTP headers and
11234 cookies" below for more details.
11235
11236 - "captured_response_headers" is a list of headers captured in the response
11237 due to the presence of the "capture response header" statement in the
11238 frontend. Multiple headers can be captured, they will be delimited by a
11239 vertical bar ('|'). When no capture is enabled, the braces do not appear,
11240 causing a shift of remaining fields. It is important to note that this
11241 field may contain spaces, and that using it requires a smarter log parser
11242 than when it's not used. Please consult the section "Capturing HTTP headers
11243 and cookies" below for more details.
11244
11245 - "http_request" is the complete HTTP request line, including the method,
11246 request and HTTP version string. Non-printable characters are encoded (see
11247 below the section "Non-printable characters"). This is always the last
11248 field, and it is always delimited by quotes and is the only one which can
11249 contain quotes. If new fields are added to the log format, they will be
11250 added before this field. This field might be truncated if the request is
11251 huge and does not fit in the standard syslog buffer (1024 characters). This
11252 is the reason why this field must always remain the last one.
11253
11254
Cyril Bontédc4d9032012-04-08 21:57:39 +0200112558.2.4. Custom log format
11256------------------------
William Lallemand48940402012-01-30 16:47:22 +010011257
Willy Tarreau2beef582012-12-20 17:22:52 +010011258The directive log-format allows you to customize the logs in http mode and tcp
William Lallemandbddd4fd2012-02-27 11:23:10 +010011259mode. It takes a string as argument.
William Lallemand48940402012-01-30 16:47:22 +010011260
11261HAproxy understands some log format variables. % precedes log format variables.
11262Variables can take arguments using braces ('{}'), and multiple arguments are
11263separated by commas within the braces. Flags may be added or removed by
11264prefixing them with a '+' or '-' sign.
11265
11266Special variable "%o" may be used to propagate its flags to all other
11267variables on the same format string. This is particularly handy with quoted
11268string formats ("Q").
11269
Willy Tarreauc8368452012-12-21 00:09:23 +010011270If a variable is named between square brackets ('[' .. ']') then it is used
Willy Tarreau74ca5042013-06-11 23:12:07 +020011271as a pattern extraction rule (see section 7.3). This it useful to add some
Willy Tarreauc8368452012-12-21 00:09:23 +010011272less common information such as the client's SSL certificate's DN, or to log
11273the key that would be used to store an entry into a stick table.
11274
William Lallemand48940402012-01-30 16:47:22 +010011275Note: spaces must be escaped. A space character is considered as a separator.
Willy Tarreau06d97f92013-12-02 17:45:48 +010011276In order to emit a verbatim '%', it must be preceeded by another '%' resulting
11277in '%%'. HAProxy will automatically merge consecutive separators.
William Lallemand48940402012-01-30 16:47:22 +010011278
11279Flags are :
11280 * Q: quote a string
Jamie Gloudonaaa21002012-08-25 00:18:33 -040011281 * X: hexadecimal representation (IPs, Ports, %Ts, %rt, %pid)
William Lallemand48940402012-01-30 16:47:22 +010011282
11283 Example:
11284
11285 log-format %T\ %t\ Some\ Text
11286 log-format %{+Q}o\ %t\ %s\ %{-Q}r
11287
11288At the moment, the default HTTP format is defined this way :
11289
Willy Tarreau2beef582012-12-20 17:22:52 +010011290 log-format %ci:%cp\ [%t]\ %ft\ %b/%s\ %Tq/%Tw/%Tc/%Tr/%Tt\ %ST\ %B\ %CC\ \
11291 %CS\ %tsc\ %ac/%fc/%bc/%sc/%rc\ %sq/%bq\ %hr\ %hs\ %{+Q}r
William Lallemand48940402012-01-30 16:47:22 +010011292
William Lallemandbddd4fd2012-02-27 11:23:10 +010011293the default CLF format is defined this way :
William Lallemand48940402012-01-30 16:47:22 +010011294
Willy Tarreau2beef582012-12-20 17:22:52 +010011295 log-format %{+Q}o\ %{-Q}ci\ -\ -\ [%T]\ %r\ %ST\ %B\ \"\"\ \"\"\ %cp\ \
Willy Tarreau773d65f2012-10-12 14:56:11 +020011296 %ms\ %ft\ %b\ %s\ \%Tq\ %Tw\ %Tc\ %Tr\ %Tt\ %tsc\ %ac\ %fc\ \
Willy Tarreau2beef582012-12-20 17:22:52 +010011297 %bc\ %sc\ %rc\ %sq\ %bq\ %CC\ %CS\ \%hrl\ %hsl
William Lallemand48940402012-01-30 16:47:22 +010011298
William Lallemandbddd4fd2012-02-27 11:23:10 +010011299and the default TCP format is defined this way :
11300
Willy Tarreau2beef582012-12-20 17:22:52 +010011301 log-format %ci:%cp\ [%t]\ %ft\ %b/%s\ %Tw/%Tc/%Tt\ %B\ %ts\ \
William Lallemandbddd4fd2012-02-27 11:23:10 +010011302 %ac/%fc/%bc/%sc/%rc\ %sq/%bq
11303
William Lallemand48940402012-01-30 16:47:22 +010011304Please refer to the table below for currently defined variables :
11305
William Lallemandbddd4fd2012-02-27 11:23:10 +010011306 +---+------+-----------------------------------------------+-------------+
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020011307 | R | var | field name (8.2.2 and 8.2.3 for description) | type |
William Lallemandbddd4fd2012-02-27 11:23:10 +010011308 +---+------+-----------------------------------------------+-------------+
11309 | | %o | special variable, apply flags on all next var | |
11310 +---+------+-----------------------------------------------+-------------+
Willy Tarreau2beef582012-12-20 17:22:52 +010011311 | | %B | bytes_read (from server to client) | numeric |
11312 | H | %CC | captured_request_cookie | string |
11313 | H | %CS | captured_response_cookie | string |
William Lallemand5f232402012-04-05 18:02:55 +020011314 | | %H | hostname | string |
William Lallemanda73203e2012-03-12 12:48:57 +010011315 | | %ID | unique-id | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010011316 | H | %ST | status_code | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020011317 | | %T | gmt_date_time | date |
William Lallemandbddd4fd2012-02-27 11:23:10 +010011318 | | %Tc | Tc | numeric |
Yuxans Yao4e25b012012-10-19 10:36:09 +080011319 | | %Tl | local_date_time | date |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020011320 | H | %Tq | Tq | numeric |
11321 | H | %Tr | Tr | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020011322 | | %Ts | timestamp | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010011323 | | %Tt | Tt | numeric |
11324 | | %Tw | Tw | numeric |
Willy Tarreau2beef582012-12-20 17:22:52 +010011325 | | %U | bytes_uploaded (from client to server) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010011326 | | %ac | actconn | numeric |
11327 | | %b | backend_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010011328 | | %bc | beconn (backend concurrent connections) | numeric |
11329 | | %bi | backend_source_ip (connecting address) | IP |
11330 | | %bp | backend_source_port (connecting address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010011331 | | %bq | backend_queue | numeric |
Willy Tarreau2beef582012-12-20 17:22:52 +010011332 | | %ci | client_ip (accepted address) | IP |
11333 | | %cp | client_port (accepted address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010011334 | | %f | frontend_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010011335 | | %fc | feconn (frontend concurrent connections) | numeric |
11336 | | %fi | frontend_ip (accepting address) | IP |
11337 | | %fp | frontend_port (accepting address) | numeric |
Willy Tarreau773d65f2012-10-12 14:56:11 +020011338 | | %ft | frontend_name_transport ('~' suffix for SSL) | string |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020011339 | H | %hr | captured_request_headers default style | string |
11340 | H | %hrl | captured_request_headers CLF style | string list |
11341 | H | %hs | captured_response_headers default style | string |
11342 | H | %hsl | captured_response_headers CLF style | string list |
William Lallemandbddd4fd2012-02-27 11:23:10 +010011343 | | %ms | accept date milliseconds | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020011344 | | %pid | PID | numeric |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020011345 | H | %r | http_request | string |
William Lallemandbddd4fd2012-02-27 11:23:10 +010011346 | | %rc | retries | numeric |
Willy Tarreau2beef582012-12-20 17:22:52 +010011347 | H | %rt | http_request_counter | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010011348 | | %s | server_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010011349 | | %sc | srv_conn (server concurrent connections) | numeric |
11350 | | %si | server_IP (target address) | IP |
11351 | | %sp | server_port (target address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010011352 | | %sq | srv_queue | numeric |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020011353 | S | %sslc| ssl_ciphers (ex: AES-SHA) | string |
11354 | S | %sslv| ssl_version (ex: TLSv1) | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010011355 | | %t | date_time (with millisecond resolution) | date |
William Lallemandbddd4fd2012-02-27 11:23:10 +010011356 | | %ts | termination_state | string |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020011357 | H | %tsc | termination_state with cookie status | string |
William Lallemandbddd4fd2012-02-27 11:23:10 +010011358 +---+------+-----------------------------------------------+-------------+
William Lallemand48940402012-01-30 16:47:22 +010011359
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020011360 R = Restrictions : H = mode http only ; S = SSL only
William Lallemand48940402012-01-30 16:47:22 +010011361
Willy Tarreau5f51e1a2012-12-03 18:40:10 +010011362
113638.2.5. Error log format
11364-----------------------
11365
11366When an incoming connection fails due to an SSL handshake or an invalid PROXY
11367protocol header, haproxy will log the event using a shorter, fixed line format.
11368By default, logs are emitted at the LOG_INFO level, unless the option
11369"log-separate-errors" is set in the backend, in which case the LOG_ERR level
11370will be used. Connections on which no data are exchanged (eg: probes) are not
11371logged if the "dontlognull" option is set.
11372
11373The format looks like this :
11374
11375 >>> Dec 3 18:27:14 localhost \
11376 haproxy[6103]: 127.0.0.1:56059 [03/Dec/2012:17:35:10.380] frt/f1: \
11377 Connection error during SSL handshake
11378
11379 Field Format Extract from the example above
11380 1 process_name '[' pid ']:' haproxy[6103]:
11381 2 client_ip ':' client_port 127.0.0.1:56059
11382 3 '[' accept_date ']' [03/Dec/2012:17:35:10.380]
11383 4 frontend_name "/" bind_name ":" frt/f1:
11384 5 message Connection error during SSL handshake
11385
11386These fields just provide minimal information to help debugging connection
11387failures.
11388
11389
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200113908.3. Advanced logging options
11391-----------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011392
11393Some advanced logging options are often looked for but are not easy to find out
11394just by looking at the various options. Here is an entry point for the few
11395options which can enable better logging. Please refer to the keywords reference
11396for more information about their usage.
11397
11398
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200113998.3.1. Disabling logging of external tests
11400------------------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011401
11402It is quite common to have some monitoring tools perform health checks on
11403haproxy. Sometimes it will be a layer 3 load-balancer such as LVS or any
11404commercial load-balancer, and sometimes it will simply be a more complete
11405monitoring system such as Nagios. When the tests are very frequent, users often
11406ask how to disable logging for those checks. There are three possibilities :
11407
11408 - if connections come from everywhere and are just TCP probes, it is often
11409 desired to simply disable logging of connections without data exchange, by
11410 setting "option dontlognull" in the frontend. It also disables logging of
11411 port scans, which may or may not be desired.
11412
11413 - if the connection come from a known source network, use "monitor-net" to
11414 declare this network as monitoring only. Any host in this network will then
11415 only be able to perform health checks, and their requests will not be
11416 logged. This is generally appropriate to designate a list of equipments
11417 such as other load-balancers.
11418
11419 - if the tests are performed on a known URI, use "monitor-uri" to declare
11420 this URI as dedicated to monitoring. Any host sending this request will
11421 only get the result of a health-check, and the request will not be logged.
11422
11423
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200114248.3.2. Logging before waiting for the session to terminate
11425----------------------------------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011426
11427The problem with logging at end of connection is that you have no clue about
11428what is happening during very long sessions, such as remote terminal sessions
11429or large file downloads. This problem can be worked around by specifying
11430"option logasap" in the frontend. Haproxy will then log as soon as possible,
11431just before data transfer begins. This means that in case of TCP, it will still
11432log the connection status to the server, and in case of HTTP, it will log just
11433after processing the server headers. In this case, the number of bytes reported
11434is the number of header bytes sent to the client. In order to avoid confusion
11435with normal logs, the total time field and the number of bytes are prefixed
11436with a '+' sign which means that real numbers are certainly larger.
11437
11438
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200114398.3.3. Raising log level upon errors
11440------------------------------------
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020011441
11442Sometimes it is more convenient to separate normal traffic from errors logs,
11443for instance in order to ease error monitoring from log files. When the option
11444"log-separate-errors" is used, connections which experience errors, timeouts,
11445retries, redispatches or HTTP status codes 5xx will see their syslog level
11446raised from "info" to "err". This will help a syslog daemon store the log in
11447a separate file. It is very important to keep the errors in the normal traffic
11448file too, so that log ordering is not altered. You should also be careful if
11449you already have configured your syslog daemon to store all logs higher than
11450"notice" in an "admin" file, because the "err" level is higher than "notice".
11451
11452
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200114538.3.4. Disabling logging of successful connections
11454--------------------------------------------------
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020011455
11456Although this may sound strange at first, some large sites have to deal with
11457multiple thousands of logs per second and are experiencing difficulties keeping
11458them intact for a long time or detecting errors within them. If the option
11459"dontlog-normal" is set on the frontend, all normal connections will not be
11460logged. In this regard, a normal connection is defined as one without any
11461error, timeout, retry nor redispatch. In HTTP, the status code is checked too,
11462and a response with a status 5xx is not considered normal and will be logged
11463too. Of course, doing is is really discouraged as it will remove most of the
11464useful information from the logs. Do this only if you have no other
11465alternative.
11466
11467
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200114688.4. Timing events
11469------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011470
11471Timers provide a great help in troubleshooting network problems. All values are
11472reported in milliseconds (ms). These timers should be used in conjunction with
11473the session termination flags. In TCP mode with "option tcplog" set on the
11474frontend, 3 control points are reported under the form "Tw/Tc/Tt", and in HTTP
11475mode, 5 control points are reported under the form "Tq/Tw/Tc/Tr/Tt" :
11476
11477 - Tq: total time to get the client request (HTTP mode only). It's the time
11478 elapsed between the moment the client connection was accepted and the
11479 moment the proxy received the last HTTP header. The value "-1" indicates
11480 that the end of headers (empty line) has never been seen. This happens when
11481 the client closes prematurely or times out.
11482
11483 - Tw: total time spent in the queues waiting for a connection slot. It
11484 accounts for backend queue as well as the server queues, and depends on the
11485 queue size, and the time needed for the server to complete previous
11486 requests. The value "-1" means that the request was killed before reaching
11487 the queue, which is generally what happens with invalid or denied requests.
11488
11489 - Tc: total time to establish the TCP connection to the server. It's the time
11490 elapsed between the moment the proxy sent the connection request, and the
11491 moment it was acknowledged by the server, or between the TCP SYN packet and
11492 the matching SYN/ACK packet in return. The value "-1" means that the
11493 connection never established.
11494
11495 - Tr: server response time (HTTP mode only). It's the time elapsed between
11496 the moment the TCP connection was established to the server and the moment
11497 the server sent its complete response headers. It purely shows its request
11498 processing time, without the network overhead due to the data transmission.
11499 It is worth noting that when the client has data to send to the server, for
11500 instance during a POST request, the time already runs, and this can distort
11501 apparent response time. For this reason, it's generally wise not to trust
11502 too much this field for POST requests initiated from clients behind an
11503 untrusted network. A value of "-1" here means that the last the response
11504 header (empty line) was never seen, most likely because the server timeout
11505 stroke before the server managed to process the request.
11506
11507 - Tt: total session duration time, between the moment the proxy accepted it
11508 and the moment both ends were closed. The exception is when the "logasap"
11509 option is specified. In this case, it only equals (Tq+Tw+Tc+Tr), and is
11510 prefixed with a '+' sign. From this field, we can deduce "Td", the data
11511 transmission time, by substracting other timers when valid :
11512
11513 Td = Tt - (Tq + Tw + Tc + Tr)
11514
11515 Timers with "-1" values have to be excluded from this equation. In TCP
11516 mode, "Tq" and "Tr" have to be excluded too. Note that "Tt" can never be
11517 negative.
11518
11519These timers provide precious indications on trouble causes. Since the TCP
11520protocol defines retransmit delays of 3, 6, 12... seconds, we know for sure
11521that timers close to multiples of 3s are nearly always related to lost packets
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010011522due to network problems (wires, negotiation, congestion). Moreover, if "Tt" is
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011523close to a timeout value specified in the configuration, it often means that a
11524session has been aborted on timeout.
11525
11526Most common cases :
11527
11528 - If "Tq" is close to 3000, a packet has probably been lost between the
11529 client and the proxy. This is very rare on local networks but might happen
11530 when clients are on far remote networks and send large requests. It may
11531 happen that values larger than usual appear here without any network cause.
11532 Sometimes, during an attack or just after a resource starvation has ended,
11533 haproxy may accept thousands of connections in a few milliseconds. The time
11534 spent accepting these connections will inevitably slightly delay processing
11535 of other connections, and it can happen that request times in the order of
11536 a few tens of milliseconds are measured after a few thousands of new
Patrick Mezard105faca2010-06-12 17:02:46 +020011537 connections have been accepted at once. Setting "option http-server-close"
11538 may display larger request times since "Tq" also measures the time spent
11539 waiting for additional requests.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011540
11541 - If "Tc" is close to 3000, a packet has probably been lost between the
11542 server and the proxy during the server connection phase. This value should
11543 always be very low, such as 1 ms on local networks and less than a few tens
11544 of ms on remote networks.
11545
Willy Tarreau55165fe2009-05-10 12:02:55 +020011546 - If "Tr" is nearly always lower than 3000 except some rare values which seem
11547 to be the average majored by 3000, there are probably some packets lost
11548 between the proxy and the server.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011549
11550 - If "Tt" is large even for small byte counts, it generally is because
11551 neither the client nor the server decides to close the connection, for
11552 instance because both have agreed on a keep-alive connection mode. In order
11553 to solve this issue, it will be needed to specify "option httpclose" on
11554 either the frontend or the backend. If the problem persists, it means that
11555 the server ignores the "close" connection mode and expects the client to
11556 close. Then it will be required to use "option forceclose". Having the
11557 smallest possible 'Tt' is important when connection regulation is used with
11558 the "maxconn" option on the servers, since no new connection will be sent
11559 to the server until another one is released.
11560
11561Other noticeable HTTP log cases ('xx' means any value to be ignored) :
11562
11563 Tq/Tw/Tc/Tr/+Tt The "option logasap" is present on the frontend and the log
11564 was emitted before the data phase. All the timers are valid
11565 except "Tt" which is shorter than reality.
11566
11567 -1/xx/xx/xx/Tt The client was not able to send a complete request in time
11568 or it aborted too early. Check the session termination flags
11569 then "timeout http-request" and "timeout client" settings.
11570
11571 Tq/-1/xx/xx/Tt It was not possible to process the request, maybe because
11572 servers were out of order, because the request was invalid
11573 or forbidden by ACL rules. Check the session termination
11574 flags.
11575
11576 Tq/Tw/-1/xx/Tt The connection could not establish on the server. Either it
11577 actively refused it or it timed out after Tt-(Tq+Tw) ms.
11578 Check the session termination flags, then check the
11579 "timeout connect" setting. Note that the tarpit action might
11580 return similar-looking patterns, with "Tw" equal to the time
11581 the client connection was maintained open.
11582
11583 Tq/Tw/Tc/-1/Tt The server has accepted the connection but did not return
11584 a complete response in time, or it closed its connexion
11585 unexpectedly after Tt-(Tq+Tw+Tc) ms. Check the session
11586 termination flags, then check the "timeout server" setting.
11587
11588
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200115898.5. Session state at disconnection
11590-----------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011591
11592TCP and HTTP logs provide a session termination indicator in the
11593"termination_state" field, just before the number of active connections. It is
115942-characters long in TCP mode, and is extended to 4 characters in HTTP mode,
11595each of which has a special meaning :
11596
11597 - On the first character, a code reporting the first event which caused the
11598 session to terminate :
11599
11600 C : the TCP session was unexpectedly aborted by the client.
11601
11602 S : the TCP session was unexpectedly aborted by the server, or the
11603 server explicitly refused it.
11604
11605 P : the session was prematurely aborted by the proxy, because of a
11606 connection limit enforcement, because a DENY filter was matched,
11607 because of a security check which detected and blocked a dangerous
11608 error in server response which might have caused information leak
Willy Tarreau570f2212013-06-10 16:42:09 +020011609 (eg: cacheable cookie).
11610
11611 L : the session was locally processed by haproxy and was not passed to
11612 a server. This is what happens for stats and redirects.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011613
11614 R : a resource on the proxy has been exhausted (memory, sockets, source
11615 ports, ...). Usually, this appears during the connection phase, and
11616 system logs should contain a copy of the precise error. If this
11617 happens, it must be considered as a very serious anomaly which
11618 should be fixed as soon as possible by any means.
11619
11620 I : an internal error was identified by the proxy during a self-check.
11621 This should NEVER happen, and you are encouraged to report any log
11622 containing this, because this would almost certainly be a bug. It
11623 would be wise to preventively restart the process after such an
11624 event too, in case it would be caused by memory corruption.
11625
Simon Horman752dc4a2011-06-21 14:34:59 +090011626 D : the session was killed by haproxy because the server was detected
11627 as down and was configured to kill all connections when going down.
11628
Justin Karnegeseb2c24a2012-05-24 15:28:52 -070011629 U : the session was killed by haproxy on this backup server because an
11630 active server was detected as up and was configured to kill all
11631 backup connections when going up.
11632
Willy Tarreaua2a64e92011-09-07 23:01:56 +020011633 K : the session was actively killed by an admin operating on haproxy.
11634
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011635 c : the client-side timeout expired while waiting for the client to
11636 send or receive data.
11637
11638 s : the server-side timeout expired while waiting for the server to
11639 send or receive data.
11640
11641 - : normal session completion, both the client and the server closed
11642 with nothing left in the buffers.
11643
11644 - on the second character, the TCP or HTTP session state when it was closed :
11645
Willy Tarreauf7b30a92010-12-06 22:59:17 +010011646 R : the proxy was waiting for a complete, valid REQUEST from the client
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011647 (HTTP mode only). Nothing was sent to any server.
11648
11649 Q : the proxy was waiting in the QUEUE for a connection slot. This can
11650 only happen when servers have a 'maxconn' parameter set. It can
11651 also happen in the global queue after a redispatch consecutive to
11652 a failed attempt to connect to a dying server. If no redispatch is
11653 reported, then no connection attempt was made to any server.
11654
11655 C : the proxy was waiting for the CONNECTION to establish on the
11656 server. The server might at most have noticed a connection attempt.
11657
11658 H : the proxy was waiting for complete, valid response HEADERS from the
11659 server (HTTP only).
11660
11661 D : the session was in the DATA phase.
11662
11663 L : the proxy was still transmitting LAST data to the client while the
11664 server had already finished. This one is very rare as it can only
11665 happen when the client dies while receiving the last packets.
11666
11667 T : the request was tarpitted. It has been held open with the client
11668 during the whole "timeout tarpit" duration or until the client
11669 closed, both of which will be reported in the "Tw" timer.
11670
11671 - : normal session completion after end of data transfer.
11672
11673 - the third character tells whether the persistence cookie was provided by
11674 the client (only in HTTP mode) :
11675
11676 N : the client provided NO cookie. This is usually the case for new
11677 visitors, so counting the number of occurrences of this flag in the
11678 logs generally indicate a valid trend for the site frequentation.
11679
11680 I : the client provided an INVALID cookie matching no known server.
11681 This might be caused by a recent configuration change, mixed
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +020011682 cookies between HTTP/HTTPS sites, persistence conditionally
11683 ignored, or an attack.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011684
11685 D : the client provided a cookie designating a server which was DOWN,
11686 so either "option persist" was used and the client was sent to
11687 this server, or it was not set and the client was redispatched to
11688 another server.
11689
Willy Tarreau996a92c2010-10-13 19:30:47 +020011690 V : the client provided a VALID cookie, and was sent to the associated
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011691 server.
11692
Willy Tarreau996a92c2010-10-13 19:30:47 +020011693 E : the client provided a valid cookie, but with a last date which was
11694 older than what is allowed by the "maxidle" cookie parameter, so
11695 the cookie is consider EXPIRED and is ignored. The request will be
11696 redispatched just as if there was no cookie.
11697
11698 O : the client provided a valid cookie, but with a first date which was
11699 older than what is allowed by the "maxlife" cookie parameter, so
11700 the cookie is consider too OLD and is ignored. The request will be
11701 redispatched just as if there was no cookie.
11702
Willy Tarreauc89ccb62012-04-05 21:18:22 +020011703 U : a cookie was present but was not used to select the server because
11704 some other server selection mechanism was used instead (typically a
11705 "use-server" rule).
11706
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011707 - : does not apply (no cookie set in configuration).
11708
11709 - the last character reports what operations were performed on the persistence
11710 cookie returned by the server (only in HTTP mode) :
11711
11712 N : NO cookie was provided by the server, and none was inserted either.
11713
11714 I : no cookie was provided by the server, and the proxy INSERTED one.
11715 Note that in "cookie insert" mode, if the server provides a cookie,
11716 it will still be overwritten and reported as "I" here.
11717
Willy Tarreau996a92c2010-10-13 19:30:47 +020011718 U : the proxy UPDATED the last date in the cookie that was presented by
11719 the client. This can only happen in insert mode with "maxidle". It
11720 happens everytime there is activity at a different date than the
11721 date indicated in the cookie. If any other change happens, such as
11722 a redispatch, then the cookie will be marked as inserted instead.
11723
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011724 P : a cookie was PROVIDED by the server and transmitted as-is.
11725
11726 R : the cookie provided by the server was REWRITTEN by the proxy, which
11727 happens in "cookie rewrite" or "cookie prefix" modes.
11728
11729 D : the cookie provided by the server was DELETED by the proxy.
11730
11731 - : does not apply (no cookie set in configuration).
11732
Willy Tarreau996a92c2010-10-13 19:30:47 +020011733The combination of the two first flags gives a lot of information about what
11734was happening when the session terminated, and why it did terminate. It can be
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011735helpful to detect server saturation, network troubles, local system resource
11736starvation, attacks, etc...
11737
11738The most common termination flags combinations are indicated below. They are
11739alphabetically sorted, with the lowercase set just after the upper case for
11740easier finding and understanding.
11741
11742 Flags Reason
11743
11744 -- Normal termination.
11745
11746 CC The client aborted before the connection could be established to the
11747 server. This can happen when haproxy tries to connect to a recently
11748 dead (or unchecked) server, and the client aborts while haproxy is
11749 waiting for the server to respond or for "timeout connect" to expire.
11750
11751 CD The client unexpectedly aborted during data transfer. This can be
11752 caused by a browser crash, by an intermediate equipment between the
11753 client and haproxy which decided to actively break the connection,
11754 by network routing issues between the client and haproxy, or by a
11755 keep-alive session between the server and the client terminated first
11756 by the client.
Willy Tarreaud72758d2010-01-12 10:42:19 +010011757
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011758 cD The client did not send nor acknowledge any data for as long as the
11759 "timeout client" delay. This is often caused by network failures on
Cyril Bontédc4d9032012-04-08 21:57:39 +020011760 the client side, or the client simply leaving the net uncleanly.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011761
11762 CH The client aborted while waiting for the server to start responding.
11763 It might be the server taking too long to respond or the client
11764 clicking the 'Stop' button too fast.
11765
11766 cH The "timeout client" stroke while waiting for client data during a
11767 POST request. This is sometimes caused by too large TCP MSS values
11768 for PPPoE networks which cannot transport full-sized packets. It can
11769 also happen when client timeout is smaller than server timeout and
11770 the server takes too long to respond.
11771
11772 CQ The client aborted while its session was queued, waiting for a server
11773 with enough empty slots to accept it. It might be that either all the
11774 servers were saturated or that the assigned server was taking too
11775 long a time to respond.
11776
11777 CR The client aborted before sending a full HTTP request. Most likely
11778 the request was typed by hand using a telnet client, and aborted
11779 too early. The HTTP status code is likely a 400 here. Sometimes this
11780 might also be caused by an IDS killing the connection between haproxy
11781 and the client.
11782
11783 cR The "timeout http-request" stroke before the client sent a full HTTP
11784 request. This is sometimes caused by too large TCP MSS values on the
11785 client side for PPPoE networks which cannot transport full-sized
11786 packets, or by clients sending requests by hand and not typing fast
11787 enough, or forgetting to enter the empty line at the end of the
11788 request. The HTTP status code is likely a 408 here.
11789
11790 CT The client aborted while its session was tarpitted. It is important to
11791 check if this happens on valid requests, in order to be sure that no
Willy Tarreau55165fe2009-05-10 12:02:55 +020011792 wrong tarpit rules have been written. If a lot of them happen, it
11793 might make sense to lower the "timeout tarpit" value to something
11794 closer to the average reported "Tw" timer, in order not to consume
11795 resources for just a few attackers.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011796
Willy Tarreau570f2212013-06-10 16:42:09 +020011797 LR The request was intercepted and locally handled by haproxy. Generally
11798 it means that this was a redirect or a stats request.
11799
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010011800 SC The server or an equipment between it and haproxy explicitly refused
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011801 the TCP connection (the proxy received a TCP RST or an ICMP message
11802 in return). Under some circumstances, it can also be the network
11803 stack telling the proxy that the server is unreachable (eg: no route,
11804 or no ARP response on local network). When this happens in HTTP mode,
11805 the status code is likely a 502 or 503 here.
11806
11807 sC The "timeout connect" stroke before a connection to the server could
11808 complete. When this happens in HTTP mode, the status code is likely a
11809 503 or 504 here.
11810
11811 SD The connection to the server died with an error during the data
11812 transfer. This usually means that haproxy has received an RST from
11813 the server or an ICMP message from an intermediate equipment while
11814 exchanging data with the server. This can be caused by a server crash
11815 or by a network issue on an intermediate equipment.
11816
11817 sD The server did not send nor acknowledge any data for as long as the
11818 "timeout server" setting during the data phase. This is often caused
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010011819 by too short timeouts on L4 equipments before the server (firewalls,
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011820 load-balancers, ...), as well as keep-alive sessions maintained
11821 between the client and the server expiring first on haproxy.
11822
11823 SH The server aborted before sending its full HTTP response headers, or
11824 it crashed while processing the request. Since a server aborting at
11825 this moment is very rare, it would be wise to inspect its logs to
11826 control whether it crashed and why. The logged request may indicate a
11827 small set of faulty requests, demonstrating bugs in the application.
11828 Sometimes this might also be caused by an IDS killing the connection
11829 between haproxy and the server.
11830
11831 sH The "timeout server" stroke before the server could return its
11832 response headers. This is the most common anomaly, indicating too
11833 long transactions, probably caused by server or database saturation.
11834 The immediate workaround consists in increasing the "timeout server"
11835 setting, but it is important to keep in mind that the user experience
11836 will suffer from these long response times. The only long term
11837 solution is to fix the application.
11838
11839 sQ The session spent too much time in queue and has been expired. See
11840 the "timeout queue" and "timeout connect" settings to find out how to
11841 fix this if it happens too often. If it often happens massively in
11842 short periods, it may indicate general problems on the affected
11843 servers due to I/O or database congestion, or saturation caused by
11844 external attacks.
11845
11846 PC The proxy refused to establish a connection to the server because the
11847 process' socket limit has been reached while attempting to connect.
Cyril Bontédc4d9032012-04-08 21:57:39 +020011848 The global "maxconn" parameter may be increased in the configuration
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011849 so that it does not happen anymore. This status is very rare and
11850 might happen when the global "ulimit-n" parameter is forced by hand.
11851
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010011852 PD The proxy blocked an incorrectly formatted chunked encoded message in
11853 a request or a response, after the server has emitted its headers. In
11854 most cases, this will indicate an invalid message from the server to
Willy Tarreauf3a3e132013-08-31 08:16:26 +020011855 the client. Haproxy supports chunk sizes of up to 2GB - 1 (2147483647
11856 bytes). Any larger size will be considered as an error.
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010011857
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011858 PH The proxy blocked the server's response, because it was invalid,
11859 incomplete, dangerous (cache control), or matched a security filter.
11860 In any case, an HTTP 502 error is sent to the client. One possible
11861 cause for this error is an invalid syntax in an HTTP header name
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010011862 containing unauthorized characters. It is also possible but quite
11863 rare, that the proxy blocked a chunked-encoding request from the
11864 client due to an invalid syntax, before the server responded. In this
11865 case, an HTTP 400 error is sent to the client and reported in the
11866 logs.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011867
11868 PR The proxy blocked the client's HTTP request, either because of an
11869 invalid HTTP syntax, in which case it returned an HTTP 400 error to
11870 the client, or because a deny filter matched, in which case it
11871 returned an HTTP 403 error.
11872
11873 PT The proxy blocked the client's request and has tarpitted its
11874 connection before returning it a 500 server error. Nothing was sent
11875 to the server. The connection was maintained open for as long as
11876 reported by the "Tw" timer field.
11877
11878 RC A local resource has been exhausted (memory, sockets, source ports)
11879 preventing the connection to the server from establishing. The error
11880 logs will tell precisely what was missing. This is very rare and can
11881 only be solved by proper system tuning.
11882
Willy Tarreau996a92c2010-10-13 19:30:47 +020011883The combination of the two last flags gives a lot of information about how
11884persistence was handled by the client, the server and by haproxy. This is very
11885important to troubleshoot disconnections, when users complain they have to
11886re-authenticate. The commonly encountered flags are :
11887
11888 -- Persistence cookie is not enabled.
11889
11890 NN No cookie was provided by the client, none was inserted in the
11891 response. For instance, this can be in insert mode with "postonly"
11892 set on a GET request.
11893
11894 II A cookie designating an invalid server was provided by the client,
11895 a valid one was inserted in the response. This typically happens when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040011896 a "server" entry is removed from the configuration, since its cookie
Willy Tarreau996a92c2010-10-13 19:30:47 +020011897 value can be presented by a client when no other server knows it.
11898
11899 NI No cookie was provided by the client, one was inserted in the
11900 response. This typically happens for first requests from every user
11901 in "insert" mode, which makes it an easy way to count real users.
11902
11903 VN A cookie was provided by the client, none was inserted in the
11904 response. This happens for most responses for which the client has
11905 already got a cookie.
11906
11907 VU A cookie was provided by the client, with a last visit date which is
11908 not completely up-to-date, so an updated cookie was provided in
11909 response. This can also happen if there was no date at all, or if
11910 there was a date but the "maxidle" parameter was not set, so that the
11911 cookie can be switched to unlimited time.
11912
11913 EI A cookie was provided by the client, with a last visit date which is
11914 too old for the "maxidle" parameter, so the cookie was ignored and a
11915 new cookie was inserted in the response.
11916
11917 OI A cookie was provided by the client, with a first visit date which is
11918 too old for the "maxlife" parameter, so the cookie was ignored and a
11919 new cookie was inserted in the response.
11920
11921 DI The server designated by the cookie was down, a new server was
11922 selected and a new cookie was emitted in the response.
11923
11924 VI The server designated by the cookie was not marked dead but could not
11925 be reached. A redispatch happened and selected another one, which was
11926 then advertised in the response.
11927
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011928
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200119298.6. Non-printable characters
11930-----------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011931
11932In order not to cause trouble to log analysis tools or terminals during log
11933consulting, non-printable characters are not sent as-is into log files, but are
11934converted to the two-digits hexadecimal representation of their ASCII code,
11935prefixed by the character '#'. The only characters that can be logged without
11936being escaped are comprised between 32 and 126 (inclusive). Obviously, the
11937escape character '#' itself is also encoded to avoid any ambiguity ("#23"). It
11938is the same for the character '"' which becomes "#22", as well as '{', '|' and
11939'}' when logging headers.
11940
11941Note that the space character (' ') is not encoded in headers, which can cause
11942issues for tools relying on space count to locate fields. A typical header
11943containing spaces is "User-Agent".
11944
11945Last, it has been observed that some syslog daemons such as syslog-ng escape
11946the quote ('"') with a backslash ('\'). The reverse operation can safely be
11947performed since no quote may appear anywhere else in the logs.
11948
11949
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200119508.7. Capturing HTTP cookies
11951---------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011952
11953Cookie capture simplifies the tracking a complete user session. This can be
11954achieved using the "capture cookie" statement in the frontend. Please refer to
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011955section 4.2 for more details. Only one cookie can be captured, and the same
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011956cookie will simultaneously be checked in the request ("Cookie:" header) and in
11957the response ("Set-Cookie:" header). The respective values will be reported in
11958the HTTP logs at the "captured_request_cookie" and "captured_response_cookie"
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011959locations (see section 8.2.3 about HTTP log format). When either cookie is
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011960not seen, a dash ('-') replaces the value. This way, it's easy to detect when a
11961user switches to a new session for example, because the server will reassign it
11962a new cookie. It is also possible to detect if a server unexpectedly sets a
11963wrong cookie to a client, leading to session crossing.
11964
11965 Examples :
11966 # capture the first cookie whose name starts with "ASPSESSION"
11967 capture cookie ASPSESSION len 32
11968
11969 # capture the first cookie whose name is exactly "vgnvisitor"
11970 capture cookie vgnvisitor= len 32
11971
11972
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200119738.8. Capturing HTTP headers
11974---------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011975
11976Header captures are useful to track unique request identifiers set by an upper
11977proxy, virtual host names, user-agents, POST content-length, referrers, etc. In
11978the response, one can search for information about the response length, how the
11979server asked the cache to behave, or an object location during a redirection.
11980
11981Header captures are performed using the "capture request header" and "capture
11982response header" statements in the frontend. Please consult their definition in
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011983section 4.2 for more details.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011984
11985It is possible to include both request headers and response headers at the same
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010011986time. Non-existent headers are logged as empty strings, and if one header
11987appears more than once, only its last occurrence will be logged. Request headers
Willy Tarreaucc6c8912009-02-22 10:53:55 +010011988are grouped within braces '{' and '}' in the same order as they were declared,
11989and delimited with a vertical bar '|' without any space. Response headers
11990follow the same representation, but are displayed after a space following the
11991request headers block. These blocks are displayed just before the HTTP request
11992in the logs.
11993
11994 Example :
11995 # This instance chains to the outgoing proxy
11996 listen proxy-out
11997 mode http
11998 option httplog
11999 option logasap
12000 log global
12001 server cache1 192.168.1.1:3128
12002
12003 # log the name of the virtual server
12004 capture request header Host len 20
12005
12006 # log the amount of data uploaded during a POST
12007 capture request header Content-Length len 10
12008
12009 # log the beginning of the referrer
12010 capture request header Referer len 20
12011
12012 # server name (useful for outgoing proxies only)
12013 capture response header Server len 20
12014
12015 # logging the content-length is useful with "option logasap"
12016 capture response header Content-Length len 10
12017
12018 # log the expected cache behaviour on the response
12019 capture response header Cache-Control len 8
12020
12021 # the Via header will report the next proxy's name
12022 capture response header Via len 20
12023
12024 # log the URL location during a redirection
12025 capture response header Location len 20
12026
12027 >>> Aug 9 20:26:09 localhost \
12028 haproxy[2022]: 127.0.0.1:34014 [09/Aug/2004:20:26:09] proxy-out \
12029 proxy-out/cache1 0/0/0/162/+162 200 +350 - - ---- 0/0/0/0/0 0/0 \
12030 {fr.adserver.yahoo.co||http://fr.f416.mail.} {|864|private||} \
12031 "GET http://fr.adserver.yahoo.com/"
12032
12033 >>> Aug 9 20:30:46 localhost \
12034 haproxy[2022]: 127.0.0.1:34020 [09/Aug/2004:20:30:46] proxy-out \
12035 proxy-out/cache1 0/0/0/182/+182 200 +279 - - ---- 0/0/0/0/0 0/0 \
12036 {w.ods.org||} {Formilux/0.1.8|3495|||} \
Willy Tarreaud72758d2010-01-12 10:42:19 +010012037 "GET http://trafic.1wt.eu/ HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010012038
12039 >>> Aug 9 20:30:46 localhost \
12040 haproxy[2022]: 127.0.0.1:34028 [09/Aug/2004:20:30:46] proxy-out \
12041 proxy-out/cache1 0/0/2/126/+128 301 +223 - - ---- 0/0/0/0/0 0/0 \
12042 {www.sytadin.equipement.gouv.fr||http://trafic.1wt.eu/} \
12043 {Apache|230|||http://www.sytadin.} \
Willy Tarreaud72758d2010-01-12 10:42:19 +010012044 "GET http://www.sytadin.equipement.gouv.fr/ HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010012045
12046
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200120478.9. Examples of logs
12048---------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010012049
12050These are real-world examples of logs accompanied with an explanation. Some of
12051them have been made up by hand. The syslog part has been removed for better
12052reading. Their sole purpose is to explain how to decipher them.
12053
12054 >>> haproxy[674]: 127.0.0.1:33318 [15/Oct/2003:08:31:57.130] px-http \
12055 px-http/srv1 6559/0/7/147/6723 200 243 - - ---- 5/3/3/1/0 0/0 \
12056 "HEAD / HTTP/1.0"
12057
12058 => long request (6.5s) entered by hand through 'telnet'. The server replied
12059 in 147 ms, and the session ended normally ('----')
12060
12061 >>> haproxy[674]: 127.0.0.1:33319 [15/Oct/2003:08:31:57.149] px-http \
12062 px-http/srv1 6559/1230/7/147/6870 200 243 - - ---- 324/239/239/99/0 \
12063 0/9 "HEAD / HTTP/1.0"
12064
12065 => Idem, but the request was queued in the global queue behind 9 other
12066 requests, and waited there for 1230 ms.
12067
12068 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.654] px-http \
12069 px-http/srv1 9/0/7/14/+30 200 +243 - - ---- 3/3/3/1/0 0/0 \
12070 "GET /image.iso HTTP/1.0"
12071
12072 => request for a long data transfer. The "logasap" option was specified, so
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010012073 the log was produced just before transferring data. The server replied in
Willy Tarreaucc6c8912009-02-22 10:53:55 +010012074 14 ms, 243 bytes of headers were sent to the client, and total time from
12075 accept to first data byte is 30 ms.
12076
12077 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.925] px-http \
12078 px-http/srv1 9/0/7/14/30 502 243 - - PH-- 3/2/2/0/0 0/0 \
12079 "GET /cgi-bin/bug.cgi? HTTP/1.0"
12080
12081 => the proxy blocked a server response either because of an "rspdeny" or
12082 "rspideny" filter, or because the response was improperly formatted and
Willy Tarreau3c92c5f2011-08-28 09:45:47 +020012083 not HTTP-compliant, or because it blocked sensitive information which
Willy Tarreaucc6c8912009-02-22 10:53:55 +010012084 risked being cached. In this case, the response is replaced with a "502
12085 bad gateway". The flags ("PH--") tell us that it was haproxy who decided
12086 to return the 502 and not the server.
12087
12088 >>> haproxy[18113]: 127.0.0.1:34548 [15/Oct/2003:15:18:55.798] px-http \
Willy Tarreaud72758d2010-01-12 10:42:19 +010012089 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 +010012090
12091 => the client never completed its request and aborted itself ("C---") after
12092 8.5s, while the proxy was waiting for the request headers ("-R--").
12093 Nothing was sent to any server.
12094
12095 >>> haproxy[18113]: 127.0.0.1:34549 [15/Oct/2003:15:19:06.103] px-http \
12096 px-http/<NOSRV> -1/-1/-1/-1/50001 408 0 - - cR-- 2/2/2/0/0 0/0 ""
12097
12098 => The client never completed its request, which was aborted by the
12099 time-out ("c---") after 50s, while the proxy was waiting for the request
12100 headers ("-R--"). Nothing was sent to any server, but the proxy could
12101 send a 408 return code to the client.
12102
12103 >>> haproxy[18989]: 127.0.0.1:34550 [15/Oct/2003:15:24:28.312] px-tcp \
12104 px-tcp/srv1 0/0/5007 0 cD 0/0/0/0/0 0/0
12105
12106 => This log was produced with "option tcplog". The client timed out after
12107 5 seconds ("c----").
12108
12109 >>> haproxy[18989]: 10.0.0.1:34552 [15/Oct/2003:15:26:31.462] px-http \
12110 px-http/srv1 3183/-1/-1/-1/11215 503 0 - - SC-- 205/202/202/115/3 \
Willy Tarreaud72758d2010-01-12 10:42:19 +010012111 0/0 "HEAD / HTTP/1.0"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010012112
12113 => The request took 3s to complete (probably a network problem), and the
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012114 connection to the server failed ('SC--') after 4 attempts of 2 seconds
Willy Tarreaucc6c8912009-02-22 10:53:55 +010012115 (config says 'retries 3'), and no redispatch (otherwise we would have
12116 seen "/+3"). Status code 503 was returned to the client. There were 115
12117 connections on this server, 202 connections on this proxy, and 205 on
12118 the global process. It is possible that the server refused the
12119 connection because of too many already established.
Willy Tarreau844e3c52008-01-11 16:28:18 +010012120
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010012121
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200121229. Statistics and monitoring
12123----------------------------
12124
12125It is possible to query HAProxy about its status. The most commonly used
12126mechanism is the HTTP statistics page. This page also exposes an alternative
12127CSV output format for monitoring tools. The same format is provided on the
12128Unix socket.
12129
12130
121319.1. CSV format
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010012132---------------
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +010012133
Willy Tarreau7f062c42009-03-05 18:43:00 +010012134The statistics may be consulted either from the unix socket or from the HTTP
12135page. Both means provide a CSV format whose fields follow.
12136
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +010012137 0. pxname: proxy name
12138 1. svname: service name (FRONTEND for frontend, BACKEND for backend, any name
12139 for server)
12140 2. qcur: current queued requests
12141 3. qmax: max queued requests
12142 4. scur: current sessions
12143 5. smax: max sessions
12144 6. slim: sessions limit
12145 7. stot: total sessions
12146 8. bin: bytes in
12147 9. bout: bytes out
12148 10. dreq: denied requests
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +010012149 11. dresp: denied responses
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +010012150 12. ereq: request errors
12151 13. econ: connection errors
Willy Tarreauae526782010-03-04 20:34:23 +010012152 14. eresp: response errors (among which srv_abrt)
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +010012153 15. wretr: retries (warning)
12154 16. wredis: redispatches (warning)
Cyril Bonté0dae5852010-02-03 00:26:28 +010012155 17. status: status (UP/DOWN/NOLB/MAINT/MAINT(via)...)
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +010012156 18. weight: server weight (server), total weight (backend)
12157 19. act: server is active (server), number of active servers (backend)
12158 20. bck: server is backup (server), number of backup servers (backend)
12159 21. chkfail: number of failed checks
12160 22. chkdown: number of UP->DOWN transitions
12161 23. lastchg: last status change (in seconds)
12162 24. downtime: total downtime (in seconds)
12163 25. qlimit: queue limit
12164 26. pid: process id (0 for first instance, 1 for second, ...)
12165 27. iid: unique proxy id
12166 28. sid: service id (unique inside a proxy)
12167 29. throttle: warm up status
12168 30. lbtot: total number of times a server was selected
12169 31. tracked: id of proxy/server if tracking is enabled
Krzysztof Piotr Oledzkiaeebf9b2009-10-04 15:43:17 +020012170 32. type (0=frontend, 1=backend, 2=server, 3=socket)
Krzysztof Piotr Oledzkidb57c6b2009-08-31 21:23:27 +020012171 33. rate: number of sessions per second over last elapsed second
12172 34. rate_lim: limit on new sessions per second
12173 35. rate_max: max number of new sessions per second
Krzysztof Piotr Oledzki09605412009-09-23 22:09:24 +020012174 36. check_status: status of last health check, one of:
Cyril Bontéf0c60612010-02-06 14:44:47 +010012175 UNK -> unknown
12176 INI -> initializing
12177 SOCKERR -> socket error
12178 L4OK -> check passed on layer 4, no upper layers testing enabled
12179 L4TMOUT -> layer 1-4 timeout
12180 L4CON -> layer 1-4 connection problem, for example
12181 "Connection refused" (tcp rst) or "No route to host" (icmp)
12182 L6OK -> check passed on layer 6
12183 L6TOUT -> layer 6 (SSL) timeout
12184 L6RSP -> layer 6 invalid response - protocol error
12185 L7OK -> check passed on layer 7
12186 L7OKC -> check conditionally passed on layer 7, for example 404 with
12187 disable-on-404
12188 L7TOUT -> layer 7 (HTTP/SMTP) timeout
12189 L7RSP -> layer 7 invalid response - protocol error
12190 L7STS -> layer 7 response error, for example HTTP 5xx
Krzysztof Piotr Oledzki09605412009-09-23 22:09:24 +020012191 37. check_code: layer5-7 code, if available
12192 38. check_duration: time in ms took to finish last health check
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010012193 39. hrsp_1xx: http responses with 1xx code
12194 40. hrsp_2xx: http responses with 2xx code
12195 41. hrsp_3xx: http responses with 3xx code
12196 42. hrsp_4xx: http responses with 4xx code
12197 43. hrsp_5xx: http responses with 5xx code
12198 44. hrsp_other: http responses with other codes (protocol error)
Willy Tarreaud63335a2010-02-26 12:56:52 +010012199 45. hanafail: failed health checks details
12200 46. req_rate: HTTP requests per second over last elapsed second
12201 47. req_rate_max: max number of HTTP requests per second observed
12202 48. req_tot: total number of HTTP requests received
Willy Tarreauae526782010-03-04 20:34:23 +010012203 49. cli_abrt: number of data transfers aborted by the client
12204 50. srv_abrt: number of data transfers aborted by the server (inc. in eresp)
Willy Tarreau55058a72012-11-21 08:27:21 +010012205 51. comp_in: number of HTTP response bytes fed to the compressor
12206 52. comp_out: number of HTTP response bytes emitted by the compressor
12207 53. comp_byp: number of bytes that bypassed the HTTP compressor (CPU/BW limit)
Willy Tarreau11d4ec82012-11-26 00:49:03 +010012208 54. comp_rsp: number of HTTP responses that were compressed
Willy Tarreau844e3c52008-01-11 16:28:18 +010012209
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010012210
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200122119.2. Unix Socket commands
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010012212-------------------------
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +010012213
Willy Tarreau468f4932013-08-01 16:50:16 +020012214The stats socket is not enabled by default. In order to enable it, it is
12215necessary to add one line in the global section of the haproxy configuration.
12216A second line is recommended to set a larger timeout, always appreciated when
12217issuing commands by hand :
12218
12219 global
12220 stats socket /var/run/haproxy.sock mode 600 level admin
12221 stats timeout 2m
12222
12223It is also possible to add multiple instances of the stats socket by repeating
12224the line, and make them listen to a TCP port instead of a UNIX socket. This is
12225never done by default because this is dangerous, but can be handy in some
12226situations :
12227
12228 global
12229 stats socket /var/run/haproxy.sock mode 600 level admin
12230 stats socket ipv4@192.168.0.1:9999 level admin
12231 stats timeout 2m
12232
12233To access the socket, an external utility such as "socat" is required. Socat is a
12234swiss-army knife to connect anything to anything. We use it to connect terminals
12235to the socket, or a couple of stdin/stdout pipes to it for scripts. The two main
12236syntaxes we'll use are the following :
12237
12238 # socat /var/run/haproxy.sock stdio
12239 # socat /var/run/haproxy.sock readline
12240
12241The first one is used with scripts. It is possible to send the output of a
12242script to haproxy, and pass haproxy's output to another script. That's useful
12243for retrieving counters or attack traces for example.
12244
12245The second one is only useful for issuing commands by hand. It has the benefit
12246that the terminal is handled by the readline library which supports line
12247editing and history, which is very convenient when issuing repeated commands
12248(eg: watch a counter).
12249
12250The socket supports two operation modes :
12251 - interactive
12252 - non-interactive
12253
12254The non-interactive mode is the default when socat connects to the socket. In
12255this mode, a single line may be sent. It is processed as a whole, responses are
12256sent back, and the connection closes after the end of the response. This is the
12257mode that scripts and monitoring tools use. It is possible to send multiple
12258commands in this mode, they need to be delimited by a semi-colon (';'). For
12259example :
12260
12261 # echo "show info;show stat;show table" | socat /var/run/haproxy stdio
12262
12263The interactive mode displays a prompt ('>') and waits for commands to be
12264entered on the line, then processes them, and displays the prompt again to wait
12265for a new command. This mode is entered via the "prompt" command which must be
12266sent on the first line in non-interactive mode. The mode is a flip switch, if
12267"prompt" is sent in interactive mode, it is disabled and the connection closes
12268after processing the last command of the same line.
12269
12270For this reason, when debugging by hand, it's quite common to start with the
12271"prompt" command :
12272
12273 # socat /var/run/haproxy readline
12274 prompt
12275 > show info
12276 ...
12277 >
12278
12279Since multiple commands may be issued at once, haproxy uses the empty line as a
12280delimiter to mark an end of output for each command, and takes care of ensuring
12281that no command can emit an empty line on output. A script can thus easily
12282parse the output even when multiple commands were pipelined on a single line.
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010012283
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020012284It is important to understand that when multiple haproxy processes are started
12285on the same sockets, any process may pick up the request and will output its
12286own stats.
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010012287
Willy Tarreau468f4932013-08-01 16:50:16 +020012288The list of commands currently supported on the stats socket is provided below.
12289If an unknown command is sent, haproxy displays the usage message which reminds
12290all supported commands. Some commands support a more complex syntax, generally
12291it will explain what part of the command is invalid when this happens.
12292
Willy Tarreaud63335a2010-02-26 12:56:52 +010012293clear counters
12294 Clear the max values of the statistics counters in each proxy (frontend &
12295 backend) and in each server. The cumulated counters are not affected. This
12296 can be used to get clean counters after an incident, without having to
12297 restart nor to clear traffic counters. This command is restricted and can
12298 only be issued on sockets configured for levels "operator" or "admin".
12299
12300clear counters all
12301 Clear all statistics counters in each proxy (frontend & backend) and in each
12302 server. This has the same effect as restarting. This command is restricted
12303 and can only be issued on sockets configured for level "admin".
12304
Simon Hormanc88b8872011-06-15 15:18:49 +090012305clear table <table> [ data.<type> <operator> <value> ] | [ key <key> ]
12306 Remove entries from the stick-table <table>.
12307
12308 This is typically used to unblock some users complaining they have been
12309 abusively denied access to a service, but this can also be used to clear some
12310 stickiness entries matching a server that is going to be replaced (see "show
12311 table" below for details). Note that sometimes, removal of an entry will be
12312 refused because it is currently tracked by a session. Retrying a few seconds
12313 later after the session ends is usual enough.
12314
12315 In the case where no options arguments are given all entries will be removed.
12316
12317 When the "data." form is used entries matching a filter applied using the
12318 stored data (see "stick-table" in section 4.2) are removed. A stored data
12319 type must be specified in <type>, and this data type must be stored in the
12320 table otherwise an error is reported. The data is compared according to
12321 <operator> with the 64-bit integer <value>. Operators are the same as with
12322 the ACLs :
12323
12324 - eq : match entries whose data is equal to this value
12325 - ne : match entries whose data is not equal to this value
12326 - le : match entries whose data is less than or equal to this value
12327 - ge : match entries whose data is greater than or equal to this value
12328 - lt : match entries whose data is less than this value
12329 - gt : match entries whose data is greater than this value
12330
12331 When the key form is used the entry <key> is removed. The key must be of the
Simon Horman619e3cc2011-06-15 15:18:52 +090012332 same type as the table, which currently is limited to IPv4, IPv6, integer and
12333 string.
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020012334
12335 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020012336 $ echo "show table http_proxy" | socat stdio /tmp/sock1
Emeric Brun7c6b82e2010-09-24 16:34:28 +020012337 >>> # table: http_proxy, type: ip, size:204800, used:2
Willy Tarreau62a36c42010-08-17 15:53:10 +020012338 >>> 0x80e6a4c: key=127.0.0.1 use=0 exp=3594729 gpc0=0 conn_rate(30000)=1 \
12339 bytes_out_rate(60000)=187
12340 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
12341 bytes_out_rate(60000)=191
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020012342
12343 $ echo "clear table http_proxy key 127.0.0.1" | socat stdio /tmp/sock1
12344
12345 $ echo "show table http_proxy" | socat stdio /tmp/sock1
Emeric Brun7c6b82e2010-09-24 16:34:28 +020012346 >>> # table: http_proxy, type: ip, size:204800, used:1
Willy Tarreau62a36c42010-08-17 15:53:10 +020012347 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
12348 bytes_out_rate(60000)=191
Simon Hormanc88b8872011-06-15 15:18:49 +090012349 $ echo "clear table http_proxy data.gpc0 eq 1" | socat stdio /tmp/sock1
12350 $ echo "show table http_proxy" | socat stdio /tmp/sock1
12351 >>> # table: http_proxy, type: ip, size:204800, used:1
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020012352
Simon Horman671b6f02013-11-25 10:46:39 +090012353enable agent <backend>/<server>
12354 Mark the auxiliary agent check as temporarily stopped.
12355
12356 In the case where an agent check is being run as a auxiliary check, due
12357 to the agent-check parameter of a server directive, new checks are only
12358 initialised when the agent is in the enabled. Thus, disable agent will
12359 prevent any new agent checks from begin initiated until the agent
12360 re-enabled using enable agent.
12361
12362 When an agent is disabled the processing of an auxiliary agent check that
12363 was initiated while the agent was set as enabled is as follows: All
12364 results that would alter the weight, specifically "drain" or a weight
12365 returned by the agent, are ignored. The processing of agent check is
12366 otherwise unchanged.
12367
12368 The motivation for this feature is to allow the weight changing effects
12369 of the agent checks to be paused to allow the weight of a server to be
12370 configured using set weight without being overridden by the agent.
12371
12372 This command is restricted and can only be issued on sockets configured for
12373 level "admin".
12374
Willy Tarreau532a4502011-09-07 22:37:44 +020012375disable frontend <frontend>
12376 Mark the frontend as temporarily stopped. This corresponds to the mode which
12377 is used during a soft restart : the frontend releases the port but can be
12378 enabled again if needed. This should be used with care as some non-Linux OSes
12379 are unable to enable it back. This is intended to be used in environments
12380 where stopping a proxy is not even imaginable but a misconfigured proxy must
12381 be fixed. That way it's possible to release the port and bind it into another
12382 process to restore operations. The frontend will appear with status "STOP"
12383 on the stats page.
12384
12385 The frontend may be specified either by its name or by its numeric ID,
12386 prefixed with a sharp ('#').
12387
12388 This command is restricted and can only be issued on sockets configured for
12389 level "admin".
12390
Willy Tarreaud63335a2010-02-26 12:56:52 +010012391disable server <backend>/<server>
12392 Mark the server DOWN for maintenance. In this mode, no more checks will be
12393 performed on the server until it leaves maintenance.
12394 If the server is tracked by other servers, those servers will be set to DOWN
12395 during the maintenance.
12396
12397 In the statistics page, a server DOWN for maintenance will appear with a
12398 "MAINT" status, its tracking servers with the "MAINT(via)" one.
12399
12400 Both the backend and the server may be specified either by their name or by
Willy Tarreauf5f31922011-08-02 11:32:07 +020012401 their numeric ID, prefixed with a sharp ('#').
Willy Tarreaud63335a2010-02-26 12:56:52 +010012402
12403 This command is restricted and can only be issued on sockets configured for
12404 level "admin".
12405
Simon Horman671b6f02013-11-25 10:46:39 +090012406enable agent <backend>/<server>
12407 Resume auxiliary agent check that was temporarily stopped.
12408
12409 See "disable agent" for details of the effect of temporarily starting
12410 and stopping an auxiliary agent.
12411
12412 This command is restricted and can only be issued on sockets configured for
12413 level "admin".
12414
Willy Tarreau532a4502011-09-07 22:37:44 +020012415enable frontend <frontend>
12416 Resume a frontend which was temporarily stopped. It is possible that some of
12417 the listening ports won't be able to bind anymore (eg: if another process
12418 took them since the 'disable frontend' operation). If this happens, an error
12419 is displayed. Some operating systems might not be able to resume a frontend
12420 which was disabled.
12421
12422 The frontend may be specified either by its name or by its numeric ID,
12423 prefixed with a sharp ('#').
12424
12425 This command is restricted and can only be issued on sockets configured for
12426 level "admin".
12427
Willy Tarreaud63335a2010-02-26 12:56:52 +010012428enable server <backend>/<server>
12429 If the server was previously marked as DOWN for maintenance, this marks the
12430 server UP and checks are re-enabled.
12431
12432 Both the backend and the server may be specified either by their name or by
Willy Tarreauf5f31922011-08-02 11:32:07 +020012433 their numeric ID, prefixed with a sharp ('#').
Willy Tarreaud63335a2010-02-26 12:56:52 +010012434
12435 This command is restricted and can only be issued on sockets configured for
12436 level "admin".
12437
12438get weight <backend>/<server>
12439 Report the current weight and the initial weight of server <server> in
12440 backend <backend> or an error if either doesn't exist. The initial weight is
12441 the one that appears in the configuration file. Both are normally equal
12442 unless the current weight has been changed. Both the backend and the server
12443 may be specified either by their name or by their numeric ID, prefixed with a
Willy Tarreauf5f31922011-08-02 11:32:07 +020012444 sharp ('#').
Willy Tarreaud63335a2010-02-26 12:56:52 +010012445
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020012446help
12447 Print the list of known keywords and their basic usage. The same help screen
12448 is also displayed for unknown commands.
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010012449
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020012450prompt
12451 Toggle the prompt at the beginning of the line and enter or leave interactive
12452 mode. In interactive mode, the connection is not closed after a command
12453 completes. Instead, the prompt will appear again, indicating the user that
12454 the interpreter is waiting for a new command. The prompt consists in a right
12455 angle bracket followed by a space "> ". This mode is particularly convenient
12456 when one wants to periodically check information such as stats or errors.
12457 It is also a good idea to enter interactive mode before issuing a "help"
12458 command.
12459
12460quit
12461 Close the connection when in interactive mode.
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +010012462
Willy Tarreau2a0f4d22011-08-02 11:49:05 +020012463set maxconn frontend <frontend> <value>
Willy Tarreau3c7a79d2012-09-26 21:07:15 +020012464 Dynamically change the specified frontend's maxconn setting. Any positive
12465 value is allowed including zero, but setting values larger than the global
12466 maxconn does not make much sense. If the limit is increased and connections
12467 were pending, they will immediately be accepted. If it is lowered to a value
12468 below the current number of connections, new connections acceptation will be
Willy Tarreau2a0f4d22011-08-02 11:49:05 +020012469 delayed until the threshold is reached. The frontend might be specified by
12470 either its name or its numeric ID prefixed with a sharp ('#').
12471
Willy Tarreau91886b62011-09-07 14:38:31 +020012472set maxconn global <maxconn>
12473 Dynamically change the global maxconn setting within the range defined by the
12474 initial global maxconn setting. If it is increased and connections were
12475 pending, they will immediately be accepted. If it is lowered to a value below
12476 the current number of connections, new connections acceptation will be
12477 delayed until the threshold is reached. A value of zero restores the initial
12478 setting.
12479
Willy Tarreauf5b22872011-09-07 16:13:44 +020012480set rate-limit connections global <value>
12481 Change the process-wide connection rate limit, which is set by the global
12482 'maxconnrate' setting. A value of zero disables the limitation. This limit
12483 applies to all frontends and the change has an immediate effect. The value
12484 is passed in number of connections per second.
12485
William Lallemandd85f9172012-11-09 17:05:39 +010012486set rate-limit http-compression global <value>
12487 Change the maximum input compression rate, which is set by the global
12488 'maxcomprate' setting. A value of zero disables the limitation. The value is
William Lallemand096f5542012-11-19 17:26:05 +010012489 passed in number of kilobytes per second. The value is available in the "show
12490 info" on the line "CompressBpsRateLim" in bytes.
William Lallemandd85f9172012-11-09 17:05:39 +010012491
Willy Tarreau47060b62013-08-01 21:11:42 +020012492set table <table> key <key> [data.<data_type> <value>]*
Willy Tarreau654694e2012-06-07 01:03:16 +020012493 Create or update a stick-table entry in the table. If the key is not present,
12494 an entry is inserted. See stick-table in section 4.2 to find all possible
12495 values for <data_type>. The most likely use consists in dynamically entering
12496 entries for source IP addresses, with a flag in gpc0 to dynamically block an
Willy Tarreau47060b62013-08-01 21:11:42 +020012497 IP address or affect its quality of service. It is possible to pass multiple
12498 data_types in a single call.
Willy Tarreau654694e2012-06-07 01:03:16 +020012499
Willy Tarreaud63335a2010-02-26 12:56:52 +010012500set timeout cli <delay>
12501 Change the CLI interface timeout for current connection. This can be useful
12502 during long debugging sessions where the user needs to constantly inspect
12503 some indicators without being disconnected. The delay is passed in seconds.
12504
12505set weight <backend>/<server> <weight>[%]
12506 Change a server's weight to the value passed in argument. If the value ends
12507 with the '%' sign, then the new weight will be relative to the initially
Simon Horman58b5d292013-02-12 10:45:52 +090012508 configured weight. Absolute weights are permitted between 0 and 256.
12509 Relative weights must be positive with the resulting absolute weight is
12510 capped at 256. Servers which are part of a farm running a static
12511 load-balancing algorithm have stricter limitations because the weight
12512 cannot change once set. Thus for these servers, the only accepted values
12513 are 0 and 100% (or 0 and the initial weight). Changes take effect
12514 immediately, though certain LB algorithms require a certain amount of
12515 requests to consider changes. A typical usage of this command is to
12516 disable a server during an update by setting its weight to zero, then to
12517 enable it again after the update by setting it back to 100%. This command
12518 is restricted and can only be issued on sockets configured for level
12519 "admin". Both the backend and the server may be specified either by their
12520 name or by their numeric ID, prefixed with a sharp ('#').
Willy Tarreaud63335a2010-02-26 12:56:52 +010012521
Willy Tarreaue0c8a1a2009-03-04 16:33:10 +010012522show errors [<iid>]
12523 Dump last known request and response errors collected by frontends and
12524 backends. If <iid> is specified, the limit the dump to errors concerning
Willy Tarreau6162db22009-10-10 17:13:00 +020012525 either frontend or backend whose ID is <iid>. This command is restricted
12526 and can only be issued on sockets configured for levels "operator" or
12527 "admin".
Willy Tarreaue0c8a1a2009-03-04 16:33:10 +010012528
12529 The errors which may be collected are the last request and response errors
12530 caused by protocol violations, often due to invalid characters in header
12531 names. The report precisely indicates what exact character violated the
12532 protocol. Other important information such as the exact date the error was
12533 detected, frontend and backend names, the server name (when known), the
12534 internal session ID and the source address which has initiated the session
12535 are reported too.
12536
12537 All characters are returned, and non-printable characters are encoded. The
12538 most common ones (\t = 9, \n = 10, \r = 13 and \e = 27) are encoded as one
12539 letter following a backslash. The backslash itself is encoded as '\\' to
12540 avoid confusion. Other non-printable characters are encoded '\xNN' where
12541 NN is the two-digits hexadecimal representation of the character's ASCII
12542 code.
12543
12544 Lines are prefixed with the position of their first character, starting at 0
12545 for the beginning of the buffer. At most one input line is printed per line,
12546 and large lines will be broken into multiple consecutive output lines so that
12547 the output never goes beyond 79 characters wide. It is easy to detect if a
12548 line was broken, because it will not end with '\n' and the next line's offset
12549 will be followed by a '+' sign, indicating it is a continuation of previous
12550 line.
12551
12552 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020012553 $ echo "show errors" | socat stdio /tmp/sock1
12554 >>> [04/Mar/2009:15:46:56.081] backend http-in (#2) : invalid response
Willy Tarreaue0c8a1a2009-03-04 16:33:10 +010012555 src 127.0.0.1, session #54, frontend fe-eth0 (#1), server s2 (#1)
12556 response length 213 bytes, error at position 23:
12557
12558 00000 HTTP/1.0 200 OK\r\n
12559 00017 header/bizarre:blah\r\n
12560 00038 Location: blah\r\n
12561 00054 Long-line: this is a very long line which should b
12562 00104+ e broken into multiple lines on the output buffer,
12563 00154+ otherwise it would be too large to print in a ter
12564 00204+ minal\r\n
12565 00211 \r\n
12566
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012567 In the example above, we see that the backend "http-in" which has internal
Willy Tarreaue0c8a1a2009-03-04 16:33:10 +010012568 ID 2 has blocked an invalid response from its server s2 which has internal
12569 ID 1. The request was on session 54 initiated by source 127.0.0.1 and
12570 received by frontend fe-eth0 whose ID is 1. The total response length was
12571 213 bytes when the error was detected, and the error was at byte 23. This
12572 is the slash ('/') in header name "header/bizarre", which is not a valid
12573 HTTP character for a header name.
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +010012574
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020012575show info
12576 Dump info about haproxy status on current process.
12577
12578show sess
12579 Dump all known sessions. Avoid doing this on slow connections as this can
Willy Tarreau6162db22009-10-10 17:13:00 +020012580 be huge. This command is restricted and can only be issued on sockets
12581 configured for levels "operator" or "admin".
12582
Willy Tarreau66dc20a2010-03-05 17:53:32 +010012583show sess <id>
12584 Display a lot of internal information about the specified session identifier.
12585 This identifier is the first field at the beginning of the lines in the dumps
12586 of "show sess" (it corresponds to the session pointer). Those information are
12587 useless to most users but may be used by haproxy developers to troubleshoot a
12588 complex bug. The output format is intentionally not documented so that it can
Willy Tarreau76153662012-11-26 01:16:39 +010012589 freely evolve depending on demands. The special id "all" dumps the states of
12590 all sessions, which can be avoided as much as possible as it is highly CPU
12591 intensive and can take a lot of time.
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020012592
12593show stat [<iid> <type> <sid>]
12594 Dump statistics in the CSV format. By passing <id>, <type> and <sid>, it is
12595 possible to dump only selected items :
12596 - <iid> is a proxy ID, -1 to dump everything
12597 - <type> selects the type of dumpable objects : 1 for frontends, 2 for
12598 backends, 4 for servers, -1 for everything. These values can be ORed,
12599 for example:
12600 1 + 2 = 3 -> frontend + backend.
12601 1 + 2 + 4 = 7 -> frontend + backend + server.
12602 - <sid> is a server ID, -1 to dump everything from the selected proxy.
12603
12604 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020012605 $ echo "show info;show stat" | socat stdio unix-connect:/tmp/sock1
12606 >>> Name: HAProxy
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020012607 Version: 1.4-dev2-49
12608 Release_date: 2009/09/23
12609 Nbproc: 1
12610 Process_num: 1
12611 (...)
12612
12613 # pxname,svname,qcur,qmax,scur,smax,slim,stot,bin,bout,dreq, (...)
12614 stats,FRONTEND,,,0,0,1000,0,0,0,0,0,0,,,,,OPEN,,,,,,,,,1,1,0, (...)
12615 stats,BACKEND,0,0,0,0,1000,0,0,0,0,0,,0,0,0,0,UP,0,0,0,,0,250,(...)
12616 (...)
12617 www1,BACKEND,0,0,0,0,1000,0,0,0,0,0,,0,0,0,0,UP,1,1,0,,0,250, (...)
12618
12619 $
12620
12621 Here, two commands have been issued at once. That way it's easy to find
12622 which process the stats apply to in multi-process mode. Notice the empty
12623 line after the information output which marks the end of the first block.
12624 A similar empty line appears at the end of the second block (stats) so that
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010012625 the reader knows the output has not been truncated.
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020012626
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020012627show table
12628 Dump general information on all known stick-tables. Their name is returned
12629 (the name of the proxy which holds them), their type (currently zero, always
12630 IP), their size in maximum possible number of entries, and the number of
12631 entries currently in use.
12632
12633 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020012634 $ echo "show table" | socat stdio /tmp/sock1
Simon Horman64b28d02011-08-13 08:03:50 +090012635 >>> # table: front_pub, type: ip, size:204800, used:171454
12636 >>> # table: back_rdp, type: ip, size:204800, used:0
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020012637
Simon Horman17bce342011-06-15 15:18:47 +090012638show table <name> [ data.<type> <operator> <value> ] | [ key <key> ]
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020012639 Dump contents of stick-table <name>. In this mode, a first line of generic
12640 information about the table is reported as with "show table", then all
12641 entries are dumped. Since this can be quite heavy, it is possible to specify
Simon Horman17bce342011-06-15 15:18:47 +090012642 a filter in order to specify what entries to display.
12643
12644 When the "data." form is used the filter applies to the stored data (see
12645 "stick-table" in section 4.2). A stored data type must be specified
12646 in <type>, and this data type must be stored in the table otherwise an
12647 error is reported. The data is compared according to <operator> with the
12648 64-bit integer <value>. Operators are the same as with the ACLs :
12649
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020012650 - eq : match entries whose data is equal to this value
12651 - ne : match entries whose data is not equal to this value
12652 - le : match entries whose data is less than or equal to this value
12653 - ge : match entries whose data is greater than or equal to this value
12654 - lt : match entries whose data is less than this value
12655 - gt : match entries whose data is greater than this value
12656
Simon Hormanc88b8872011-06-15 15:18:49 +090012657
12658 When the key form is used the entry <key> is shown. The key must be of the
Simon Horman619e3cc2011-06-15 15:18:52 +090012659 same type as the table, which currently is limited to IPv4, IPv6, integer,
12660 and string.
Simon Horman17bce342011-06-15 15:18:47 +090012661
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020012662 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020012663 $ echo "show table http_proxy" | socat stdio /tmp/sock1
Simon Horman64b28d02011-08-13 08:03:50 +090012664 >>> # table: http_proxy, type: ip, size:204800, used:2
Willy Tarreau62a36c42010-08-17 15:53:10 +020012665 >>> 0x80e6a4c: key=127.0.0.1 use=0 exp=3594729 gpc0=0 conn_rate(30000)=1 \
12666 bytes_out_rate(60000)=187
12667 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
12668 bytes_out_rate(60000)=191
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020012669
Willy Tarreau62a36c42010-08-17 15:53:10 +020012670 $ echo "show table http_proxy data.gpc0 gt 0" | socat stdio /tmp/sock1
Simon Horman64b28d02011-08-13 08:03:50 +090012671 >>> # table: http_proxy, type: ip, size:204800, used:2
Willy Tarreau62a36c42010-08-17 15:53:10 +020012672 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
12673 bytes_out_rate(60000)=191
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020012674
Willy Tarreau62a36c42010-08-17 15:53:10 +020012675 $ echo "show table http_proxy data.conn_rate gt 5" | \
12676 socat stdio /tmp/sock1
Simon Horman64b28d02011-08-13 08:03:50 +090012677 >>> # table: http_proxy, type: ip, size:204800, used:2
Willy Tarreau62a36c42010-08-17 15:53:10 +020012678 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
12679 bytes_out_rate(60000)=191
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020012680
Simon Horman17bce342011-06-15 15:18:47 +090012681 $ echo "show table http_proxy key 127.0.0.2" | \
12682 socat stdio /tmp/sock1
Simon Horman64b28d02011-08-13 08:03:50 +090012683 >>> # table: http_proxy, type: ip, size:204800, used:2
Simon Horman17bce342011-06-15 15:18:47 +090012684 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
12685 bytes_out_rate(60000)=191
12686
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020012687 When the data criterion applies to a dynamic value dependent on time such as
12688 a bytes rate, the value is dynamically computed during the evaluation of the
12689 entry in order to decide whether it has to be dumped or not. This means that
12690 such a filter could match for some time then not match anymore because as
12691 time goes, the average event rate drops.
12692
12693 It is possible to use this to extract lists of IP addresses abusing the
12694 service, in order to monitor them or even blacklist them in a firewall.
12695 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020012696 $ echo "show table http_proxy data.gpc0 gt 0" \
12697 | socat stdio /tmp/sock1 \
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020012698 | fgrep 'key=' | cut -d' ' -f2 | cut -d= -f2 > abusers-ip.txt
12699 ( or | awk '/key/{ print a[split($2,a,"=")]; }' )
Krzysztof Piotr Oledzki719e7262009-10-04 15:02:46 +020012700
Willy Tarreau532a4502011-09-07 22:37:44 +020012701shutdown frontend <frontend>
12702 Completely delete the specified frontend. All the ports it was bound to will
12703 be released. It will not be possible to enable the frontend anymore after
12704 this operation. This is intended to be used in environments where stopping a
12705 proxy is not even imaginable but a misconfigured proxy must be fixed. That
12706 way it's possible to release the port and bind it into another process to
12707 restore operations. The frontend will not appear at all on the stats page
12708 once it is terminated.
12709
12710 The frontend may be specified either by its name or by its numeric ID,
12711 prefixed with a sharp ('#').
12712
12713 This command is restricted and can only be issued on sockets configured for
12714 level "admin".
12715
Willy Tarreaua295edc2011-09-07 23:21:03 +020012716shutdown session <id>
12717 Immediately terminate the session matching the specified session identifier.
12718 This identifier is the first field at the beginning of the lines in the dumps
12719 of "show sess" (it corresponds to the session pointer). This can be used to
12720 terminate a long-running session without waiting for a timeout or when an
12721 endless transfer is ongoing. Such terminated sessions are reported with a 'K'
12722 flag in the logs.
12723
Willy Tarreau52b2d222011-09-07 23:48:48 +020012724shutdown sessions <backend>/<server>
12725 Immediately terminate all the sessions attached to the specified server. This
12726 can be used to terminate long-running sessions after a server is put into
12727 maintenance mode, for instance. Such terminated sessions are reported with a
12728 'K' flag in the logs.
12729
Willy Tarreau0ba27502007-12-24 16:55:16 +010012730/*
12731 * Local variables:
12732 * fill-column: 79
12733 * End:
12734 */