blob: 704b97cfbb79f86dd99a5b862b2342a0cd14da7e [file] [log] [blame]
Willy Tarreau6a06a402007-07-15 20:15:28 +02001 ----------------------
2 HAProxy
3 Configuration Manual
4 ----------------------
Willy Tarreaub1e52e82008-01-13 14:49:51 +01005 version 1.3.15
Willy Tarreau6a06a402007-07-15 20:15:28 +02006 willy tarreau
Willy Tarreau7b4c5ae2008-04-19 21:06:14 +02007 2008/04/19
Willy Tarreau6a06a402007-07-15 20:15:28 +02008
9
10This document covers the configuration language as implemented in the version
11specified above. It does not provide any hint, example or advice. For such
Willy Tarreau0ba27502007-12-24 16:55:16 +010012documentation, please refer to the Reference Manual or the Architecture Manual.
Willy Tarreau6a06a402007-07-15 20:15:28 +020013
Willy Tarreau41a340d2008-01-22 12:25:31 +010014Note to documentation contributors : this document is formated with 80 columns
15per line, with even number of spaces for indentation and without tabs. Please
16follow these rules strictly so that it remains easily printable everywhere. If
17a line needs to be printed verbatim and does not fit, please end each line with
18a backslash ('\') and continue on next line.
Willy Tarreau6a06a402007-07-15 20:15:28 +020019
20HAProxy's configuration process involves 3 major sources of parameters :
21
22 - the arguments from the command-line, which always take precedence
23 - the "global" section, which sets process-wide parameters
24 - the proxies sections which can take form of "defaults", "listen",
25 "frontend" and "backend".
26
Willy Tarreau0ba27502007-12-24 16:55:16 +010027The configuration file syntax consists in lines beginning with a keyword
28referenced in this manual, optionally followed by one or several parameters
29delimited by spaces. If spaces have to be entered in strings, then they must be
30preceeded by a backslash ('\') to be escaped. Backslashes also have to be
31escaped by doubling them.
32
33Some parameters involve values representating time, such as timeouts. These
34values are generally expressed in milliseconds (unless explicitly stated
35otherwise) but may be expressed in any other unit by suffixing the unit to the
36numeric value. It is important to consider this because it will not be repeated
37for every keyword. Supported units are :
38
39 - us : microseconds. 1 microsecond = 1/1000000 second
40 - ms : milliseconds. 1 millisecond = 1/1000 second. This is the default.
41 - s : seconds. 1s = 1000ms
42 - m : minutes. 1m = 60s = 60000ms
43 - h : hours. 1h = 60m = 3600s = 3600000ms
44 - d : days. 1d = 24h = 1440m = 86400s = 86400000ms
45
46
Willy Tarreau6a06a402007-07-15 20:15:28 +0200471. Global parameters
48--------------------
49
50Parameters in the "global" section are process-wide and often OS-specific. They
51are generally set once for all and do not need being changed once correct. Some
52of them have command-line equivalents.
53
54The following keywords are supported in the "global" section :
55
56 * Process management and security
57 - chroot
58 - daemon
59 - gid
60 - group
61 - log
62 - nbproc
63 - pidfile
64 - uid
65 - ulimit-n
66 - user
Willy Tarreaufbee7132007-10-18 13:53:22 +020067 - stats
Willy Tarreau6a06a402007-07-15 20:15:28 +020068
69 * Performance tuning
70 - maxconn
Willy Tarreauff4f82d2009-02-06 11:28:13 +010071 - maxpipes
Willy Tarreau6a06a402007-07-15 20:15:28 +020072 - noepoll
73 - nokqueue
74 - nopoll
75 - nosepoll
Willy Tarreauff4f82d2009-02-06 11:28:13 +010076 - nosplice
Willy Tarreaufe255b72007-10-14 23:09:26 +020077 - spread-checks
Willy Tarreaua0250ba2008-01-06 11:22:57 +010078 - tune.maxaccept
79 - tune.maxpollevents
Willy Tarreau6a06a402007-07-15 20:15:28 +020080
81 * Debugging
82 - debug
83 - quiet
Willy Tarreau6a06a402007-07-15 20:15:28 +020084
85
861.1) Process management and security
87------------------------------------
88
89chroot <jail dir>
90 Changes current directory to <jail dir> and performs a chroot() there before
91 dropping privileges. This increases the security level in case an unknown
92 vulnerability would be exploited, since it would make it very hard for the
93 attacker to exploit the system. This only works when the process is started
94 with superuser privileges. It is important to ensure that <jail_dir> is both
95 empty and unwritable to anyone.
96
97daemon
98 Makes the process fork into background. This is the recommended mode of
99 operation. It is equivalent to the command line "-D" argument. It can be
100 disabled by the command line "-db" argument.
101
102gid <number>
103 Changes the process' group ID to <number>. It is recommended that the group
104 ID is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
105 be started with a user belonging to this group, or with superuser privileges.
106 See also "group" and "uid".
107
108group <group name>
109 Similar to "gid" but uses the GID of group name <group name> from /etc/group.
110 See also "gid" and "user".
111
112log <address> <facility> [max level]
113 Adds a global syslog server. Up to two global servers can be defined. They
114 will receive logs for startups and exits, as well as all logs from proxies
Robert Tsai81ae1952007-12-05 10:47:29 +0100115 configured with "log global".
116
117 <address> can be one of:
118
Willy Tarreau2769aa02007-12-27 18:26:09 +0100119 - An IPv4 address optionally followed by a colon and a UDP port. If
Robert Tsai81ae1952007-12-05 10:47:29 +0100120 no port is specified, 514 is used by default (the standard syslog
121 port).
122
123 - A filesystem path to a UNIX domain socket, keeping in mind
124 considerations for chroot (be sure the path is accessible inside
125 the chroot) and uid/gid (be sure the path is appropriately
126 writeable).
127
128 <facility> must be one of the 24 standard syslog facilities :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200129
130 kern user mail daemon auth syslog lpr news
131 uucp cron auth2 ftp ntp audit alert cron2
132 local0 local1 local2 local3 local4 local5 local6 local7
133
134 An optional level can be specified to filter outgoing messages. By default,
135 all messages are sent. If a level is specified, only messages with a severity
136 at least as important as this level will be sent. 8 levels are known :
137
138 emerg alert crit err warning notice info debug
139
140nbproc <number>
141 Creates <number> processes when going daemon. This requires the "daemon"
142 mode. By default, only one process is created, which is the recommended mode
143 of operation. For systems limited to small sets of file descriptors per
144 process, it may be needed to fork multiple daemons. USING MULTIPLE PROCESSES
145 IS HARDER TO DEBUG AND IS REALLY DISCOURAGED. See also "daemon".
146
147pidfile <pidfile>
148 Writes pids of all daemons into file <pidfile>. This option is equivalent to
149 the "-p" command line argument. The file must be accessible to the user
150 starting the process. See also "daemon".
151
Willy Tarreaufbee7132007-10-18 13:53:22 +0200152stats socket <path> [{uid | user} <uid>] [{gid | group} <gid>] [mode <mode>]
153 Creates a UNIX socket in stream mode at location <path>. Any previously
154 existing socket will be backed up then replaced. Connections to this socket
155 will get a CSV-formated output of the process statistics in response to the
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +0100156 "show stat" command followed by a line feed, more general process information
157 in response to the "show info" command followed by a line feed, and a
158 complete list of all existing sessions in response to the "show sess" command
159 followed by a line feed.
Willy Tarreaua8efd362008-01-03 10:19:15 +0100160
161 On platforms which support it, it is possible to restrict access to this
162 socket by specifying numerical IDs after "uid" and "gid", or valid user and
163 group names after the "user" and "group" keywords. It is also possible to
164 restrict permissions on the socket by passing an octal value after the "mode"
165 keyword (same syntax as chmod). Depending on the platform, the permissions on
166 the socket will be inherited from the directory which hosts it, or from the
167 user the process is started with.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200168
169stats timeout <timeout, in milliseconds>
170 The default timeout on the stats socket is set to 10 seconds. It is possible
171 to change this value with "stats timeout". The value must be passed in
Willy Tarreaubefdff12007-12-02 22:27:38 +0100172 milliseconds, or be suffixed by a time unit among { us, ms, s, m, h, d }.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200173
174stats maxconn <connections>
175 By default, the stats socket is limited to 10 concurrent connections. It is
176 possible to change this value with "stats maxconn".
177
Willy Tarreau6a06a402007-07-15 20:15:28 +0200178uid <number>
179 Changes the process' user ID to <number>. It is recommended that the user ID
180 is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
181 be started with superuser privileges in order to be able to switch to another
182 one. See also "gid" and "user".
183
184ulimit-n <number>
185 Sets the maximum number of per-process file-descriptors to <number>. By
186 default, it is automatically computed, so it is recommended not to use this
187 option.
188
189user <user name>
190 Similar to "uid" but uses the UID of user name <user name> from /etc/passwd.
191 See also "uid" and "group".
192
193
1941.2) Performance tuning
195-----------------------
196
197maxconn <number>
198 Sets the maximum per-process number of concurrent connections to <number>. It
199 is equivalent to the command-line argument "-n". Proxies will stop accepting
200 connections when this limit is reached. The "ulimit-n" parameter is
201 automatically adjusted according to this value. See also "ulimit-n".
202
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100203maxpipes <number>
204 Sets the maximum per-process number of pipes to <number>. Currently, pipes
205 are only used by kernel-based tcp splicing. Since a pipe contains two file
206 descriptors, the "ulimit-n" value will be increased accordingly. The default
207 value is maxconn/4, which seems to be more than enough for most heavy usages.
208 The splice code dynamically allocates and releases pipes, and can fall back
209 to standard copy, so setting this value too low may only impact performance.
210
Willy Tarreau6a06a402007-07-15 20:15:28 +0200211noepoll
212 Disables the use of the "epoll" event polling system on Linux. It is
213 equivalent to the command-line argument "-de". The next polling system
214 used will generally be "poll". See also "nosepoll", and "nopoll".
215
216nokqueue
217 Disables the use of the "kqueue" event polling system on BSD. It is
218 equivalent to the command-line argument "-dk". The next polling system
219 used will generally be "poll". See also "nopoll".
220
221nopoll
222 Disables the use of the "poll" event polling system. It is equivalent to the
223 command-line argument "-dp". The next polling system used will be "select".
Willy Tarreau0ba27502007-12-24 16:55:16 +0100224 It should never be needed to disable "poll" since it's available on all
Willy Tarreau6a06a402007-07-15 20:15:28 +0200225 platforms supported by HAProxy. See also "nosepoll", and "nopoll" and
226 "nokqueue".
227
228nosepoll
229 Disables the use of the "speculative epoll" event polling system on Linux. It
230 is equivalent to the command-line argument "-ds". The next polling system
231 used will generally be "epoll". See also "nosepoll", and "nopoll".
232
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100233nosplice
234 Disables the use of kernel tcp splicing between sockets on Linux. It is
235 equivalent to the command line argument "-dS". Data will then be copied
236 using conventional and more portable recv/send calls. Kernel tcp splicing is
237 limited to some very recent instances of kernel 2.6. Most verstions between
238 2.6.25 and 2.6.28 are buggy and will forward corrupted data, so they must not
239 be used. This option makes it easier to globally disable kernel splicing in
240 case of doubt. See also "option splice-auto", "option splice-request" and
241 "option splice-response".
242
Willy Tarreaufe255b72007-10-14 23:09:26 +0200243spread-checks <0..50, in percent>
244 Sometimes it is desirable to avoid sending health checks to servers at exact
245 intervals, for instance when many logical servers are located on the same
246 physical server. With the help of this parameter, it becomes possible to add
247 some randomness in the check interval between 0 and +/- 50%. A value between
248 2 and 5 seems to show good results. The default value remains at 0.
249
Willy Tarreaua0250ba2008-01-06 11:22:57 +0100250tune.maxaccept <number>
251 Sets the maximum number of consecutive accepts that a process may perform on
252 a single wake up. High values give higher priority to high connection rates,
253 while lower values give higher priority to already established connections.
254 This value is unlimited by default in single process mode. However, in
255 multi-process mode (nbproc > 1), it defaults to 8 so that when one process
256 wakes up, it does not take all incoming connections for itself and leaves a
257 part of them to other processes. Setting this value to zero or less disables
258 the limitation. It should normally not be needed to tweak this value.
259
260tune.maxpollevents <number>
261 Sets the maximum amount of events that can be processed at once in a call to
262 the polling system. The default value is adapted to the operating system. It
263 has been noticed that reducing it below 200 tends to slightly decrease
264 latency at the expense of network bandwidth, and increasing it above 200
265 tends to trade latency for slightly increased bandwidth.
266
Willy Tarreau6a06a402007-07-15 20:15:28 +0200267
2681.3) Debugging
269---------------
270
271debug
272 Enables debug mode which dumps to stdout all exchanges, and disables forking
273 into background. It is the equivalent of the command-line argument "-d". It
274 should never be used in a production configuration since it may prevent full
275 system startup.
276
277quiet
278 Do not display any message during startup. It is equivalent to the command-
279 line argument "-q".
280
Willy Tarreau6a06a402007-07-15 20:15:28 +0200281
2822) Proxies
283----------
Willy Tarreau0ba27502007-12-24 16:55:16 +0100284
Willy Tarreau6a06a402007-07-15 20:15:28 +0200285Proxy configuration can be located in a set of sections :
286 - defaults <name>
287 - frontend <name>
288 - backend <name>
289 - listen <name>
290
291A "defaults" section sets default parameters for all other sections following
292its declaration. Those default parameters are reset by the next "defaults"
293section. See below for the list of parameters which can be set in a "defaults"
Willy Tarreau0ba27502007-12-24 16:55:16 +0100294section. The name is optional but its use is encouraged for better readability.
Willy Tarreau6a06a402007-07-15 20:15:28 +0200295
296A "frontend" section describes a set of listening sockets accepting client
297connections.
298
299A "backend" section describes a set of servers to which the proxy will connect
300to forward incoming connections.
301
302A "listen" section defines a complete proxy with its frontend and backend
303parts combined in one section. It is generally useful for TCP-only traffic.
304
Willy Tarreau0ba27502007-12-24 16:55:16 +0100305All proxy names must be formed from upper and lower case letters, digits,
306'-' (dash), '_' (underscore) , '.' (dot) and ':' (colon). ACL names are
307case-sensitive, which means that "www" and "WWW" are two different proxies.
308
309Historically, all proxy names could overlap, it just caused troubles in the
310logs. Since the introduction of content switching, it is mandatory that two
311proxies with overlapping capabilities (frontend/backend) have different names.
312However, it is still permitted that a frontend and a backend share the same
313name, as this configuration seems to be commonly encountered.
314
315Right now, two major proxy modes are supported : "tcp", also known as layer 4,
316and "http", also known as layer 7. In layer 4 mode, HAProxy simply forwards
317bidirectionnal traffic between two sides. In layer 7 mode, HAProxy analyzes the
318protocol, and can interact with it by allowing, blocking, switching, adding,
319modifying, or removing arbitrary contents in requests or responses, based on
320arbitrary criteria.
321
322
3232.1) Quick reminder about HTTP
324------------------------------
325
326When a proxy is running in HTTP mode, both the request and the response are
327fully analyzed and indexed, thus it becomes possible to build matching criteria
328on almost anything found in the contents.
329
330However, it is important to understand how HTTP requests and responses are
331formed, and how HAProxy decomposes them. It will then become easier to write
332correct rules and to debug existing configurations.
333
334
3352.1.1) The HTTP transaction model
336---------------------------------
337
338The HTTP protocol is transaction-driven. This means that each request will lead
339to one and only one response. Traditionnally, a TCP connection is established
340from the client to the server, a request is sent by the client on the
341connection, the server responds and the connection is closed. A new request
342will involve a new connection :
343
344 [CON1] [REQ1] ... [RESP1] [CLO1] [CON2] [REQ2] ... [RESP2] [CLO2] ...
345
346In this mode, called the "HTTP close" mode, there are as many connection
347establishments as there are HTTP transactions. Since the connection is closed
348by the server after the response, the client does not need to know the content
349length.
350
351Due to the transactional nature of the protocol, it was possible to improve it
352to avoid closing a connection between two subsequent transactions. In this mode
353however, it is mandatory that the server indicates the content length for each
354response so that the client does not wait indefinitely. For this, a special
355header is used: "Content-length". This mode is called the "keep-alive" mode :
356
357 [CON] [REQ1] ... [RESP1] [REQ2] ... [RESP2] [CLO] ...
358
359Its advantages are a reduced latency between transactions, and less processing
360power required on the server side. It is generally better than the close mode,
361but not always because the clients often limit their concurrent connections to
362a smaller value. HAProxy currently does not support the HTTP keep-alive mode,
363but knows how to transform it to the close mode.
364
365A last improvement in the communications is the pipelining mode. It still uses
366keep-alive, but the client does not wait for the first response to send the
367second request. This is useful for fetching large number of images composing a
368page :
369
370 [CON] [REQ1] [REQ2] ... [RESP1] [RESP2] [CLO] ...
371
372This can obviously have a tremendous benefit on performance because the network
373latency is eliminated between subsequent requests. Many HTTP agents do not
374correctly support pipelining since there is no way to associate a response with
375the corresponding request in HTTP. For this reason, it is mandatory for the
376server to reply in the exact same order as the requests were received.
377
378Right now, HAProxy only supports the first mode (HTTP close) if it needs to
379process the request. This means that for each request, there will be one TCP
380connection. If keep-alive or pipelining are required, HAProxy will still
381support them, but will only see the first request and the first response of
382each transaction. While this is generally problematic with regards to logs,
383content switching or filtering, it most often causes no problem for persistence
384with cookie insertion.
385
386
3872.1.2) HTTP request
388-------------------
389
390First, let's consider this HTTP request :
391
392 Line Contents
393 number
394 1 GET /serv/login.php?lang=en&profile=2 HTTP/1.1
395 2 Host: www.mydomain.com
396 3 User-agent: my small browser
397 4 Accept: image/jpeg, image/gif
398 5 Accept: image/png
399
400
4012.1.2.1) The Request line
402-------------------------
403
404Line 1 is the "request line". It is always composed of 3 fields :
405
406 - a METHOD : GET
407 - a URI : /serv/login.php?lang=en&profile=2
408 - a version tag : HTTP/1.1
409
410All of them are delimited by what the standard calls LWS (linear white spaces),
411which are commonly spaces, but can also be tabs or line feeds/carriage returns
412followed by spaces/tabs. The method itself cannot contain any colon (':') and
413is limited to alphabetic letters. All those various combinations make it
414desirable that HAProxy performs the splitting itself rather than leaving it to
415the user to write a complex or inaccurate regular expression.
416
417The URI itself can have several forms :
418
419 - A "relative URI" :
420
421 /serv/login.php?lang=en&profile=2
422
423 It is a complete URL without the host part. This is generally what is
424 received by servers, reverse proxies and transparent proxies.
425
426 - An "absolute URI", also called a "URL" :
427
428 http://192.168.0.12:8080/serv/login.php?lang=en&profile=2
429
430 It is composed of a "scheme" (the protocol name followed by '://'), a host
431 name or address, optionally a colon (':') followed by a port number, then
432 a relative URI beginning at the first slash ('/') after the address part.
433 This is generally what proxies receive, but a server supporting HTTP/1.1
434 must accept this form too.
435
436 - a star ('*') : this form is only accepted in association with the OPTIONS
437 method and is not relayable. It is used to inquiry a next hop's
438 capabilities.
439
440 - an address:port combination : 192.168.0.12:80
441 This is used with the CONNECT method, which is used to establish TCP
442 tunnels through HTTP proxies, generally for HTTPS, but sometimes for
443 other protocols too.
444
445In a relative URI, two sub-parts are identified. The part before the question
446mark is called the "path". It is typically the relative path to static objects
447on the server. The part after the question mark is called the "query string".
448It is mostly used with GET requests sent to dynamic scripts and is very
449specific to the language, framework or application in use.
450
451
4522.1.2.2) The request headers
453----------------------------
454
455The headers start at the second line. They are composed of a name at the
456beginning of the line, immediately followed by a colon (':'). Traditionally,
457an LWS is added after the colon but that's not required. Then come the values.
458Multiple identical headers may be folded into one single line, delimiting the
459values with commas, provided that their order is respected. This is commonly
Willy Tarreau198a7442008-01-17 12:05:32 +0100460encountered in the "Cookie:" field. A header may span over multiple lines if
Willy Tarreau0ba27502007-12-24 16:55:16 +0100461the subsequent lines begin with an LWS. In the example in 2.1.2, lines 4 and 5
Willy Tarreau198a7442008-01-17 12:05:32 +0100462define a total of 3 values for the "Accept:" header.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100463
464Contrary to a common mis-conception, header names are not case-sensitive, and
465their values are not either if they refer to other header names (such as the
Willy Tarreau198a7442008-01-17 12:05:32 +0100466"Connection:" header).
Willy Tarreau0ba27502007-12-24 16:55:16 +0100467
468The end of the headers is indicated by the first empty line. People often say
469that it's a double line feed, which is not exact, even if a double line feed
470is one valid form of empty line.
471
472Fortunately, HAProxy takes care of all these complex combinations when indexing
473headers, checking values and counting them, so there is no reason to worry
Willy Tarreaud2a4aa22008-01-31 15:28:22 +0100474about the way they could be written, but it is important not to accuse an
Willy Tarreau0ba27502007-12-24 16:55:16 +0100475application of being buggy if it does unusual, valid things.
476
477Important note:
478 As suggested by RFC2616, HAProxy normalizes headers by replacing line breaks
479 in the middle of headers by LWS in order to join multi-line headers. This
480 is necessary for proper analysis and helps less capable HTTP parsers to work
481 correctly and not to be fooled by such complex constructs.
482
483
4842.1.3) HTTP response
485--------------------
486
487An HTTP response looks very much like an HTTP request. Both are called HTTP
488messages. Let's consider this HTTP response :
489
490 Line Contents
491 number
492 1 HTTP/1.1 200 OK
493 2 Content-length: 350
494 3 Content-Type: text/html
495
496
4972.1.3.1) The Response line
498--------------------------
499
500Line 1 is the "response line". It is always composed of 3 fields :
501
502 - a version tag : HTTP/1.1
503 - a status code : 200
504 - a reason : OK
505
506The status code is always 3-digit. The first digit indicates a general status :
507 - 2xx = OK, content is following (eg: 200, 206)
508 - 3xx = OK, no content following (eg: 302, 304)
509 - 4xx = error caused by the client (eg: 401, 403, 404)
510 - 5xx = error caused by the server (eg: 500, 502, 503)
511
512Please refer to RFC2616 for the detailed meaning of all such codes. The
513"reason" field is just a hint, but is not parsed by clients. Anything can be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +0100514found there, but it's a common practice to respect the well-established
Willy Tarreau0ba27502007-12-24 16:55:16 +0100515messages. It can be composed of one or multiple words, such as "OK", "Found",
516or "Authentication Required".
517
Willy Tarreau3c3c48d2009-02-22 11:12:23 +0100518Haproxy may emit the following status codes by itself :
519
520 Code When / reason
521 200 access to stats page, and when replying to monitoring requests
522 301 when performing a redirection, depending on the configured code
523 302 when performing a redirection, depending on the configured code
524 303 when performing a redirection, depending on the configured code
525 400 for an invalid or too large request
526 401 when an authentication is required to perform the action (when
527 accessing the stats page)
528 403 when a request is forbidden by a "block" ACL or "reqdeny" filter
529 408 when the request timeout strikes before the request is complete
530 500 when haproxy encounters an unrecoverable internal error, such as a
531 memory allocation failure, which should never happen
532 502 when the server returns an empty, invalid or incomplete response, or
533 when an "rspdeny" filter blocks the response.
534 503 when no server was available to handle the request, or in response to
535 monitoring requests which match the "monitor fail" condition
536 504 when the response timeout strikes before the server responds
537
538The error 4xx and 5xx codes above may be customized (see "errorloc" in section
5392.2).
540
Willy Tarreau0ba27502007-12-24 16:55:16 +0100541
5422.1.3.2) The response headers
543-----------------------------
544
545Response headers work exactly like request headers, and as such, HAProxy uses
546the same parsing function for both. Please refer to paragraph 2.1.2.2 for more
547details.
548
549
5502.2) Proxy keywords matrix
Willy Tarreaucc6c8912009-02-22 10:53:55 +0100551--------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +0100552
Willy Tarreau6a06a402007-07-15 20:15:28 +0200553The following list of keywords is supported. Most of them may only be used in a
Willy Tarreau0ba27502007-12-24 16:55:16 +0100554limited set of section types. Some of them are marked as "deprecated" because
Willy Tarreaud2a4aa22008-01-31 15:28:22 +0100555they are inherited from an old syntax which may be confusing or functionally
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100556limited, and there are new recommended keywords to replace them. Keywords
557listed with [no] can be optionally inverted using the "no" prefix, ex. "no
558option contstats". This makes sense when the option has been enabled by default
559and must be disabled for a specific instance.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100560
Willy Tarreau6a06a402007-07-15 20:15:28 +0200561
562keyword defaults frontend listen backend
563----------------------+----------+----------+---------+---------
564acl - X X X
565appsession - - X X
Willy Tarreauc73ce2b2008-01-06 10:55:10 +0100566backlog X X X -
Willy Tarreau0ba27502007-12-24 16:55:16 +0100567balance X - X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200568bind - X X -
Willy Tarreau0b9c02c2009-02-04 22:05:05 +0100569bind-process X X X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200570block - X X X
Willy Tarreau0ba27502007-12-24 16:55:16 +0100571capture cookie - X X -
572capture request header - X X -
573capture response header - X X -
Willy Tarreaue219db72007-12-03 01:30:13 +0100574clitimeout X X X - (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +0100575contimeout X - X X (deprecated)
Willy Tarreau6a06a402007-07-15 20:15:28 +0200576cookie X - X X
577default_backend - X X -
Willy Tarreau0ba27502007-12-24 16:55:16 +0100578disabled X X X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200579dispatch - - X X
Willy Tarreau0ba27502007-12-24 16:55:16 +0100580enabled X X X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200581errorfile X X X X
582errorloc X X X X
583errorloc302 X X X X
584errorloc303 X X X X
585fullconn X - X X
586grace - X X X
Willy Tarreaudbc36f62007-11-30 12:29:11 +0100587http-check disable-on-404 X - X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200588log X X X X
589maxconn X X X -
590mode X X X X
Willy Tarreauc7246fc2007-12-02 17:31:20 +0100591monitor fail - X X -
Willy Tarreau6a06a402007-07-15 20:15:28 +0200592monitor-net X X X -
593monitor-uri X X X -
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100594[no] option abortonclose X - X X
595[no] option allbackups X - X X
596[no] option checkcache X - X X
597[no] option clitcpka X X X -
598[no] option contstats X X X -
599[no] option dontlognull X X X -
600[no] option forceclose X - X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200601option forwardfor X X X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100602[no] option http_proxy X X X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200603option httpchk X - X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100604[no] option httpclose X X X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200605option httplog X X X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100606[no] option logasap X X X -
607[no] option nolinger X X X X
608[no] option persist X - X X
609[no] option redispatch X - X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200610option smtpchk X - X X
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100611[no] option splice-auto X X X X
612[no] option splice-request X X X X
613[no] option splice-response X X X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100614[no] option srvtcpka X - X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200615option ssl-hello-chk X - X X
616option tcpka X X X X
617option tcplog X X X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100618[no] option tcpsplice X X X X
Willy Tarreau4b1f8592008-12-23 23:13:55 +0100619[no] option transparent X - X X
Willy Tarreaub463dfb2008-06-07 23:08:56 +0200620redirect - X X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100621redisp X - X X (deprecated)
622redispatch X - X X (deprecated)
Willy Tarreau6a06a402007-07-15 20:15:28 +0200623reqadd - X X X
624reqallow - X X X
625reqdel - X X X
626reqdeny - X X X
627reqiallow - X X X
628reqidel - X X X
629reqideny - X X X
630reqipass - X X X
631reqirep - X X X
632reqisetbe - X X X
633reqitarpit - X X X
634reqpass - X X X
635reqrep - X X X
636reqsetbe - X X X
637reqtarpit - X X X
638retries X - X X
639rspadd - X X X
640rspdel - X X X
641rspdeny - X X X
642rspidel - X X X
643rspideny - X X X
644rspirep - X X X
645rsprep - X X X
646server - - X X
647source X - X X
Willy Tarreaue219db72007-12-03 01:30:13 +0100648srvtimeout X - X X (deprecated)
Willy Tarreau24e779b2007-07-24 23:43:37 +0200649stats auth X - X X
650stats enable X - X X
651stats realm X - X X
Willy Tarreaubbd42122007-07-25 07:26:38 +0200652stats refresh X - X X
Willy Tarreau24e779b2007-07-24 23:43:37 +0200653stats scope X - X X
654stats uri X - X X
Krzysztof Oledzkid9db9272007-10-15 10:05:11 +0200655stats hide-version X - X X
Willy Tarreau62644772008-07-16 18:36:06 +0200656tcp-request content accept - X X -
657tcp-request content reject - X X -
658tcp-request inspect-delay - X X -
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +0100659timeout check X - X X
Willy Tarreaue219db72007-12-03 01:30:13 +0100660timeout client X X X -
661timeout clitimeout X X X - (deprecated)
662timeout connect X - X X
663timeout contimeout X - X X (deprecated)
Willy Tarreau844e3c52008-01-11 16:28:18 +0100664timeout http-request X X X -
Willy Tarreaue219db72007-12-03 01:30:13 +0100665timeout queue X - X X
666timeout server X - X X
667timeout srvtimeout X - X X (deprecated)
Willy Tarreau51c9bde2008-01-06 13:40:03 +0100668timeout tarpit X X X X
Willy Tarreau4b1f8592008-12-23 23:13:55 +0100669transparent X - X X (deprecated)
Willy Tarreau6a06a402007-07-15 20:15:28 +0200670use_backend - X X -
Willy Tarreau6a06a402007-07-15 20:15:28 +0200671----------------------+----------+----------+---------+---------
672keyword defaults frontend listen backend
673
Willy Tarreau0ba27502007-12-24 16:55:16 +0100674
6752.2.1) Alphabetically sorted keywords reference
676-----------------------------------------------
677
678This section provides a description of each keyword and its usage.
679
680
681acl <aclname> <criterion> [flags] [operator] <value> ...
682 Declare or complete an access list.
683 May be used in sections : defaults | frontend | listen | backend
684 no | yes | yes | yes
685 Example:
686 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
687 acl invalid_src src_port 0:1023
688 acl local_dst hdr(host) -i localhost
689
690 See section 2.3 about ACL usage.
691
692
693appsession <cookie> len <length> timeout <holdtime>
694 Define session stickiness on an existing application cookie.
695 May be used in sections : defaults | frontend | listen | backend
696 no | no | yes | yes
697 Arguments :
698 <cookie> this is the name of the cookie used by the application and which
699 HAProxy will have to learn for each new session.
700
701 <length> this is the number of characters that will be memorized and
702 checked in each cookie value.
703
704 <holdtime> this is the time after which the cookie will be removed from
705 memory if unused. If no unit is specified, this time is in
706 milliseconds.
707
708 When an application cookie is defined in a backend, HAProxy will check when
709 the server sets such a cookie, and will store its value in a table, and
710 associate it with the server's identifier. Up to <length> characters from
711 the value will be retained. On each connection, haproxy will look for this
712 cookie both in the "Cookie:" headers, and as a URL parameter in the query
713 string. If a known value is found, the client will be directed to the server
714 associated with this value. Otherwise, the load balancing algorithm is
715 applied. Cookies are automatically removed from memory when they have been
716 unused for a duration longer than <holdtime>.
717
718 The definition of an application cookie is limited to one per backend.
719
720 Example :
721 appsession JSESSIONID len 52 timeout 3h
722
723 See also : "cookie", "capture cookie" and "balance".
724
725
Willy Tarreauc73ce2b2008-01-06 10:55:10 +0100726backlog <conns>
727 Give hints to the system about the approximate listen backlog desired size
728 May be used in sections : defaults | frontend | listen | backend
729 yes | yes | yes | no
730 Arguments :
731 <conns> is the number of pending connections. Depending on the operating
732 system, it may represent the number of already acknowledged
733 connections, of non-acknowledged ones, or both.
734
735 In order to protect against SYN flood attacks, one solution is to increase
736 the system's SYN backlog size. Depending on the system, sometimes it is just
737 tunable via a system parameter, sometimes it is not adjustable at all, and
738 sometimes the system relies on hints given by the application at the time of
739 the listen() syscall. By default, HAProxy passes the frontend's maxconn value
740 to the listen() syscall. On systems which can make use of this value, it can
741 sometimes be useful to be able to specify a different value, hence this
742 backlog parameter.
743
744 On Linux 2.4, the parameter is ignored by the system. On Linux 2.6, it is
745 used as a hint and the system accepts up to the smallest greater power of
746 two, and never more than some limits (usually 32768).
747
748 See also : "maxconn" and the target operating system's tuning guide.
749
750
Willy Tarreau0ba27502007-12-24 16:55:16 +0100751balance <algorithm> [ <arguments> ]
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +0200752balance url_param <param> [check_post [<max_wait>]]
Willy Tarreau0ba27502007-12-24 16:55:16 +0100753 Define the load balancing algorithm to be used in a backend.
754 May be used in sections : defaults | frontend | listen | backend
755 yes | no | yes | yes
756 Arguments :
757 <algorithm> is the algorithm used to select a server when doing load
758 balancing. This only applies when no persistence information
759 is available, or when a connection is redispatched to another
760 server. <algorithm> may be one of the following :
761
762 roundrobin Each server is used in turns, according to their weights.
763 This is the smoothest and fairest algorithm when the server's
764 processing time remains equally distributed. This algorithm
765 is dynamic, which means that server weights may be adjusted
766 on the fly for slow starts for instance.
767
Willy Tarreau2d2a7f82008-03-17 12:07:56 +0100768 leastconn The server with the lowest number of connections receives the
769 connection. Round-robin is performed within groups of servers
770 of the same load to ensure that all servers will be used. Use
771 of this algorithm is recommended where very long sessions are
772 expected, such as LDAP, SQL, TSE, etc... but is not very well
773 suited for protocols using short sessions such as HTTP. This
774 algorithm is dynamic, which means that server weights may be
775 adjusted on the fly for slow starts for instance.
776
Willy Tarreau0ba27502007-12-24 16:55:16 +0100777 source The source IP address is hashed and divided by the total
778 weight of the running servers to designate which server will
779 receive the request. This ensures that the same client IP
780 address will always reach the same server as long as no
781 server goes down or up. If the hash result changes due to the
782 number of running servers changing, many clients will be
783 directed to a different server. This algorithm is generally
784 used in TCP mode where no cookie may be inserted. It may also
785 be used on the Internet to provide a best-effort stickyness
786 to clients which refuse session cookies. This algorithm is
787 static, which means that changing a server's weight on the
788 fly will have no effect.
789
790 uri The left part of the URI (before the question mark) is hashed
791 and divided by the total weight of the running servers. The
792 result designates which server will receive the request. This
793 ensures that a same URI will always be directed to the same
794 server as long as no server goes up or down. This is used
795 with proxy caches and anti-virus proxies in order to maximize
796 the cache hit rate. Note that this algorithm may only be used
797 in an HTTP backend. This algorithm is static, which means
798 that changing a server's weight on the fly will have no
799 effect.
800
Marek Majkowski9c30fc12008-04-27 23:25:55 +0200801 This algorithm support two optional parameters "len" and
802 "depth", both followed by a positive integer number. These
803 options may be helpful when it is needed to balance servers
804 based on the beginning of the URI only. The "len" parameter
805 indicates that the algorithm should only consider that many
806 characters at the beginning of the URI to compute the hash.
807 Note that having "len" set to 1 rarely makes sense since most
808 URIs start with a leading "/".
809
810 The "depth" parameter indicates the maximum directory depth
811 to be used to compute the hash. One level is counted for each
812 slash in the request. If both parameters are specified, the
813 evaluation stops when either is reached.
814
Willy Tarreau0ba27502007-12-24 16:55:16 +0100815 url_param The URL parameter specified in argument will be looked up in
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +0200816 the query string of each HTTP GET request.
817
818 If the modifier "check_post" is used, then an HTTP POST
819 request entity will be searched for the parameter argument,
820 when the question mark indicating a query string ('?') is not
821 present in the URL. Optionally, specify a number of octets to
822 wait for before attempting to search the message body. If the
823 entity can not be searched, then round robin is used for each
824 request. For instance, if your clients always send the LB
825 parameter in the first 128 bytes, then specify that. The
826 default is 48. The entity data will not be scanned until the
827 required number of octets have arrived at the gateway, this
828 is the minimum of: (default/max_wait, Content-Length or first
829 chunk length). If Content-Length is missing or zero, it does
830 not need to wait for more data than the client promised to
831 send. When Content-Length is present and larger than
832 <max_wait>, then waiting is limited to <max_wait> and it is
833 assumed that this will be enough data to search for the
834 presence of the parameter. In the unlikely event that
835 Transfer-Encoding: chunked is used, only the first chunk is
836 scanned. Parameter values separated by a chunk boundary, may
837 be randomly balanced if at all.
838
839 If the parameter is found followed by an equal sign ('=') and
840 a value, then the value is hashed and divided by the total
841 weight of the running servers. The result designates which
842 server will receive the request.
843
844 This is used to track user identifiers in requests and ensure
845 that a same user ID will always be sent to the same server as
846 long as no server goes up or down. If no value is found or if
847 the parameter is not found, then a round robin algorithm is
848 applied. Note that this algorithm may only be used in an HTTP
849 backend. This algorithm is static, which means that changing a
850 server's weight on the fly will have no effect.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100851
852 <arguments> is an optional list of arguments which may be needed by some
Marek Majkowski9c30fc12008-04-27 23:25:55 +0200853 algorithms. Right now, only "url_param" and "uri" support an
854 optional argument.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +0200855
Marek Majkowski9c30fc12008-04-27 23:25:55 +0200856 balance uri [len <len>] [depth <depth>]
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +0200857 balance url_param <param> [check_post [<max_wait>]]
Willy Tarreau0ba27502007-12-24 16:55:16 +0100858
859 The definition of the load balancing algorithm is mandatory for a backend
860 and limited to one per backend.
861
862 Examples :
863 balance roundrobin
864 balance url_param userid
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +0200865 balance url_param session_id check_post 64
866
867 Note: the following caveats and limitations on using the "check_post"
868 extension with "url_param" must be considered :
869
870 - all POST requests are eligable for consideration, because there is no way
871 to determine if the parameters will be found in the body or entity which
872 may contain binary data. Therefore another method may be required to
873 restrict consideration of POST requests that have no URL parameters in
874 the body. (see acl reqideny http_end)
875
876 - using a <max_wait> value larger than the request buffer size does not
877 make sense and is useless. The buffer size is set at build time, and
878 defaults to 16 kB.
879
880 - Content-Encoding is not supported, the parameter search will probably
881 fail; and load balancing will fall back to Round Robin.
882
883 - Expect: 100-continue is not supported, load balancing will fall back to
884 Round Robin.
885
886 - Transfer-Encoding (RFC2616 3.6.1) is only supported in the first chunk.
887 If the entire parameter value is not present in the first chunk, the
888 selection of server is undefined (actually, defined by how little
889 actually appeared in the first chunk).
890
891 - This feature does not support generation of a 100, 411 or 501 response.
892
893 - In some cases, requesting "check_post" MAY attempt to scan the entire
894 contents of a message body. Scaning normally terminates when linear
895 white space or control characters are found, indicating the end of what
896 might be a URL parameter list. This is probably not a concern with SGML
897 type message bodies.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100898
899 See also : "dispatch", "cookie", "appsession", "transparent" and "http_proxy".
900
901
902bind [<address>]:<port> [, ...]
Willy Tarreau5e6e2042009-02-04 17:19:29 +0100903bind [<address>]:<port> [, ...] interface <interface>
Willy Tarreaub1e52e82008-01-13 14:49:51 +0100904bind [<address>]:<port> [, ...] transparent
Willy Tarreau0ba27502007-12-24 16:55:16 +0100905 Define one or several listening addresses and/or ports in a frontend.
906 May be used in sections : defaults | frontend | listen | backend
907 no | yes | yes | no
908 Arguments :
Willy Tarreaub1e52e82008-01-13 14:49:51 +0100909 <address> is optional and can be a host name, an IPv4 address, an IPv6
910 address, or '*'. It designates the address the frontend will
911 listen on. If unset, all IPv4 addresses of the system will be
912 listened on. The same will apply for '*' or the system's
913 special address "0.0.0.0".
914
915 <port> is the TCP port number the proxy will listen on. The port is
916 mandatory. Note that in the case of an IPv6 address, the port
917 is always the number after the last colon (':').
Willy Tarreau0ba27502007-12-24 16:55:16 +0100918
Willy Tarreau5e6e2042009-02-04 17:19:29 +0100919 <interface> is an optional physical interface name. This is currently
920 only supported on Linux. The interface must be a physical
921 interface, not an aliased interface. When specified, all
922 addresses on the same line will only be accepted if the
923 incoming packet physically come through the designated
924 interface. It is also possible to bind multiple frontends to
925 the same address if they are bound to different interfaces.
926 Note that binding to a physical interface requires root
927 privileges.
928
Willy Tarreaub1e52e82008-01-13 14:49:51 +0100929 transparent is an optional keyword which is supported only on certain
930 Linux kernels. It indicates that the addresses will be bound
931 even if they do not belong to the local machine. Any packet
932 targetting any of these addresses will be caught just as if
933 the address was locally configured. This normally requires
934 that IP forwarding is enabled. Caution! do not use this with
935 the default address '*', as it would redirect any traffic for
936 the specified port. This keyword is available only when
937 HAProxy is built with USE_LINUX_TPROXY=1.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100938
939 It is possible to specify a list of address:port combinations delimited by
940 commas. The frontend will then listen on all of these addresses. There is no
941 fixed limit to the number of addresses and ports which can be listened on in
942 a frontend, as well as there is no limit to the number of "bind" statements
943 in a frontend.
944
945 Example :
946 listen http_proxy
947 bind :80,:443
948 bind 10.0.0.1:10080,10.0.0.1:10443
949
950 See also : "source".
951
952
Willy Tarreau0b9c02c2009-02-04 22:05:05 +0100953bind-process [ all | odd | even | <number 1-32> ] ...
954 Limit visibility of an instance to a certain set of processes numbers.
955 May be used in sections : defaults | frontend | listen | backend
956 yes | yes | yes | yes
957 Arguments :
958 all All process will see this instance. This is the default. It
959 may be used to override a default value.
960
961 odd This instance will be enabled on processes 1,3,5,...31. This
962 option may be combined with other numbers.
963
964 even This instance will be enabled on processes 2,4,6,...32. This
965 option may be combined with other numbers. Do not use it
966 with less than 2 processes otherwise some instances might be
967 missing from all processes.
968
969 number The instance will be enabled on this process number, between
970 1 and 32. You must be careful not to reference a process
971 number greater than the configured global.nbproc, otherwise
972 some instances might be missing from all processes.
973
974 This keyword limits binding of certain instances to certain processes. This
975 is useful in order not to have too many processes listening to the same
976 ports. For instance, on a dual-core machine, it might make sense to set
977 'nbproc 2' in the global section, then distributes the listeners among 'odd'
978 and 'even' instances.
979
980 At the moment, it is not possible to reference more than 32 processes using
981 this keyword, but this should be more than enough for most setups. Please
982 note that 'all' really means all processes and is not limited to the first
983 32.
984
985 If some backends are referenced by frontends bound to other processes, the
986 backend automatically inherits the frontend's processes.
987
988 Example :
989 listen app_ip1
990 bind 10.0.0.1:80
991 bind_process odd
992
993 listen app_ip2
994 bind 10.0.0.2:80
995 bind_process even
996
997 listen management
998 bind 10.0.0.3:80
999 bind_process 1 2 3 4
1000
1001 See also : "nbproc" in global section.
1002
1003
Willy Tarreau0ba27502007-12-24 16:55:16 +01001004block { if | unless } <condition>
1005 Block a layer 7 request if/unless a condition is matched
1006 May be used in sections : defaults | frontend | listen | backend
1007 no | yes | yes | yes
1008
1009 The HTTP request will be blocked very early in the layer 7 processing
1010 if/unless <condition> is matched. A 403 error will be returned if the request
1011 is blocked. The condition has to reference ACLs (see section 2.3). This is
1012 typically used to deny access to certain sensible resources if some
1013 conditions are met or not met. There is no fixed limit to the number of
1014 "block" statements per instance.
1015
1016 Example:
1017 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
1018 acl invalid_src src_port 0:1023
1019 acl local_dst hdr(host) -i localhost
1020 block if invalid_src || local_dst
1021
1022 See section 2.3 about ACL usage.
1023
1024
1025capture cookie <name> len <length>
1026 Capture and log a cookie in the request and in the response.
1027 May be used in sections : defaults | frontend | listen | backend
1028 no | yes | yes | no
1029 Arguments :
1030 <name> is the beginning of the name of the cookie to capture. In order
1031 to match the exact name, simply suffix the name with an equal
1032 sign ('='). The full name will appear in the logs, which is
1033 useful with application servers which adjust both the cookie name
1034 and value (eg: ASPSESSIONXXXXX).
1035
1036 <length> is the maximum number of characters to report in the logs, which
1037 include the cookie name, the equal sign and the value, all in the
1038 standard "name=value" form. The string will be truncated on the
1039 right if it exceeds <length>.
1040
1041 Only the first cookie is captured. Both the "cookie" request headers and the
1042 "set-cookie" response headers are monitored. This is particularly useful to
1043 check for application bugs causing session crossing or stealing between
1044 users, because generally the user's cookies can only change on a login page.
1045
1046 When the cookie was not presented by the client, the associated log column
1047 will report "-". When a request does not cause a cookie to be assigned by the
1048 server, a "-" is reported in the response column.
1049
1050 The capture is performed in the frontend only because it is necessary that
1051 the log format does not change for a given frontend depending on the
1052 backends. This may change in the future. Note that there can be only one
1053 "capture cookie" statement in a frontend. The maximum capture length is
1054 configured in the souces by default to 64 characters. It is not possible to
1055 specify a capture in a "defaults" section.
1056
1057 Example:
1058 capture cookie ASPSESSION len 32
1059
1060 See also : "capture request header", "capture response header" as well as
Willy Tarreauced27012008-01-17 20:35:34 +01001061 section 2.6 about logging.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001062
1063
1064capture request header <name> len <length>
1065 Capture and log the first occurrence of the specified request header.
1066 May be used in sections : defaults | frontend | listen | backend
1067 no | yes | yes | no
1068 Arguments :
1069 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001070 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +01001071 appear in the requests, with the first letter of each word in
1072 upper case. The header name will not appear in the logs, only the
1073 value is reported, but the position in the logs is respected.
1074
1075 <length> is the maximum number of characters to extract from the value and
1076 report in the logs. The string will be truncated on the right if
1077 it exceeds <length>.
1078
Willy Tarreaucc6c8912009-02-22 10:53:55 +01001079 Only the first value of the last occurrence of the header is captured. The
Willy Tarreau0ba27502007-12-24 16:55:16 +01001080 value will be added to the logs between braces ('{}'). If multiple headers
1081 are captured, they will be delimited by a vertical bar ('|') and will appear
Willy Tarreaucc6c8912009-02-22 10:53:55 +01001082 in the same order they were declared in the configuration. Non-existent
1083 headers will be logged just as an empty string. Common uses for request
1084 header captures include the "Host" field in virtual hosting environments, the
1085 "Content-length" when uploads are supported, "User-agent" to quickly
1086 differenciate between real users and robots, and "X-Forwarded-For" in proxied
1087 environments to find where the request came from.
1088
1089 Note that when capturing headers such as "User-agent", some spaces may be
1090 logged, making the log analysis more difficult. Thus be careful about what
1091 you log if you know your log parser is not smart enough to rely on the
1092 braces.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001093
1094 There is no limit to the number of captured request headers, but each capture
1095 is limited to 64 characters. In order to keep log format consistent for a
1096 same frontend, header captures can only be declared in a frontend. It is not
1097 possible to specify a capture in a "defaults" section.
1098
1099 Example:
1100 capture request header Host len 15
1101 capture request header X-Forwarded-For len 15
1102 capture request header Referrer len 15
1103
Willy Tarreauced27012008-01-17 20:35:34 +01001104 See also : "capture cookie", "capture response header" as well as section 2.6
Willy Tarreau0ba27502007-12-24 16:55:16 +01001105 about logging.
1106
1107
1108capture response header <name> len <length>
1109 Capture and log the first occurrence of the specified response header.
1110 May be used in sections : defaults | frontend | listen | backend
1111 no | yes | yes | no
1112 Arguments :
1113 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001114 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +01001115 appear in the response, with the first letter of each word in
1116 upper case. The header name will not appear in the logs, only the
1117 value is reported, but the position in the logs is respected.
1118
1119 <length> is the maximum number of characters to extract from the value and
1120 report in the logs. The string will be truncated on the right if
1121 it exceeds <length>.
1122
Willy Tarreaucc6c8912009-02-22 10:53:55 +01001123 Only the first value of the last occurrence of the header is captured. The
Willy Tarreau0ba27502007-12-24 16:55:16 +01001124 result will be added to the logs between braces ('{}') after the captured
1125 request headers. If multiple headers are captured, they will be delimited by
1126 a vertical bar ('|') and will appear in the same order they were declared in
Willy Tarreaucc6c8912009-02-22 10:53:55 +01001127 the configuration. Non-existent headers will be logged just as an empty
1128 string. Common uses for response header captures include the "Content-length"
1129 header which indicates how many bytes are expected to be returned, the
1130 "Location" header to track redirections.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001131
1132 There is no limit to the number of captured response headers, but each
1133 capture is limited to 64 characters. In order to keep log format consistent
1134 for a same frontend, header captures can only be declared in a frontend. It
1135 is not possible to specify a capture in a "defaults" section.
1136
1137 Example:
1138 capture response header Content-length len 9
1139 capture response header Location len 15
1140
Willy Tarreauced27012008-01-17 20:35:34 +01001141 See also : "capture cookie", "capture request header" as well as section 2.6
Willy Tarreau0ba27502007-12-24 16:55:16 +01001142 about logging.
1143
1144
1145clitimeout <timeout>
1146 Set the maximum inactivity time on the client side.
1147 May be used in sections : defaults | frontend | listen | backend
1148 yes | yes | yes | no
1149 Arguments :
1150 <timeout> is the timeout value is specified in milliseconds by default, but
1151 can be in any other unit if the number is suffixed by the unit,
1152 as explained at the top of this document.
1153
1154 The inactivity timeout applies when the client is expected to acknowledge or
1155 send data. In HTTP mode, this timeout is particularly important to consider
1156 during the first phase, when the client sends the request, and during the
1157 response while it is reading data sent by the server. The value is specified
1158 in milliseconds by default, but can be in any other unit if the number is
1159 suffixed by the unit, as specified at the top of this document. In TCP mode
1160 (and to a lesser extent, in HTTP mode), it is highly recommended that the
1161 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001162 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01001163 losses by specifying timeouts that are slightly above multiples of 3 seconds
1164 (eg: 4 or 5 seconds).
1165
1166 This parameter is specific to frontends, but can be specified once for all in
1167 "defaults" sections. This is in fact one of the easiest solutions not to
1168 forget about it. An unspecified timeout results in an infinite timeout, which
1169 is not recommended. Such a usage is accepted and works but reports a warning
1170 during startup because it may results in accumulation of expired sessions in
1171 the system if the system's timeouts are not configured either.
1172
1173 This parameter is provided for compatibility but is currently deprecated.
1174 Please use "timeout client" instead.
1175
Willy Tarreau036fae02008-01-06 13:24:40 +01001176 See also : "timeout client", "timeout http-request", "timeout server", and
1177 "srvtimeout".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001178
1179
1180contimeout <timeout>
1181 Set the maximum time to wait for a connection attempt to a server to succeed.
1182 May be used in sections : defaults | frontend | listen | backend
1183 yes | no | yes | yes
1184 Arguments :
1185 <timeout> is the timeout value is specified in milliseconds by default, but
1186 can be in any other unit if the number is suffixed by the unit,
1187 as explained at the top of this document.
1188
1189 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001190 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreau0ba27502007-12-24 16:55:16 +01001191 cover one or several TCP packet losses by specifying timeouts that are
1192 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
1193 connect timeout also presets the queue timeout to the same value if this one
1194 has not been specified. Historically, the contimeout was also used to set the
1195 tarpit timeout in a listen section, which is not possible in a pure frontend.
1196
1197 This parameter is specific to backends, but can be specified once for all in
1198 "defaults" sections. This is in fact one of the easiest solutions not to
1199 forget about it. An unspecified timeout results in an infinite timeout, which
1200 is not recommended. Such a usage is accepted and works but reports a warning
1201 during startup because it may results in accumulation of failed sessions in
1202 the system if the system's timeouts are not configured either.
1203
1204 This parameter is provided for backwards compatibility but is currently
1205 deprecated. Please use "timeout connect", "timeout queue" or "timeout tarpit"
1206 instead.
1207
1208 See also : "timeout connect", "timeout queue", "timeout tarpit",
1209 "timeout server", "contimeout".
1210
1211
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02001212cookie <name> [ rewrite|insert|prefix ] [ indirect ] [ nocache ] [ postonly ] [domain <domain>]
Willy Tarreau0ba27502007-12-24 16:55:16 +01001213 Enable cookie-based persistence in a backend.
1214 May be used in sections : defaults | frontend | listen | backend
1215 yes | no | yes | yes
1216 Arguments :
1217 <name> is the name of the cookie which will be monitored, modified or
1218 inserted in order to bring persistence. This cookie is sent to
1219 the client via a "Set-Cookie" header in the response, and is
1220 brought back by the client in a "Cookie" header in all requests.
1221 Special care should be taken to choose a name which does not
1222 conflict with any likely application cookie. Also, if the same
1223 backends are subject to be used by the same clients (eg:
1224 HTTP/HTTPS), care should be taken to use different cookie names
1225 between all backends if persistence between them is not desired.
1226
1227 rewrite This keyword indicates that the cookie will be provided by the
1228 server and that haproxy will have to modify its value to set the
1229 server's identifier in it. This mode is handy when the management
1230 of complex combinations of "Set-cookie" and "Cache-control"
1231 headers is left to the application. The application can then
1232 decide whether or not it is appropriate to emit a persistence
1233 cookie. Since all responses should be monitored, this mode only
1234 works in HTTP close mode. Unless the application behaviour is
1235 very complex and/or broken, it is advised not to start with this
1236 mode for new deployments. This keyword is incompatible with
1237 "insert" and "prefix".
1238
1239 insert This keyword indicates that the persistence cookie will have to
1240 be inserted by haproxy in the responses. If the server emits a
1241 cookie with the same name, it will be replaced anyway. For this
1242 reason, this mode can be used to upgrade existing configurations
1243 running in the "rewrite" mode. The cookie will only be a session
1244 cookie and will not be stored on the client's disk. Due to
1245 caching effects, it is generally wise to add the "indirect" and
1246 "nocache" or "postonly" keywords (see below). The "insert"
1247 keyword is not compatible with "rewrite" and "prefix".
1248
1249 prefix This keyword indicates that instead of relying on a dedicated
1250 cookie for the persistence, an existing one will be completed.
1251 This may be needed in some specific environments where the client
1252 does not support more than one single cookie and the application
1253 already needs it. In this case, whenever the server sets a cookie
1254 named <name>, it will be prefixed with the server's identifier
1255 and a delimiter. The prefix will be removed from all client
1256 requests so that the server still finds the cookie it emitted.
1257 Since all requests and responses are subject to being modified,
1258 this mode requires the HTTP close mode. The "prefix" keyword is
1259 not compatible with "rewrite" and "insert".
1260
1261 indirect When this option is specified in insert mode, cookies will only
1262 be added when the server was not reached after a direct access,
1263 which means that only when a server is elected after applying a
1264 load-balancing algorithm, or after a redispatch, then the cookie
1265 will be inserted. If the client has all the required information
1266 to connect to the same server next time, no further cookie will
1267 be inserted. In all cases, when the "indirect" option is used in
1268 insert mode, the cookie is always removed from the requests
1269 transmitted to the server. The persistence mechanism then becomes
1270 totally transparent from the application point of view.
1271
1272 nocache This option is recommended in conjunction with the insert mode
1273 when there is a cache between the client and HAProxy, as it
1274 ensures that a cacheable response will be tagged non-cacheable if
1275 a cookie needs to be inserted. This is important because if all
1276 persistence cookies are added on a cacheable home page for
1277 instance, then all customers will then fetch the page from an
1278 outer cache and will all share the same persistence cookie,
1279 leading to one server receiving much more traffic than others.
1280 See also the "insert" and "postonly" options.
1281
1282 postonly This option ensures that cookie insertion will only be performed
1283 on responses to POST requests. It is an alternative to the
1284 "nocache" option, because POST responses are not cacheable, so
1285 this ensures that the persistence cookie will never get cached.
1286 Since most sites do not need any sort of persistence before the
1287 first POST which generally is a login request, this is a very
1288 efficient method to optimize caching without risking to find a
1289 persistence cookie in the cache.
1290 See also the "insert" and "nocache" options.
1291
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02001292 domain This option allows to specify the domain at which a cookie is
1293 inserted. It requires exactly one paramater: a valid domain
1294 name.
1295
Willy Tarreau0ba27502007-12-24 16:55:16 +01001296 There can be only one persistence cookie per HTTP backend, and it can be
1297 declared in a defaults section. The value of the cookie will be the value
1298 indicated after the "cookie" keyword in a "server" statement. If no cookie
1299 is declared for a given server, the cookie is not set.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001300
Willy Tarreau0ba27502007-12-24 16:55:16 +01001301 Examples :
1302 cookie JSESSIONID prefix
1303 cookie SRV insert indirect nocache
1304 cookie SRV insert postonly indirect
1305
1306 See also : "appsession", "balance source", "capture cookie", "server".
1307
1308
1309default_backend <backend>
1310 Specify the backend to use when no "use_backend" rule has been matched.
1311 May be used in sections : defaults | frontend | listen | backend
1312 yes | yes | yes | no
1313 Arguments :
1314 <backend> is the name of the backend to use.
1315
1316 When doing content-switching between frontend and backends using the
1317 "use_backend" keyword, it is often useful to indicate which backend will be
1318 used when no rule has matched. It generally is the dynamic backend which
1319 will catch all undetermined requests.
1320
1321 The "default_backend" keyword is also supported in TCP mode frontends to
1322 facilitate the ordering of configurations in frontends and backends,
1323 eventhough it does not make much more sense in case of TCP due to the fact
1324 that use_backend currently does not work in TCP mode.
1325
1326 Example :
1327
1328 use_backend dynamic if url_dyn
1329 use_backend static if url_css url_img extension_img
1330 default_backend dynamic
1331
Willy Tarreau2769aa02007-12-27 18:26:09 +01001332 See also : "use_backend", "reqsetbe", "reqisetbe"
1333
Willy Tarreau0ba27502007-12-24 16:55:16 +01001334
1335disabled
1336 Disable a proxy, frontend or backend.
1337 May be used in sections : defaults | frontend | listen | backend
1338 yes | yes | yes | yes
1339 Arguments : none
1340
1341 The "disabled" keyword is used to disable an instance, mainly in order to
1342 liberate a listening port or to temporarily disable a service. The instance
1343 will still be created and its configuration will be checked, but it will be
1344 created in the "stopped" state and will appear as such in the statistics. It
1345 will not receive any traffic nor will it send any health-checks or logs. It
1346 is possible to disable many instances at once by adding the "disabled"
1347 keyword in a "defaults" section.
1348
1349 See also : "enabled"
1350
1351
1352enabled
1353 Enable a proxy, frontend or backend.
1354 May be used in sections : defaults | frontend | listen | backend
1355 yes | yes | yes | yes
1356 Arguments : none
1357
1358 The "enabled" keyword is used to explicitly enable an instance, when the
1359 defaults has been set to "disabled". This is very rarely used.
1360
1361 See also : "disabled"
1362
1363
1364errorfile <code> <file>
1365 Return a file contents instead of errors generated by HAProxy
1366 May be used in sections : defaults | frontend | listen | backend
1367 yes | yes | yes | yes
1368 Arguments :
1369 <code> is the HTTP status code. Currently, HAProxy is capable of
1370 generating codes 400, 403, 408, 500, 502, 503, and 504.
1371
1372 <file> designates a file containing the full HTTP response. It is
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001373 recommended to follow the common practice of appending ".http" to
Willy Tarreau0ba27502007-12-24 16:55:16 +01001374 the filename so that people do not confuse the response with HTML
1375 error pages.
1376
1377 It is important to understand that this keyword is not meant to rewrite
1378 errors returned by the server, but errors detected and returned by HAProxy.
1379 This is why the list of supported errors is limited to a small set.
1380
1381 The files are returned verbatim on the TCP socket. This allows any trick such
1382 as redirections to another URL or site, as well as tricks to clean cookies,
1383 force enable or disable caching, etc... The package provides default error
1384 files returning the same contents as default errors.
1385
1386 The files are read at the same time as the configuration and kept in memory.
1387 For this reason, the errors continue to be returned even when the process is
1388 chrooted, and no file change is considered while the process is running. A
Willy Tarreauc27debf2008-01-06 08:57:02 +01001389 simple method for developing those files consists in associating them to the
Willy Tarreau0ba27502007-12-24 16:55:16 +01001390 403 status code and interrogating a blocked URL.
1391
1392 See also : "errorloc", "errorloc302", "errorloc303"
1393
Willy Tarreau2769aa02007-12-27 18:26:09 +01001394
1395errorloc <code> <url>
1396errorloc302 <code> <url>
1397 Return an HTTP redirection to a URL instead of errors generated by HAProxy
1398 May be used in sections : defaults | frontend | listen | backend
1399 yes | yes | yes | yes
1400 Arguments :
1401 <code> is the HTTP status code. Currently, HAProxy is capable of
1402 generating codes 400, 403, 408, 500, 502, 503, and 504.
1403
1404 <url> it is the exact contents of the "Location" header. It may contain
1405 either a relative URI to an error page hosted on the same site,
1406 or an absolute URI designating an error page on another site.
1407 Special care should be given to relative URIs to avoid redirect
1408 loops if the URI itself may generate the same error (eg: 500).
1409
1410 It is important to understand that this keyword is not meant to rewrite
1411 errors returned by the server, but errors detected and returned by HAProxy.
1412 This is why the list of supported errors is limited to a small set.
1413
1414 Note that both keyword return the HTTP 302 status code, which tells the
1415 client to fetch the designated URL using the same HTTP method. This can be
1416 quite problematic in case of non-GET methods such as POST, because the URL
1417 sent to the client might not be allowed for something other than GET. To
1418 workaround this problem, please use "errorloc303" which send the HTTP 303
1419 status code, indicating to the client that the URL must be fetched with a GET
1420 request.
1421
1422 See also : "errorfile", "errorloc303"
1423
1424
1425errorloc303 <code> <url>
1426 Return an HTTP redirection to a URL instead of errors generated by HAProxy
1427 May be used in sections : defaults | frontend | listen | backend
1428 yes | yes | yes | yes
1429 Arguments :
1430 <code> is the HTTP status code. Currently, HAProxy is capable of
1431 generating codes 400, 403, 408, 500, 502, 503, and 504.
1432
1433 <url> it is the exact contents of the "Location" header. It may contain
1434 either a relative URI to an error page hosted on the same site,
1435 or an absolute URI designating an error page on another site.
1436 Special care should be given to relative URIs to avoid redirect
1437 loops if the URI itself may generate the same error (eg: 500).
1438
1439 It is important to understand that this keyword is not meant to rewrite
1440 errors returned by the server, but errors detected and returned by HAProxy.
1441 This is why the list of supported errors is limited to a small set.
1442
1443 Note that both keyword return the HTTP 303 status code, which tells the
1444 client to fetch the designated URL using the same HTTP GET method. This
1445 solves the usual problems associated with "errorloc" and the 302 code. It is
1446 possible that some very old browsers designed before HTTP/1.1 do not support
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001447 it, but no such problem has been reported till now.
Willy Tarreau2769aa02007-12-27 18:26:09 +01001448
1449 See also : "errorfile", "errorloc", "errorloc302"
1450
1451
1452fullconn <conns>
1453 Specify at what backend load the servers will reach their maxconn
1454 May be used in sections : defaults | frontend | listen | backend
1455 yes | no | yes | yes
1456 Arguments :
1457 <conns> is the number of connections on the backend which will make the
1458 servers use the maximal number of connections.
1459
Willy Tarreau198a7442008-01-17 12:05:32 +01001460 When a server has a "maxconn" parameter specified, it means that its number
Willy Tarreau2769aa02007-12-27 18:26:09 +01001461 of concurrent connections will never go higher. Additionally, if it has a
Willy Tarreau198a7442008-01-17 12:05:32 +01001462 "minconn" parameter, it indicates a dynamic limit following the backend's
Willy Tarreau2769aa02007-12-27 18:26:09 +01001463 load. The server will then always accept at least <minconn> connections,
1464 never more than <maxconn>, and the limit will be on the ramp between both
1465 values when the backend has less than <conns> concurrent connections. This
1466 makes it possible to limit the load on the servers during normal loads, but
1467 push it further for important loads without overloading the servers during
1468 exceptionnal loads.
1469
1470 Example :
1471 # The servers will accept between 100 and 1000 concurrent connections each
1472 # and the maximum of 1000 will be reached when the backend reaches 10000
1473 # connections.
1474 backend dynamic
1475 fullconn 10000
1476 server srv1 dyn1:80 minconn 100 maxconn 1000
1477 server srv2 dyn2:80 minconn 100 maxconn 1000
1478
1479 See also : "maxconn", "server"
1480
1481
1482grace <time>
1483 Maintain a proxy operational for some time after a soft stop
1484 May be used in sections : defaults | frontend | listen | backend
1485 no | yes | yes | yes
1486 Arguments :
1487 <time> is the time (by default in milliseconds) for which the instance
1488 will remain operational with the frontend sockets still listening
1489 when a soft-stop is received via the SIGUSR1 signal.
1490
1491 This may be used to ensure that the services disappear in a certain order.
1492 This was designed so that frontends which are dedicated to monitoring by an
1493 external equipement fail immediately while other ones remain up for the time
1494 needed by the equipment to detect the failure.
1495
1496 Note that currently, there is very little benefit in using this parameter,
1497 and it may in fact complicate the soft-reconfiguration process more than
1498 simplify it.
1499
Willy Tarreau0ba27502007-12-24 16:55:16 +01001500
1501http-check disable-on-404
1502 Enable a maintenance mode upon HTTP/404 response to health-checks
1503 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau2769aa02007-12-27 18:26:09 +01001504 yes | no | yes | yes
Willy Tarreau0ba27502007-12-24 16:55:16 +01001505 Arguments : none
1506
1507 When this option is set, a server which returns an HTTP code 404 will be
1508 excluded from further load-balancing, but will still receive persistent
1509 connections. This provides a very convenient method for Web administrators
1510 to perform a graceful shutdown of their servers. It is also important to note
1511 that a server which is detected as failed while it was in this mode will not
1512 generate an alert, just a notice. If the server responds 2xx or 3xx again, it
1513 will immediately be reinserted into the farm. The status on the stats page
1514 reports "NOLB" for a server in this mode. It is important to note that this
1515 option only works in conjunction with the "httpchk" option.
1516
Willy Tarreau2769aa02007-12-27 18:26:09 +01001517 See also : "option httpchk"
1518
1519
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01001520id <value>
1521 Set a persistent value for proxy ID. Must be unique and larger than 1000, as
1522 smaller values are reserved for auto-assigned ids.
1523
1524
Willy Tarreau2769aa02007-12-27 18:26:09 +01001525log global
1526log <address> <facility> [<level>]
1527 Enable per-instance logging of events and traffic.
1528 May be used in sections : defaults | frontend | listen | backend
1529 yes | yes | yes | yes
1530 Arguments :
1531 global should be used when the instance's logging parameters are the
1532 same as the global ones. This is the most common usage. "global"
1533 replaces <address>, <facility> and <level> with those of the log
1534 entries found in the "global" section. Only one "log global"
1535 statement may be used per instance, and this form takes no other
1536 parameter.
1537
1538 <address> indicates where to send the logs. It takes the same format as
1539 for the "global" section's logs, and can be one of :
1540
1541 - An IPv4 address optionally followed by a colon (':') and a UDP
1542 port. If no port is specified, 514 is used by default (the
1543 standard syslog port).
1544
1545 - A filesystem path to a UNIX domain socket, keeping in mind
1546 considerations for chroot (be sure the path is accessible
1547 inside the chroot) and uid/gid (be sure the path is
1548 appropriately writeable).
1549
1550 <facility> must be one of the 24 standard syslog facilities :
1551
1552 kern user mail daemon auth syslog lpr news
1553 uucp cron auth2 ftp ntp audit alert cron2
1554 local0 local1 local2 local3 local4 local5 local6 local7
1555
1556 <level> is optional and can be specified to filter outgoing messages. By
1557 default, all messages are sent. If a level is specified, only
1558 messages with a severity at least as important as this level
1559 will be sent. 8 levels are known :
1560
1561 emerg alert crit err warning notice info debug
1562
1563 Note that up to two "log" entries may be specified per instance. However, if
1564 "log global" is used and if the "global" section already contains 2 log
1565 entries, then additional log entries will be ignored.
1566
1567 Also, it is important to keep in mind that it is the frontend which decides
Willy Tarreaucc6c8912009-02-22 10:53:55 +01001568 what to log from a connection, and that in case of content switching, the log
1569 entries from the backend will be ignored. Connections are logged at level
1570 "info".
1571
1572 However, backend log declaration define how and where servers status changes
1573 will be logged. Level "notice" will be used to indicate a server going up,
1574 "warning" will be used for termination signals and definitive service
1575 termination, and "alert" will be used for when a server goes down.
1576
1577 Note : According to RFC3164, messages are truncated to 1024 bytes before
1578 being emitted.
Willy Tarreau2769aa02007-12-27 18:26:09 +01001579
1580 Example :
1581 log global
1582 log 127.0.0.1:514 local0 notice
1583
1584
1585maxconn <conns>
1586 Fix the maximum number of concurrent connections on a frontend
1587 May be used in sections : defaults | frontend | listen | backend
1588 yes | yes | yes | no
1589 Arguments :
1590 <conns> is the maximum number of concurrent connections the frontend will
1591 accept to serve. Excess connections will be queued by the system
1592 in the socket's listen queue and will be served once a connection
1593 closes.
1594
1595 If the system supports it, it can be useful on big sites to raise this limit
1596 very high so that haproxy manages connection queues, instead of leaving the
1597 clients with unanswered connection attempts. This value should not exceed the
1598 global maxconn. Also, keep in mind that a connection contains two buffers
1599 of 8kB each, as well as some other data resulting in about 17 kB of RAM being
1600 consumed per established connection. That means that a medium system equipped
1601 with 1GB of RAM can withstand around 40000-50000 concurrent connections if
1602 properly tuned.
1603
1604 Also, when <conns> is set to large values, it is possible that the servers
1605 are not sized to accept such loads, and for this reason it is generally wise
1606 to assign them some reasonable connection limits.
1607
1608 See also : "server", global section's "maxconn", "fullconn"
1609
1610
1611mode { tcp|http|health }
1612 Set the running mode or protocol of the instance
1613 May be used in sections : defaults | frontend | listen | backend
1614 yes | yes | yes | yes
1615 Arguments :
1616 tcp The instance will work in pure TCP mode. A full-duplex connection
1617 will be established between clients and servers, and no layer 7
1618 examination will be performed. This is the default mode. It
1619 should be used for SSL, SSH, SMTP, ...
1620
1621 http The instance will work in HTTP mode. The client request will be
1622 analyzed in depth before connecting to any server. Any request
1623 which is not RFC-compliant will be rejected. Layer 7 filtering,
1624 processing and switching will be possible. This is the mode which
1625 brings HAProxy most of its value.
1626
1627 health The instance will work in "health" mode. It will just reply "OK"
1628 to incoming connections and close the connection. Nothing will be
1629 logged. This mode is used to reply to external components health
1630 checks. This mode is deprecated and should not be used anymore as
1631 it is possible to do the same and even better by combining TCP or
1632 HTTP modes with the "monitor" keyword.
1633
1634 When doing content switching, it is mandatory that the frontend and the
1635 backend are in the same mode (generally HTTP), otherwise the configuration
1636 will be refused.
1637
1638 Example :
1639 defaults http_instances
1640 mode http
1641
1642 See also : "monitor", "monitor-net"
1643
Willy Tarreau0ba27502007-12-24 16:55:16 +01001644
1645monitor fail [if | unless] <condition>
Willy Tarreau2769aa02007-12-27 18:26:09 +01001646 Add a condition to report a failure to a monitor HTTP request.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001647 May be used in sections : defaults | frontend | listen | backend
1648 no | yes | yes | no
Willy Tarreau0ba27502007-12-24 16:55:16 +01001649 Arguments :
1650 if <cond> the monitor request will fail if the condition is satisfied,
1651 and will succeed otherwise. The condition should describe a
1652 combinated test which must induce a failure if all conditions
1653 are met, for instance a low number of servers both in a
1654 backend and its backup.
1655
1656 unless <cond> the monitor request will succeed only if the condition is
1657 satisfied, and will fail otherwise. Such a condition may be
1658 based on a test on the presence of a minimum number of active
1659 servers in a list of backends.
1660
1661 This statement adds a condition which can force the response to a monitor
1662 request to report a failure. By default, when an external component queries
1663 the URI dedicated to monitoring, a 200 response is returned. When one of the
1664 conditions above is met, haproxy will return 503 instead of 200. This is
1665 very useful to report a site failure to an external component which may base
1666 routing advertisements between multiple sites on the availability reported by
1667 haproxy. In this case, one would rely on an ACL involving the "nbsrv"
Willy Tarreau2769aa02007-12-27 18:26:09 +01001668 criterion. Note that "monitor fail" only works in HTTP mode.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001669
1670 Example:
1671 frontend www
Willy Tarreau2769aa02007-12-27 18:26:09 +01001672 mode http
Willy Tarreau0ba27502007-12-24 16:55:16 +01001673 acl site_dead nbsrv(dynamic) lt 2
1674 acl site_dead nbsrv(static) lt 2
1675 monitor-uri /site_alive
1676 monitor fail if site_dead
1677
Willy Tarreau2769aa02007-12-27 18:26:09 +01001678 See also : "monitor-net", "monitor-uri"
1679
1680
1681monitor-net <source>
1682 Declare a source network which is limited to monitor requests
1683 May be used in sections : defaults | frontend | listen | backend
1684 yes | yes | yes | no
1685 Arguments :
1686 <source> is the source IPv4 address or network which will only be able to
1687 get monitor responses to any request. It can be either an IPv4
1688 address, a host name, or an address followed by a slash ('/')
1689 followed by a mask.
1690
1691 In TCP mode, any connection coming from a source matching <source> will cause
1692 the connection to be immediately closed without any log. This allows another
1693 equipement to probe the port and verify that it is still listening, without
1694 forwarding the connection to a remote server.
1695
1696 In HTTP mode, a connection coming from a source matching <source> will be
1697 accepted, the following response will be sent without waiting for a request,
1698 then the connection will be closed : "HTTP/1.0 200 OK". This is normally
1699 enough for any front-end HTTP probe to detect that the service is UP and
1700 running without forwarding the request to a backend server.
1701
1702 Monitor requests are processed very early. It is not possible to block nor
1703 divert them using ACLs. They cannot be logged either, and it is the intended
1704 purpose. They are only used to report HAProxy's health to an upper component,
1705 nothing more. Right now, it is not possible to set failure conditions on
1706 requests caught by "monitor-net".
1707
1708 Example :
1709 # addresses .252 and .253 are just probing us.
1710 frontend www
1711 monitor-net 192.168.0.252/31
1712
1713 See also : "monitor fail", "monitor-uri"
1714
1715
1716monitor-uri <uri>
1717 Intercept a URI used by external components' monitor requests
1718 May be used in sections : defaults | frontend | listen | backend
1719 yes | yes | yes | no
1720 Arguments :
1721 <uri> is the exact URI which we want to intercept to return HAProxy's
1722 health status instead of forwarding the request.
1723
1724 When an HTTP request referencing <uri> will be received on a frontend,
1725 HAProxy will not forward it nor log it, but instead will return either
1726 "HTTP/1.0 200 OK" or "HTTP/1.0 503 Service unavailable", depending on failure
1727 conditions defined with "monitor fail". This is normally enough for any
1728 front-end HTTP probe to detect that the service is UP and running without
1729 forwarding the request to a backend server. Note that the HTTP method, the
1730 version and all headers are ignored, but the request must at least be valid
1731 at the HTTP level. This keyword may only be used with an HTTP-mode frontend.
1732
1733 Monitor requests are processed very early. It is not possible to block nor
1734 divert them using ACLs. They cannot be logged either, and it is the intended
1735 purpose. They are only used to report HAProxy's health to an upper component,
1736 nothing more. However, it is possible to add any number of conditions using
1737 "monitor fail" and ACLs so that the result can be adjusted to whatever check
1738 can be imagined (most often the number of available servers in a backend).
1739
1740 Example :
1741 # Use /haproxy_test to report haproxy's status
1742 frontend www
1743 mode http
1744 monitor-uri /haproxy_test
1745
1746 See also : "monitor fail", "monitor-net"
1747
Willy Tarreau0ba27502007-12-24 16:55:16 +01001748
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001749option abortonclose
1750no option abortonclose
1751 Enable or disable early dropping of aborted requests pending in queues.
1752 May be used in sections : defaults | frontend | listen | backend
1753 yes | no | yes | yes
1754 Arguments : none
1755
1756 In presence of very high loads, the servers will take some time to respond.
1757 The per-instance connection queue will inflate, and the response time will
1758 increase respective to the size of the queue times the average per-session
1759 response time. When clients will wait for more than a few seconds, they will
Willy Tarreau198a7442008-01-17 12:05:32 +01001760 often hit the "STOP" button on their browser, leaving a useless request in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001761 the queue, and slowing down other users, and the servers as well, because the
1762 request will eventually be served, then aborted at the first error
1763 encountered while delivering the response.
1764
1765 As there is no way to distinguish between a full STOP and a simple output
1766 close on the client side, HTTP agents should be conservative and consider
1767 that the client might only have closed its output channel while waiting for
1768 the response. However, this introduces risks of congestion when lots of users
1769 do the same, and is completely useless nowadays because probably no client at
1770 all will close the session while waiting for the response. Some HTTP agents
1771 support this behaviour (Squid, Apache, HAProxy), and others do not (TUX, most
1772 hardware-based load balancers). So the probability for a closed input channel
Willy Tarreau198a7442008-01-17 12:05:32 +01001773 to represent a user hitting the "STOP" button is close to 100%, and the risk
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001774 of being the single component to break rare but valid traffic is extremely
1775 low, which adds to the temptation to be able to abort a session early while
1776 still not served and not pollute the servers.
1777
1778 In HAProxy, the user can choose the desired behaviour using the option
1779 "abortonclose". By default (without the option) the behaviour is HTTP
1780 compliant and aborted requests will be served. But when the option is
1781 specified, a session with an incoming channel closed will be aborted while
1782 it is still possible, either pending in the queue for a connection slot, or
1783 during the connection establishment if the server has not yet acknowledged
1784 the connection request. This considerably reduces the queue size and the load
1785 on saturated servers when users are tempted to click on STOP, which in turn
1786 reduces the response time for other users.
1787
1788 If this option has been enabled in a "defaults" section, it can be disabled
1789 in a specific instance by prepending the "no" keyword before it.
1790
1791 See also : "timeout queue" and server's "maxconn" and "maxqueue" parameters
1792
1793
1794option allbackups
1795no option allbackups
1796 Use either all backup servers at a time or only the first one
1797 May be used in sections : defaults | frontend | listen | backend
1798 yes | no | yes | yes
1799 Arguments : none
1800
1801 By default, the first operational backup server gets all traffic when normal
1802 servers are all down. Sometimes, it may be preferred to use multiple backups
1803 at once, because one will not be enough. When "option allbackups" is enabled,
1804 the load balancing will be performed among all backup servers when all normal
1805 ones are unavailable. The same load balancing algorithm will be used and the
1806 servers' weights will be respected. Thus, there will not be any priority
1807 order between the backup servers anymore.
1808
1809 This option is mostly used with static server farms dedicated to return a
1810 "sorry" page when an application is completely offline.
1811
1812 If this option has been enabled in a "defaults" section, it can be disabled
1813 in a specific instance by prepending the "no" keyword before it.
1814
1815
1816option checkcache
1817no option checkcache
1818 Analyze all server responses and block requests with cachable cookies
1819 May be used in sections : defaults | frontend | listen | backend
1820 yes | no | yes | yes
1821 Arguments : none
1822
1823 Some high-level frameworks set application cookies everywhere and do not
1824 always let enough control to the developer to manage how the responses should
1825 be cached. When a session cookie is returned on a cachable object, there is a
1826 high risk of session crossing or stealing between users traversing the same
1827 caches. In some situations, it is better to block the response than to let
1828 some sensible session information go in the wild.
1829
1830 The option "checkcache" enables deep inspection of all server responses for
1831 strict compliance with HTTP specification in terms of cachability. It
Willy Tarreau198a7442008-01-17 12:05:32 +01001832 carefully checks "Cache-control", "Pragma" and "Set-cookie" headers in server
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001833 response to check if there's a risk of caching a cookie on a client-side
1834 proxy. When this option is enabled, the only responses which can be delivered
Willy Tarreau198a7442008-01-17 12:05:32 +01001835 to the client are :
1836 - all those without "Set-Cookie" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001837 - all those with a return code other than 200, 203, 206, 300, 301, 410,
Willy Tarreau198a7442008-01-17 12:05:32 +01001838 provided that the server has not set a "Cache-control: public" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001839 - all those that come from a POST request, provided that the server has not
1840 set a 'Cache-Control: public' header ;
1841 - those with a 'Pragma: no-cache' header
1842 - those with a 'Cache-control: private' header
1843 - those with a 'Cache-control: no-store' header
1844 - those with a 'Cache-control: max-age=0' header
1845 - those with a 'Cache-control: s-maxage=0' header
1846 - those with a 'Cache-control: no-cache' header
1847 - those with a 'Cache-control: no-cache="set-cookie"' header
1848 - those with a 'Cache-control: no-cache="set-cookie,' header
1849 (allowing other fields after set-cookie)
1850
1851 If a response doesn't respect these requirements, then it will be blocked
Willy Tarreau198a7442008-01-17 12:05:32 +01001852 just as if it was from an "rspdeny" filter, with an "HTTP 502 bad gateway".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001853 The session state shows "PH--" meaning that the proxy blocked the response
1854 during headers processing. Additionnaly, an alert will be sent in the logs so
1855 that admins are informed that there's something to be fixed.
1856
1857 Due to the high impact on the application, the application should be tested
1858 in depth with the option enabled before going to production. It is also a
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001859 good practice to always activate it during tests, even if it is not used in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001860 production, as it will report potentially dangerous application behaviours.
1861
1862 If this option has been enabled in a "defaults" section, it can be disabled
1863 in a specific instance by prepending the "no" keyword before it.
1864
1865
1866option clitcpka
1867no option clitcpka
1868 Enable or disable the sending of TCP keepalive packets on the client side
1869 May be used in sections : defaults | frontend | listen | backend
1870 yes | yes | yes | no
1871 Arguments : none
1872
1873 When there is a firewall or any session-aware component between a client and
1874 a server, and when the protocol involves very long sessions with long idle
1875 periods (eg: remote desktops), there is a risk that one of the intermediate
1876 components decides to expire a session which has remained idle for too long.
1877
1878 Enabling socket-level TCP keep-alives makes the system regularly send packets
1879 to the other end of the connection, leaving it active. The delay between
1880 keep-alive probes is controlled by the system only and depends both on the
1881 operating system and its tuning parameters.
1882
1883 It is important to understand that keep-alive packets are neither emitted nor
1884 received at the application level. It is only the network stacks which sees
1885 them. For this reason, even if one side of the proxy already uses keep-alives
1886 to maintain its connection alive, those keep-alive packets will not be
1887 forwarded to the other side of the proxy.
1888
1889 Please note that this has nothing to do with HTTP keep-alive.
1890
1891 Using option "clitcpka" enables the emission of TCP keep-alive probes on the
1892 client side of a connection, which should help when session expirations are
1893 noticed between HAProxy and a client.
1894
1895 If this option has been enabled in a "defaults" section, it can be disabled
1896 in a specific instance by prepending the "no" keyword before it.
1897
1898 See also : "option srvtcpka", "option tcpka"
1899
1900
Willy Tarreau0ba27502007-12-24 16:55:16 +01001901option contstats
1902 Enable continuous traffic statistics updates
1903 May be used in sections : defaults | frontend | listen | backend
1904 yes | yes | yes | no
1905 Arguments : none
1906
1907 By default, counters used for statistics calculation are incremented
1908 only when a session finishes. It works quite well when serving small
1909 objects, but with big ones (for example large images or archives) or
1910 with A/V streaming, a graph generated from haproxy counters looks like
1911 a hedgehog. With this option enabled counters get incremented continuously,
1912 during a whole session. Recounting touches a hotpath directly so
1913 it is not enabled by default, as it has small performance impact (~0.5%).
1914
1915
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001916option dontlognull
1917no option dontlognull
1918 Enable or disable logging of null connections
1919 May be used in sections : defaults | frontend | listen | backend
1920 yes | yes | yes | no
1921 Arguments : none
1922
1923 In certain environments, there are components which will regularly connect to
1924 various systems to ensure that they are still alive. It can be the case from
1925 another load balancer as well as from monitoring systems. By default, even a
1926 simple port probe or scan will produce a log. If those connections pollute
1927 the logs too much, it is possible to enable option "dontlognull" to indicate
1928 that a connection on which no data has been transferred will not be logged,
1929 which typically corresponds to those probes.
1930
1931 It is generally recommended not to use this option in uncontrolled
1932 environments (eg: internet), otherwise scans and other malicious activities
1933 would not be logged.
1934
1935 If this option has been enabled in a "defaults" section, it can be disabled
1936 in a specific instance by prepending the "no" keyword before it.
1937
Willy Tarreauced27012008-01-17 20:35:34 +01001938 See also : "log", "monitor-net", "monitor-uri" and section 2.6 about logging.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001939
1940
1941option forceclose
1942no option forceclose
1943 Enable or disable active connection closing after response is transferred.
1944 May be used in sections : defaults | frontend | listen | backend
1945 yes | no | yes | yes
1946 Arguments : none
1947
1948 Some HTTP servers do not necessarily close the connections when they receive
1949 the "Connection: close" set by "option httpclose", and if the client does not
1950 close either, then the connection remains open till the timeout expires. This
1951 causes high number of simultaneous connections on the servers and shows high
1952 global session times in the logs.
1953
1954 When this happens, it is possible to use "option forceclose". It will
1955 actively close the outgoing server channel as soon as the server begins to
1956 reply and only if the request buffer is empty. Note that this should NOT be
1957 used if CONNECT requests are expected between the client and the server. This
1958 option implicitly enables the "httpclose" option.
1959
1960 If this option has been enabled in a "defaults" section, it can be disabled
1961 in a specific instance by prepending the "no" keyword before it.
1962
1963 See also : "option httpclose"
1964
1965
Ross Westaf72a1d2008-08-03 10:51:45 +02001966option forwardfor [ except <network> ] [ header <name> ]
Willy Tarreauc27debf2008-01-06 08:57:02 +01001967 Enable insertion of the X-Forwarded-For header to requests sent to servers
1968 May be used in sections : defaults | frontend | listen | backend
1969 yes | yes | yes | yes
1970 Arguments :
1971 <network> is an optional argument used to disable this option for sources
1972 matching <network>
Ross Westaf72a1d2008-08-03 10:51:45 +02001973 <name> an optional argument to specify a different "X-Forwarded-For"
1974 header name.
Willy Tarreauc27debf2008-01-06 08:57:02 +01001975
1976 Since HAProxy works in reverse-proxy mode, the servers see its IP address as
1977 their client address. This is sometimes annoying when the client's IP address
1978 is expected in server logs. To solve this problem, the well-known HTTP header
1979 "X-Forwarded-For" may be added by HAProxy to all requests sent to the server.
1980 This header contains a value representing the client's IP address. Since this
1981 header is always appended at the end of the existing header list, the server
1982 must be configured to always use the last occurrence of this header only. See
Ross Westaf72a1d2008-08-03 10:51:45 +02001983 the server's manual to find how to enable use of this standard header. Note
1984 that only the last occurrence of the header must be used, since it is really
1985 possible that the client has already brought one.
1986
1987 The keyword "header" may be used to supply a different header name to replace
1988 the default "X-Forwarded-For". This can be useful where you might already
1989 have a "X-Forwarded-For" header from a different application (eg: stunnel),
1990 and you need preserve it. Also if your backend server doesn't use the
1991 "X-Forwarded-For" header and requires different one (eg: Zeus Web Servers
1992 require "X-Cluster-Client-IP").
Willy Tarreauc27debf2008-01-06 08:57:02 +01001993
1994 Sometimes, a same HAProxy instance may be shared between a direct client
1995 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
1996 used to decrypt HTTPS traffic). It is possible to disable the addition of the
1997 header for a known source address or network by adding the "except" keyword
1998 followed by the network address. In this case, any source IP matching the
1999 network will not cause an addition of this header. Most common uses are with
2000 private networks or 127.0.0.1.
2001
2002 This option may be specified either in the frontend or in the backend. If at
Ross Westaf72a1d2008-08-03 10:51:45 +02002003 least one of them uses it, the header will be added. Note that the backend's
2004 setting of the header subargument takes precedence over the frontend's if
2005 both are defined.
Willy Tarreauc27debf2008-01-06 08:57:02 +01002006
2007 It is important to note that as long as HAProxy does not support keep-alive
2008 connections, only the first request of a connection will receive the header.
2009 For this reason, it is important to ensure that "option httpclose" is set
2010 when using this option.
2011
Ross Westaf72a1d2008-08-03 10:51:45 +02002012 Examples :
Willy Tarreauc27debf2008-01-06 08:57:02 +01002013 # Public HTTP address also used by stunnel on the same machine
2014 frontend www
2015 mode http
2016 option forwardfor except 127.0.0.1 # stunnel already adds the header
2017
Ross Westaf72a1d2008-08-03 10:51:45 +02002018 # Those servers want the IP Address in X-Client
2019 backend www
2020 mode http
2021 option forwardfor header X-Client
2022
Willy Tarreauc27debf2008-01-06 08:57:02 +01002023 See also : "option httpclose"
2024
2025
2026option http_proxy
2027no option http_proxy
2028 Enable or disable plain HTTP proxy mode
2029 May be used in sections : defaults | frontend | listen | backend
2030 yes | yes | yes | yes
2031 Arguments : none
2032
2033 It sometimes happens that people need a pure HTTP proxy which understands
2034 basic proxy requests without caching nor any fancy feature. In this case,
2035 it may be worth setting up an HAProxy instance with the "option http_proxy"
2036 set. In this mode, no server is declared, and the connection is forwarded to
2037 the IP address and port found in the URL after the "http://" scheme.
2038
2039 No host address resolution is performed, so this only works when pure IP
2040 addresses are passed. Since this option's usage perimeter is rather limited,
2041 it will probably be used only by experts who know they need exactly it. Last,
2042 if the clients are susceptible of sending keep-alive requests, it will be
2043 needed to add "option http_close" to ensure that all requests will correctly
2044 be analyzed.
2045
2046 If this option has been enabled in a "defaults" section, it can be disabled
2047 in a specific instance by prepending the "no" keyword before it.
2048
2049 Example :
2050 # this backend understands HTTP proxy requests and forwards them directly.
2051 backend direct_forward
2052 option httpclose
2053 option http_proxy
2054
2055 See also : "option httpclose"
2056
2057
2058option httpchk
2059option httpchk <uri>
2060option httpchk <method> <uri>
2061option httpchk <method> <uri> <version>
2062 Enable HTTP protocol to check on the servers health
2063 May be used in sections : defaults | frontend | listen | backend
2064 yes | no | yes | yes
2065 Arguments :
2066 <method> is the optional HTTP method used with the requests. When not set,
2067 the "OPTIONS" method is used, as it generally requires low server
2068 processing and is easy to filter out from the logs. Any method
2069 may be used, though it is not recommended to invent non-standard
2070 ones.
2071
2072 <uri> is the URI referenced in the HTTP requests. It defaults to " / "
2073 which is accessible by default on almost any server, but may be
2074 changed to any other URI. Query strings are permitted.
2075
2076 <version> is the optional HTTP version string. It defaults to "HTTP/1.0"
2077 but some servers might behave incorrectly in HTTP 1.0, so turning
2078 it to HTTP/1.1 may sometimes help. Note that the Host field is
2079 mandatory in HTTP/1.1, and as a trick, it is possible to pass it
2080 after "\r\n" following the version string.
2081
2082 By default, server health checks only consist in trying to establish a TCP
2083 connection. When "option httpchk" is specified, a complete HTTP request is
2084 sent once the TCP connection is established, and responses 2xx and 3xx are
2085 considered valid, while all other ones indicate a server failure, including
2086 the lack of any response.
2087
2088 The port and interval are specified in the server configuration.
2089
2090 This option does not necessarily require an HTTP backend, it also works with
2091 plain TCP backends. This is particularly useful to check simple scripts bound
2092 to some dedicated ports using the inetd daemon.
2093
2094 Examples :
2095 # Relay HTTPS traffic to Apache instance and check service availability
2096 # using HTTP request "OPTIONS * HTTP/1.1" on port 80.
2097 backend https_relay
2098 mode tcp
Willy Tarreauebaf21a2008-03-21 20:17:14 +01002099 option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
Willy Tarreauc27debf2008-01-06 08:57:02 +01002100 server apache1 192.168.1.1:443 check port 80
2101
2102 See also : "option ssl-hello-chk", "option smtpchk", "http-check" and the
2103 "check", "port" and "interval" server options.
2104
2105
2106option httpclose
2107no option httpclose
2108 Enable or disable passive HTTP connection closing
2109 May be used in sections : defaults | frontend | listen | backend
2110 yes | yes | yes | yes
2111 Arguments : none
2112
2113 As stated in section 2.1, HAProxy does not yes support the HTTP keep-alive
2114 mode. So by default, if a client communicates with a server in this mode, it
2115 will only analyze, log, and process the first request of each connection. To
2116 workaround this limitation, it is possible to specify "option httpclose". It
2117 will check if a "Connection: close" header is already set in each direction,
2118 and will add one if missing. Each end should react to this by actively
2119 closing the TCP connection after each transfer, thus resulting in a switch to
2120 the HTTP close mode. Any "Connection" header different from "close" will also
2121 be removed.
2122
2123 It seldom happens that some servers incorrectly ignore this header and do not
2124 close the connection eventough they reply "Connection: close". For this
2125 reason, they are not compatible with older HTTP 1.0 browsers. If this
2126 happens it is possible to use the "option forceclose" which actively closes
2127 the request connection once the server responds.
2128
2129 This option may be set both in a frontend and in a backend. It is enabled if
2130 at least one of the frontend or backend holding a connection has it enabled.
2131 If "option forceclose" is specified too, it has precedence over "httpclose".
2132
2133 If this option has been enabled in a "defaults" section, it can be disabled
2134 in a specific instance by prepending the "no" keyword before it.
2135
2136 See also : "option forceclose"
2137
2138
2139option httplog
2140 Enable logging of HTTP request, session state and timers
2141 May be used in sections : defaults | frontend | listen | backend
2142 yes | yes | yes | yes
2143 Arguments : none
2144
2145 By default, the log output format is very poor, as it only contains the
2146 source and destination addresses, and the instance name. By specifying
2147 "option httplog", each log line turns into a much richer format including,
2148 but not limited to, the HTTP request, the connection timers, the session
2149 status, the connections numbers, the captured headers and cookies, the
2150 frontend, backend and server name, and of course the source address and
2151 ports.
2152
2153 This option may be set either in the frontend or the backend.
2154
Willy Tarreauced27012008-01-17 20:35:34 +01002155 See also : section 2.6 about logging.
Willy Tarreauc27debf2008-01-06 08:57:02 +01002156
Willy Tarreauc27debf2008-01-06 08:57:02 +01002157
2158option logasap
2159no option logasap
2160 Enable or disable early logging of HTTP requests
2161 May be used in sections : defaults | frontend | listen | backend
2162 yes | yes | yes | no
2163 Arguments : none
2164
2165 By default, HTTP requests are logged upon termination so that the total
2166 transfer time and the number of bytes appear in the logs. When large objects
2167 are being transferred, it may take a while before the request appears in the
2168 logs. Using "option logasap", the request gets logged as soon as the server
2169 sends the complete headers. The only missing information in the logs will be
2170 the total number of bytes which will indicate everything except the amount
2171 of data transferred, and the total time which will not take the transfer
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002172 time into account. In such a situation, it's a good practice to capture the
Willy Tarreauc27debf2008-01-06 08:57:02 +01002173 "Content-Length" response header so that the logs at least indicate how many
2174 bytes are expected to be transferred.
2175
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002176 Examples :
2177 listen http_proxy 0.0.0.0:80
2178 mode http
2179 option httplog
2180 option logasap
2181 log 192.168.2.200 local3
2182
2183 >>> Feb 6 12:14:14 localhost \
2184 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
2185 static/srv1 9/10/7/14/+30 200 +243 - - ---- 3/1/1/1/0 1/0 \
2186 "GET /image.iso HTTP/1.0"
2187
Willy Tarreauced27012008-01-17 20:35:34 +01002188 See also : "option httplog", "capture response header", and section 2.6 about
Willy Tarreauc27debf2008-01-06 08:57:02 +01002189 logging.
2190
2191
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002192option nolinger
2193no option nolinger
2194 Enable or disable immediate session ressource cleaning after close
2195 May be used in sections: defaults | frontend | listen | backend
2196 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002197 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002198
2199 When clients or servers abort connections in a dirty way (eg: they are
2200 physically disconnected), the session timeouts triggers and the session is
2201 closed. But it will remain in FIN_WAIT1 state for some time in the system,
2202 using some resources and possibly limiting the ability to establish newer
2203 connections.
2204
2205 When this happens, it is possible to activate "option nolinger" which forces
2206 the system to immediately remove any socket's pending data on close. Thus,
2207 the session is instantly purged from the system's tables. This usually has
2208 side effects such as increased number of TCP resets due to old retransmits
2209 getting immediately rejected. Some firewalls may sometimes complain about
2210 this too.
2211
2212 For this reason, it is not recommended to use this option when not absolutely
2213 needed. You know that you need it when you have thousands of FIN_WAIT1
2214 sessions on your system (TIME_WAIT ones do not count).
2215
2216 This option may be used both on frontends and backends, depending on the side
2217 where it is required. Use it on the frontend for clients, and on the backend
2218 for servers.
2219
2220 If this option has been enabled in a "defaults" section, it can be disabled
2221 in a specific instance by prepending the "no" keyword before it.
2222
2223
2224option persist
2225no option persist
2226 Enable or disable forced persistence on down servers
2227 May be used in sections: defaults | frontend | listen | backend
2228 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002229 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002230
2231 When an HTTP request reaches a backend with a cookie which references a dead
2232 server, by default it is redispatched to another server. It is possible to
2233 force the request to be sent to the dead server first using "option persist"
2234 if absolutely needed. A common use case is when servers are under extreme
2235 load and spend their time flapping. In this case, the users would still be
2236 directed to the server they opened the session on, in the hope they would be
2237 correctly served. It is recommended to use "option redispatch" in conjunction
2238 with this option so that in the event it would not be possible to connect to
2239 the server at all (server definitely dead), the client would finally be
2240 redirected to another valid server.
2241
2242 If this option has been enabled in a "defaults" section, it can be disabled
2243 in a specific instance by prepending the "no" keyword before it.
2244
2245 See also : "option redispatch", "retries"
2246
2247
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002248option redispatch
2249no option redispatch
2250 Enable or disable session redistribution in case of connection failure
2251 May be used in sections: defaults | frontend | listen | backend
2252 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002253 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002254
2255 In HTTP mode, if a server designated by a cookie is down, clients may
2256 definitely stick to it because they cannot flush the cookie, so they will not
2257 be able to access the service anymore.
2258
2259 Specifying "option redispatch" will allow the proxy to break their
2260 persistence and redistribute them to a working server.
2261
2262 It also allows to retry last connection to another server in case of multiple
2263 connection failures. Of course, it requires having "retries" set to a nonzero
2264 value.
2265
2266 This form is the preferred form, which replaces both the "redispatch" and
2267 "redisp" keywords.
2268
2269 If this option has been enabled in a "defaults" section, it can be disabled
2270 in a specific instance by prepending the "no" keyword before it.
2271
2272 See also : "redispatch", "retries"
2273
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002274
2275option smtpchk
2276option smtpchk <hello> <domain>
2277 Use SMTP health checks for server testing
2278 May be used in sections : defaults | frontend | listen | backend
2279 yes | no | yes | yes
2280 Arguments :
2281 <hello> is an optional argument. It is the "hello" command to use. It can
2282 be either "HELO" (for SMTP) or "EHLO" (for ESTMP). All other
2283 values will be turned into the default command ("HELO").
2284
2285 <domain> is the domain name to present to the server. It may only be
2286 specified (and is mandatory) if the hello command has been
2287 specified. By default, "localhost" is used.
2288
2289 When "option smtpchk" is set, the health checks will consist in TCP
2290 connections followed by an SMTP command. By default, this command is
2291 "HELO localhost". The server's return code is analyzed and only return codes
2292 starting with a "2" will be considered as valid. All other responses,
2293 including a lack of response will constitute an error and will indicate a
2294 dead server.
2295
2296 This test is meant to be used with SMTP servers or relays. Depending on the
2297 request, it is possible that some servers do not log each connection attempt,
2298 so you may want to experiment to improve the behaviour. Using telnet on port
2299 25 is often easier than adjusting the configuration.
2300
2301 Most often, an incoming SMTP server needs to see the client's IP address for
2302 various purposes, including spam filtering, anti-spoofing and logging. When
2303 possible, it is often wise to masquerade the client's IP address when
2304 connecting to the server using the "usesrc" argument of the "source" keyword,
2305 which requires the cttproxy feature to be compiled in.
2306
2307 Example :
2308 option smtpchk HELO mydomain.org
2309
2310 See also : "option httpchk", "source"
2311
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002312
Willy Tarreauff4f82d2009-02-06 11:28:13 +01002313option splice-auto
2314no option splice-auto
2315 Enable or disable automatic kernel acceleration on sockets in both directions
2316 May be used in sections : defaults | frontend | listen | backend
2317 yes | yes | yes | yes
2318 Arguments : none
2319
2320 When this option is enabled either on a frontend or on a backend, haproxy
2321 will automatically evaluate the opportunity to use kernel tcp splicing to
2322 forward data between the client and the server, in either direction. Haproxy
2323 uses heuristics to estimate if kernel splicing might improve performance or
2324 not. Both directions are handled independantly. Note that the heuristics used
2325 are not much aggressive in order to limit excessive use of splicing. This
2326 option requires splicing to be enabled at compile time, and may be globally
2327 disabled with the global option "nosplice". Since splice uses pipes, using it
2328 requires that there are enough spare pipes.
2329
2330 Important note: kernel-based TCP splicing is a Linux-specific feature which
2331 first appeared in kernel 2.6.25. It offers kernel-based acceleration to
2332 transfer data between sockets without copying these data to user-space, thus
2333 providing noticeable performance gains and CPU cycles savings. Since many
2334 early implementations are buggy, corrupt data and/or are inefficient, this
2335 feature is not enabled by default, and it should be used with extreme care.
2336 While it is not possible to detect the correctness of an implementation,
2337 2.6.29 is the first version offering a properly working implementation. In
2338 case of doubt, splicing may be globally disabled using the global "nosplice"
2339 keyword.
2340
2341 Example :
2342 option splice-auto
2343
2344 If this option has been enabled in a "defaults" section, it can be disabled
2345 in a specific instance by prepending the "no" keyword before it.
2346
2347 See also : "option splice-request", "option splice-response", and global
2348 options "nosplice" and "maxpipes"
2349
2350
2351option splice-request
2352no option splice-request
2353 Enable or disable automatic kernel acceleration on sockets for requests
2354 May be used in sections : defaults | frontend | listen | backend
2355 yes | yes | yes | yes
2356 Arguments : none
2357
2358 When this option is enabled either on a frontend or on a backend, haproxy
2359 will user kernel tcp splicing whenever possible to forward data going from
2360 the client to the server. It might still use the recv/send scheme if there
2361 are no spare pipes left. This option requires splicing to be enabled at
2362 compile time, and may be globally disabled with the global option "nosplice".
2363 Since splice uses pipes, using it requires that there are enough spare pipes.
2364
2365 Important note: see "option splice-auto" for usage limitations.
2366
2367 Example :
2368 option splice-request
2369
2370 If this option has been enabled in a "defaults" section, it can be disabled
2371 in a specific instance by prepending the "no" keyword before it.
2372
2373 See also : "option splice-auto", "option splice-response", and global options
2374 "nosplice" and "maxpipes"
2375
2376
2377option splice-response
2378no option splice-response
2379 Enable or disable automatic kernel acceleration on sockets for responses
2380 May be used in sections : defaults | frontend | listen | backend
2381 yes | yes | yes | yes
2382 Arguments : none
2383
2384 When this option is enabled either on a frontend or on a backend, haproxy
2385 will user kernel tcp splicing whenever possible to forward data going from
2386 the server to the client. It might still use the recv/send scheme if there
2387 are no spare pipes left. This option requires splicing to be enabled at
2388 compile time, and may be globally disabled with the global option "nosplice".
2389 Since splice uses pipes, using it requires that there are enough spare pipes.
2390
2391 Important note: see "option splice-auto" for usage limitations.
2392
2393 Example :
2394 option splice-response
2395
2396 If this option has been enabled in a "defaults" section, it can be disabled
2397 in a specific instance by prepending the "no" keyword before it.
2398
2399 See also : "option splice-auto", "option splice-request", and global options
2400 "nosplice" and "maxpipes"
2401
2402
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002403option srvtcpka
2404no option srvtcpka
2405 Enable or disable the sending of TCP keepalive packets on the server side
2406 May be used in sections : defaults | frontend | listen | backend
2407 yes | no | yes | yes
2408 Arguments : none
2409
2410 When there is a firewall or any session-aware component between a client and
2411 a server, and when the protocol involves very long sessions with long idle
2412 periods (eg: remote desktops), there is a risk that one of the intermediate
2413 components decides to expire a session which has remained idle for too long.
2414
2415 Enabling socket-level TCP keep-alives makes the system regularly send packets
2416 to the other end of the connection, leaving it active. The delay between
2417 keep-alive probes is controlled by the system only and depends both on the
2418 operating system and its tuning parameters.
2419
2420 It is important to understand that keep-alive packets are neither emitted nor
2421 received at the application level. It is only the network stacks which sees
2422 them. For this reason, even if one side of the proxy already uses keep-alives
2423 to maintain its connection alive, those keep-alive packets will not be
2424 forwarded to the other side of the proxy.
2425
2426 Please note that this has nothing to do with HTTP keep-alive.
2427
2428 Using option "srvtcpka" enables the emission of TCP keep-alive probes on the
2429 server side of a connection, which should help when session expirations are
2430 noticed between HAProxy and a server.
2431
2432 If this option has been enabled in a "defaults" section, it can be disabled
2433 in a specific instance by prepending the "no" keyword before it.
2434
2435 See also : "option clitcpka", "option tcpka"
2436
2437
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002438option ssl-hello-chk
2439 Use SSLv3 client hello health checks for server testing
2440 May be used in sections : defaults | frontend | listen | backend
2441 yes | no | yes | yes
2442 Arguments : none
2443
2444 When some SSL-based protocols are relayed in TCP mode through HAProxy, it is
2445 possible to test that the server correctly talks SSL instead of just testing
2446 that it accepts the TCP connection. When "option ssl-hello-chk" is set, pure
2447 SSLv3 client hello messages are sent once the connection is established to
2448 the server, and the response is analyzed to find an SSL server hello message.
2449 The server is considered valid only when the response contains this server
2450 hello message.
2451
2452 All servers tested till there correctly reply to SSLv3 client hello messages,
2453 and most servers tested do not even log the requests containing only hello
2454 messages, which is appreciable.
2455
2456 See also: "option httpchk"
2457
2458
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002459option tcpka
2460 Enable or disable the sending of TCP keepalive packets on both sides
2461 May be used in sections : defaults | frontend | listen | backend
2462 yes | yes | yes | yes
2463 Arguments : none
2464
2465 When there is a firewall or any session-aware component between a client and
2466 a server, and when the protocol involves very long sessions with long idle
2467 periods (eg: remote desktops), there is a risk that one of the intermediate
2468 components decides to expire a session which has remained idle for too long.
2469
2470 Enabling socket-level TCP keep-alives makes the system regularly send packets
2471 to the other end of the connection, leaving it active. The delay between
2472 keep-alive probes is controlled by the system only and depends both on the
2473 operating system and its tuning parameters.
2474
2475 It is important to understand that keep-alive packets are neither emitted nor
2476 received at the application level. It is only the network stacks which sees
2477 them. For this reason, even if one side of the proxy already uses keep-alives
2478 to maintain its connection alive, those keep-alive packets will not be
2479 forwarded to the other side of the proxy.
2480
2481 Please note that this has nothing to do with HTTP keep-alive.
2482
2483 Using option "tcpka" enables the emission of TCP keep-alive probes on both
2484 the client and server sides of a connection. Note that this is meaningful
2485 only in "defaults" or "listen" sections. If this option is used in a
2486 frontend, only the client side will get keep-alives, and if this option is
2487 used in a backend, only the server side will get keep-alives. For this
2488 reason, it is strongly recommended to explicitly use "option clitcpka" and
2489 "option srvtcpka" when the configuration is split between frontends and
2490 backends.
2491
2492 See also : "option clitcpka", "option srvtcpka"
2493
Willy Tarreau844e3c52008-01-11 16:28:18 +01002494
2495option tcplog
2496 Enable advanced logging of TCP connections with session state and timers
2497 May be used in sections : defaults | frontend | listen | backend
2498 yes | yes | yes | yes
2499 Arguments : none
2500
2501 By default, the log output format is very poor, as it only contains the
2502 source and destination addresses, and the instance name. By specifying
2503 "option tcplog", each log line turns into a much richer format including, but
2504 not limited to, the connection timers, the session status, the connections
2505 numbers, the frontend, backend and server name, and of course the source
2506 address and ports. This option is useful for pure TCP proxies in order to
2507 find which of the client or server disconnects or times out. For normal HTTP
2508 proxies, it's better to use "option httplog" which is even more complete.
2509
2510 This option may be set either in the frontend or the backend.
2511
Willy Tarreauced27012008-01-17 20:35:34 +01002512 See also : "option httplog", and section 2.6 about logging.
Willy Tarreau844e3c52008-01-11 16:28:18 +01002513
2514
2515option tcpsplice [ experimental ]
2516 Enable linux kernel-based acceleration of data relaying
2517 May be used in sections : defaults | frontend | listen | backend
2518 yes | yes | yes | yes
2519 Arguments : none
2520
2521 This option is only available when HAProxy has been built for use on Linux
2522 with USE_TCPSPLICE=1. This option requires a kernel patch which is available
2523 on http://www.linux-l7sw.org/.
2524
2525 When "option tcpsplice" is set, as soon as the server's response headers have
2526 been transferred, the session handling is transferred to the kernel which
2527 will forward all subsequent data from the server to the client untill the
2528 session closes. This leads to much faster data transfers between client and
2529 server since the data is not copied twice between kernel and user space, but
2530 there are some limitations such as the lack of information about the number
2531 of bytes transferred and the total transfer time.
2532
2533 This is an experimental feature. It happens to reliably work but issues
2534 caused by corner cases are to be expected.
2535
2536 Note that this option requires that the process permanently runs with
2537 CAP_NETADMIN privileges, which most often translates into running as root.
2538
2539
2540option transparent
2541no option transparent
2542 Enable client-side transparent proxying
2543 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +01002544 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +01002545 Arguments : none
2546
2547 This option was introduced in order to provide layer 7 persistence to layer 3
2548 load balancers. The idea is to use the OS's ability to redirect an incoming
2549 connection for a remote address to a local process (here HAProxy), and let
2550 this process know what address was initially requested. When this option is
2551 used, sessions without cookies will be forwarded to the original destination
2552 IP address of the incoming request (which should match that of another
2553 equipment), while requests with cookies will still be forwarded to the
2554 appropriate server.
2555
2556 Note that contrary to a common belief, this option does NOT make HAProxy
2557 present the client's IP to the server when establishing the connection.
2558
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002559 See also: the "usersrc" argument of the "source" keyword, and the
2560 "transparent" option of the "bind" keyword.
Willy Tarreau844e3c52008-01-11 16:28:18 +01002561
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002562
Willy Tarreau0140f252008-11-19 21:07:09 +01002563redirect location <to> [code <code>] <option> {if | unless} <condition>
2564redirect prefix <to> [code <code>] <option> {if | unless} <condition>
Willy Tarreaub463dfb2008-06-07 23:08:56 +02002565 Return an HTTP redirection if/unless a condition is matched
2566 May be used in sections : defaults | frontend | listen | backend
2567 no | yes | yes | yes
2568
2569 If/unless the condition is matched, the HTTP request will lead to a redirect
Willy Tarreau0140f252008-11-19 21:07:09 +01002570 response.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02002571
Willy Tarreau0140f252008-11-19 21:07:09 +01002572 Arguments :
2573 <to> With "redirect location", the exact value in <to> is placed into
2574 the HTTP "Location" header. In case of "redirect prefix", the
2575 "Location" header is built from the concatenation of <to> and the
2576 complete URI, including the query string, unless the "drop-query"
Willy Tarreaufe651a52008-11-19 21:15:17 +01002577 option is specified (see below). As a special case, if <to>
2578 equals exactly "/" in prefix mode, then nothing is inserted
2579 before the original URI. It allows one to redirect to the same
2580 URL.
Willy Tarreau0140f252008-11-19 21:07:09 +01002581
2582 <code> The code is optional. It indicates which type of HTTP redirection
2583 is desired. Only codes 301, 302 and 303 are supported, and 302 is
2584 used if no code is specified. 301 means "Moved permanently", and
2585 a browser may cache the Location. 302 means "Moved permanently"
2586 and means that the browser should not cache the redirection. 303
2587 is equivalent to 302 except that the browser will fetch the
2588 location with a GET method.
2589
2590 <option> There are several options which can be specified to adjust the
2591 expected behaviour of a redirection :
2592
2593 - "drop-query"
2594 When this keyword is used in a prefix-based redirection, then the
2595 location will be set without any possible query-string, which is useful
2596 for directing users to a non-secure page for instance. It has no effect
2597 with a location-type redirect.
2598
2599 - "set-cookie NAME[=value]"
2600 A "Set-Cookie" header will be added with NAME (and optionally "=value")
2601 to the response. This is sometimes used to indicate that a user has
2602 been seen, for instance to protect against some types of DoS. No other
2603 cookie option is added, so the cookie will be a session cookie. Note
2604 that for a browser, a sole cookie name without an equal sign is
2605 different from a cookie with an equal sign.
2606
2607 - "clear-cookie NAME[=]"
2608 A "Set-Cookie" header will be added with NAME (and optionally "="), but
2609 with the "Max-Age" attribute set to zero. This will tell the browser to
2610 delete this cookie. It is useful for instance on logout pages. It is
2611 important to note that clearing the cookie "NAME" will not remove a
2612 cookie set with "NAME=value". You have to clear the cookie "NAME=" for
2613 that, because the browser makes the difference.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02002614
2615 Example: move the login URL only to HTTPS.
2616 acl clear dst_port 80
2617 acl secure dst_port 8080
2618 acl login_page url_beg /login
Willy Tarreau0140f252008-11-19 21:07:09 +01002619 acl logout url_beg /logout
Willy Tarreau79da4692008-11-19 20:03:04 +01002620 acl uid_given url_reg /login?userid=[^&]+
Willy Tarreau0140f252008-11-19 21:07:09 +01002621 acl cookie_set hdr_sub(cookie) SEEN=1
2622
2623 redirect prefix https://mysite.com set-cookie SEEN=1 if !cookie_set
Willy Tarreau79da4692008-11-19 20:03:04 +01002624 redirect prefix https://mysite.com if login_page !secure
2625 redirect prefix http://mysite.com drop-query if login_page !uid_given
2626 redirect location http://mysite.com/ if !login_page secure
Willy Tarreau0140f252008-11-19 21:07:09 +01002627 redirect location / clear-cookie USERID= if logout
Willy Tarreaub463dfb2008-06-07 23:08:56 +02002628
2629 See section 2.3 about ACL usage.
2630
2631
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002632redisp (deprecated)
2633redispatch (deprecated)
2634 Enable or disable session redistribution in case of connection failure
2635 May be used in sections: defaults | frontend | listen | backend
2636 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002637 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002638
2639 In HTTP mode, if a server designated by a cookie is down, clients may
2640 definitely stick to it because they cannot flush the cookie, so they will not
2641 be able to access the service anymore.
2642
2643 Specifying "redispatch" will allow the proxy to break their persistence and
2644 redistribute them to a working server.
2645
2646 It also allows to retry last connection to another server in case of multiple
2647 connection failures. Of course, it requires having "retries" set to a nonzero
2648 value.
2649
2650 This form is deprecated, do not use it in any new configuration, use the new
2651 "option redispatch" instead.
2652
2653 See also : "option redispatch"
2654
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002655
Willy Tarreau303c0352008-01-17 19:01:39 +01002656reqadd <string>
2657 Add a header at the end of the HTTP request
2658 May be used in sections : defaults | frontend | listen | backend
2659 no | yes | yes | yes
2660 Arguments :
2661 <string> is the complete line to be added. Any space or known delimiter
2662 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002663 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002664
2665 A new line consisting in <string> followed by a line feed will be added after
2666 the last header of an HTTP request.
2667
2668 Header transformations only apply to traffic which passes through HAProxy,
2669 and not to traffic generated by HAProxy, such as health-checks or error
2670 responses.
2671
Willy Tarreauced27012008-01-17 20:35:34 +01002672 See also: "rspadd" and section 2.5 about HTTP header manipulation
Willy Tarreau303c0352008-01-17 19:01:39 +01002673
2674
2675reqallow <search>
2676reqiallow <search> (ignore case)
2677 Definitely allow an HTTP request if a line matches a regular expression
2678 May be used in sections : defaults | frontend | listen | backend
2679 no | yes | yes | yes
2680 Arguments :
2681 <search> is the regular expression applied to HTTP headers and to the
2682 request line. This is an extended regular expression. Parenthesis
2683 grouping is supported and no preliminary backslash is required.
2684 Any space or known delimiter must be escaped using a backslash
2685 ('\'). The pattern applies to a full line at a time. The
2686 "reqallow" keyword strictly matches case while "reqiallow"
2687 ignores case.
2688
2689 A request containing any line which matches extended regular expression
2690 <search> will mark the request as allowed, even if any later test would
2691 result in a deny. The test applies both to the request line and to request
2692 headers. Keep in mind that URLs in request line are case-sensitive while
2693 header names are not.
2694
2695 It is easier, faster and more powerful to use ACLs to write access policies.
2696 Reqdeny, reqallow and reqpass should be avoided in new designs.
2697
2698 Example :
2699 # allow www.* but refuse *.local
2700 reqiallow ^Host:\ www\.
2701 reqideny ^Host:\ .*\.local
2702
Willy Tarreauced27012008-01-17 20:35:34 +01002703 See also: "reqdeny", "acl", "block" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002704 manipulation
2705
2706
2707reqdel <search>
2708reqidel <search> (ignore case)
2709 Delete all headers matching a regular expression in an HTTP request
2710 May be used in sections : defaults | frontend | listen | backend
2711 no | yes | yes | yes
2712 Arguments :
2713 <search> is the regular expression applied to HTTP headers and to the
2714 request line. This is an extended regular expression. Parenthesis
2715 grouping is supported and no preliminary backslash is required.
2716 Any space or known delimiter must be escaped using a backslash
2717 ('\'). The pattern applies to a full line at a time. The "reqdel"
2718 keyword strictly matches case while "reqidel" ignores case.
2719
2720 Any header line matching extended regular expression <search> in the request
2721 will be completely deleted. Most common use of this is to remove unwanted
2722 and/or dangerous headers or cookies from a request before passing it to the
2723 next servers.
2724
2725 Header transformations only apply to traffic which passes through HAProxy,
2726 and not to traffic generated by HAProxy, such as health-checks or error
2727 responses. Keep in mind that header names are not case-sensitive.
2728
2729 Example :
2730 # remove X-Forwarded-For header and SERVER cookie
2731 reqidel ^X-Forwarded-For:.*
2732 reqidel ^Cookie:.*SERVER=
2733
Willy Tarreauced27012008-01-17 20:35:34 +01002734 See also: "reqadd", "reqrep", "rspdel" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002735 manipulation
2736
2737
2738reqdeny <search>
2739reqideny <search> (ignore case)
2740 Deny an HTTP request if a line matches a regular expression
2741 May be used in sections : defaults | frontend | listen | backend
2742 no | yes | yes | yes
2743 Arguments :
2744 <search> is the regular expression applied to HTTP headers and to the
2745 request line. This is an extended regular expression. Parenthesis
2746 grouping is supported and no preliminary backslash is required.
2747 Any space or known delimiter must be escaped using a backslash
2748 ('\'). The pattern applies to a full line at a time. The
2749 "reqdeny" keyword strictly matches case while "reqideny" ignores
2750 case.
2751
2752 A request containing any line which matches extended regular expression
2753 <search> will mark the request as denied, even if any later test would
2754 result in an allow. The test applies both to the request line and to request
2755 headers. Keep in mind that URLs in request line are case-sensitive while
2756 header names are not.
2757
Willy Tarreauced27012008-01-17 20:35:34 +01002758 A denied request will generate an "HTTP 403 forbidden" response once the
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002759 complete request has been parsed. This is consistent with what is practiced
Willy Tarreauced27012008-01-17 20:35:34 +01002760 using ACLs.
2761
Willy Tarreau303c0352008-01-17 19:01:39 +01002762 It is easier, faster and more powerful to use ACLs to write access policies.
2763 Reqdeny, reqallow and reqpass should be avoided in new designs.
2764
2765 Example :
2766 # refuse *.local, then allow www.*
2767 reqideny ^Host:\ .*\.local
2768 reqiallow ^Host:\ www\.
2769
Willy Tarreauced27012008-01-17 20:35:34 +01002770 See also: "reqallow", "rspdeny", "acl", "block" and section 2.5 about HTTP
Willy Tarreau303c0352008-01-17 19:01:39 +01002771 header manipulation
2772
2773
2774reqpass <search>
2775reqipass <search> (ignore case)
2776 Ignore any HTTP request line matching a regular expression in next rules
2777 May be used in sections : defaults | frontend | listen | backend
2778 no | yes | yes | yes
2779 Arguments :
2780 <search> is the regular expression applied to HTTP headers and to the
2781 request line. This is an extended regular expression. Parenthesis
2782 grouping is supported and no preliminary backslash is required.
2783 Any space or known delimiter must be escaped using a backslash
2784 ('\'). The pattern applies to a full line at a time. The
2785 "reqpass" keyword strictly matches case while "reqipass" ignores
2786 case.
2787
2788 A request containing any line which matches extended regular expression
2789 <search> will skip next rules, without assigning any deny or allow verdict.
2790 The test applies both to the request line and to request headers. Keep in
2791 mind that URLs in request line are case-sensitive while header names are not.
2792
2793 It is easier, faster and more powerful to use ACLs to write access policies.
2794 Reqdeny, reqallow and reqpass should be avoided in new designs.
2795
2796 Example :
2797 # refuse *.local, then allow www.*, but ignore "www.private.local"
2798 reqipass ^Host:\ www.private\.local
2799 reqideny ^Host:\ .*\.local
2800 reqiallow ^Host:\ www\.
2801
Willy Tarreauced27012008-01-17 20:35:34 +01002802 See also: "reqallow", "reqdeny", "acl", "block" and section 2.5 about HTTP
Willy Tarreau303c0352008-01-17 19:01:39 +01002803 header manipulation
2804
2805
2806reqrep <search> <string>
2807reqirep <search> <string> (ignore case)
2808 Replace a regular expression with a string in an HTTP request line
2809 May be used in sections : defaults | frontend | listen | backend
2810 no | yes | yes | yes
2811 Arguments :
2812 <search> is the regular expression applied to HTTP headers and to the
2813 request line. This is an extended regular expression. Parenthesis
2814 grouping is supported and no preliminary backslash is required.
2815 Any space or known delimiter must be escaped using a backslash
2816 ('\'). The pattern applies to a full line at a time. The "reqrep"
2817 keyword strictly matches case while "reqirep" ignores case.
2818
2819 <string> is the complete line to be added. Any space or known delimiter
2820 must be escaped using a backslash ('\'). References to matched
2821 pattern groups are possible using the common \N form, with N
2822 being a single digit between 0 and 9. Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002823 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002824
2825 Any line matching extended regular expression <search> in the request (both
2826 the request line and header lines) will be completely replaced with <string>.
2827 Most common use of this is to rewrite URLs or domain names in "Host" headers.
2828
2829 Header transformations only apply to traffic which passes through HAProxy,
2830 and not to traffic generated by HAProxy, such as health-checks or error
2831 responses. Note that for increased readability, it is suggested to add enough
2832 spaces between the request and the response. Keep in mind that URLs in
2833 request line are case-sensitive while header names are not.
2834
2835 Example :
2836 # replace "/static/" with "/" at the beginning of any request path.
2837 reqrep ^([^\ ]*)\ /static/(.*) \1\ /\2
2838 # replace "www.mydomain.com" with "www" in the host name.
2839 reqirep ^Host:\ www.mydomain.com Host:\ www
2840
Willy Tarreauced27012008-01-17 20:35:34 +01002841 See also: "reqadd", "reqdel", "rsprep" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002842 manipulation
2843
2844
2845reqtarpit <search>
2846reqitarpit <search> (ignore case)
2847 Tarpit an HTTP request containing a line matching a regular expression
2848 May be used in sections : defaults | frontend | listen | backend
2849 no | yes | yes | yes
2850 Arguments :
2851 <search> is the regular expression applied to HTTP headers and to the
2852 request line. This is an extended regular expression. Parenthesis
2853 grouping is supported and no preliminary backslash is required.
2854 Any space or known delimiter must be escaped using a backslash
2855 ('\'). The pattern applies to a full line at a time. The
2856 "reqtarpit" keyword strictly matches case while "reqitarpit"
2857 ignores case.
2858
2859 A request containing any line which matches extended regular expression
2860 <search> will be tarpitted, which means that it will connect to nowhere, will
Willy Tarreauced27012008-01-17 20:35:34 +01002861 be kept open for a pre-defined time, then will return an HTTP error 500 so
2862 that the attacker does not suspect it has been tarpitted. The status 500 will
2863 be reported in the logs, but the completion flags will indicate "PT". The
Willy Tarreau303c0352008-01-17 19:01:39 +01002864 delay is defined by "timeout tarpit", or "timeout connect" if the former is
2865 not set.
2866
2867 The goal of the tarpit is to slow down robots attacking servers with
2868 identifiable requests. Many robots limit their outgoing number of connections
2869 and stay connected waiting for a reply which can take several minutes to
2870 come. Depending on the environment and attack, it may be particularly
2871 efficient at reducing the load on the network and firewalls.
2872
2873 Example :
2874 # ignore user-agents reporting any flavour of "Mozilla" or "MSIE", but
2875 # block all others.
2876 reqipass ^User-Agent:\.*(Mozilla|MSIE)
2877 reqitarpit ^User-Agent:
2878
Willy Tarreauced27012008-01-17 20:35:34 +01002879 See also: "reqallow", "reqdeny", "reqpass", and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002880 manipulation
2881
2882
Willy Tarreaue5c5ce92008-06-20 17:27:19 +02002883retries <value>
2884 Set the number of retries to perform on a server after a connection failure
2885 May be used in sections: defaults | frontend | listen | backend
2886 yes | no | yes | yes
2887 Arguments :
2888 <value> is the number of times a connection attempt should be retried on
2889 a server when a connection either is refused or times out. The
2890 default value is 3.
2891
2892 It is important to understand that this value applies to the number of
2893 connection attempts, not full requests. When a connection has effectively
2894 been established to a server, there will be no more retry.
2895
2896 In order to avoid immediate reconnections to a server which is restarting,
2897 a turn-around timer of 1 second is applied before a retry occurs.
2898
2899 When "option redispatch" is set, the last retry may be performed on another
2900 server even if a cookie references a different server.
2901
2902 See also : "option redispatch"
2903
2904
Willy Tarreau303c0352008-01-17 19:01:39 +01002905rspadd <string>
2906 Add a header at the end of the HTTP response
2907 May be used in sections : defaults | frontend | listen | backend
2908 no | yes | yes | yes
2909 Arguments :
2910 <string> is the complete line to be added. Any space or known delimiter
2911 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002912 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002913
2914 A new line consisting in <string> followed by a line feed will be added after
2915 the last header of an HTTP response.
2916
2917 Header transformations only apply to traffic which passes through HAProxy,
2918 and not to traffic generated by HAProxy, such as health-checks or error
2919 responses.
2920
Willy Tarreauced27012008-01-17 20:35:34 +01002921 See also: "reqadd" and section 2.5 about HTTP header manipulation
Willy Tarreau303c0352008-01-17 19:01:39 +01002922
2923
2924rspdel <search>
2925rspidel <search> (ignore case)
2926 Delete all headers matching a regular expression in an HTTP response
2927 May be used in sections : defaults | frontend | listen | backend
2928 no | yes | yes | yes
2929 Arguments :
2930 <search> is the regular expression applied to HTTP headers and to the
2931 response line. This is an extended regular expression, so
2932 parenthesis grouping is supported and no preliminary backslash
2933 is required. Any space or known delimiter must be escaped using
2934 a backslash ('\'). The pattern applies to a full line at a time.
2935 The "rspdel" keyword strictly matches case while "rspidel"
2936 ignores case.
2937
2938 Any header line matching extended regular expression <search> in the response
2939 will be completely deleted. Most common use of this is to remove unwanted
2940 and/or sensible headers or cookies from a response before passing it to the
2941 client.
2942
2943 Header transformations only apply to traffic which passes through HAProxy,
2944 and not to traffic generated by HAProxy, such as health-checks or error
2945 responses. Keep in mind that header names are not case-sensitive.
2946
2947 Example :
2948 # remove the Server header from responses
2949 reqidel ^Server:.*
2950
Willy Tarreauced27012008-01-17 20:35:34 +01002951 See also: "rspadd", "rsprep", "reqdel" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002952 manipulation
2953
2954
2955rspdeny <search>
2956rspideny <search> (ignore case)
2957 Block an HTTP response if a line matches a regular expression
2958 May be used in sections : defaults | frontend | listen | backend
2959 no | yes | yes | yes
2960 Arguments :
2961 <search> is the regular expression applied to HTTP headers and to the
2962 response line. This is an extended regular expression, so
2963 parenthesis grouping is supported and no preliminary backslash
2964 is required. Any space or known delimiter must be escaped using
2965 a backslash ('\'). The pattern applies to a full line at a time.
2966 The "rspdeny" keyword strictly matches case while "rspideny"
2967 ignores case.
2968
2969 A response containing any line which matches extended regular expression
2970 <search> will mark the request as denied. The test applies both to the
2971 response line and to response headers. Keep in mind that header names are not
2972 case-sensitive.
2973
2974 Main use of this keyword is to prevent sensitive information leak and to
Willy Tarreauced27012008-01-17 20:35:34 +01002975 block the response before it reaches the client. If a response is denied, it
2976 will be replaced with an HTTP 502 error so that the client never retrieves
2977 any sensitive data.
Willy Tarreau303c0352008-01-17 19:01:39 +01002978
2979 It is easier, faster and more powerful to use ACLs to write access policies.
2980 Rspdeny should be avoided in new designs.
2981
2982 Example :
2983 # Ensure that no content type matching ms-word will leak
2984 rspideny ^Content-type:\.*/ms-word
2985
Willy Tarreauced27012008-01-17 20:35:34 +01002986 See also: "reqdeny", "acl", "block" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002987 manipulation
2988
2989
2990rsprep <search> <string>
2991rspirep <search> <string> (ignore case)
2992 Replace a regular expression with a string in an HTTP response line
2993 May be used in sections : defaults | frontend | listen | backend
2994 no | yes | yes | yes
2995 Arguments :
2996 <search> is the regular expression applied to HTTP headers and to the
2997 response line. This is an extended regular expression, so
2998 parenthesis grouping is supported and no preliminary backslash
2999 is required. Any space or known delimiter must be escaped using
3000 a backslash ('\'). The pattern applies to a full line at a time.
3001 The "rsprep" keyword strictly matches case while "rspirep"
3002 ignores case.
3003
3004 <string> is the complete line to be added. Any space or known delimiter
3005 must be escaped using a backslash ('\'). References to matched
3006 pattern groups are possible using the common \N form, with N
3007 being a single digit between 0 and 9. Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01003008 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01003009
3010 Any line matching extended regular expression <search> in the response (both
3011 the response line and header lines) will be completely replaced with
3012 <string>. Most common use of this is to rewrite Location headers.
3013
3014 Header transformations only apply to traffic which passes through HAProxy,
3015 and not to traffic generated by HAProxy, such as health-checks or error
3016 responses. Note that for increased readability, it is suggested to add enough
3017 spaces between the request and the response. Keep in mind that header names
3018 are not case-sensitive.
3019
3020 Example :
3021 # replace "Location: 127.0.0.1:8080" with "Location: www.mydomain.com"
3022 rspirep ^Location:\ 127.0.0.1:8080 Location:\ www.mydomain.com
3023
Willy Tarreauced27012008-01-17 20:35:34 +01003024 See also: "rspadd", "rspdel", "reqrep" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01003025 manipulation
3026
3027
Willy Tarreaueabeafa2008-01-16 16:17:06 +01003028server <name> <address>[:port] [param*]
3029 Declare a server in a backend
3030 May be used in sections : defaults | frontend | listen | backend
3031 no | no | yes | yes
3032 Arguments :
3033 <name> is the internal name assigned to this server. This name will
3034 appear in logs and alerts.
3035
3036 <address> is the IPv4 address of the server. Alternatively, a resolvable
3037 hostname is supported, but this name will be resolved during
3038 start-up.
3039
3040 <ports> is an optional port specification. If set, all connections will
3041 be sent to this port. If unset, the same port the client
3042 connected to will be used. The port may also be prefixed by a "+"
3043 or a "-". In this case, the server's port will be determined by
3044 adding this value to the client's port.
3045
3046 <param*> is a list of parameters for this server. The "server" keywords
3047 accepts an important number of options and has a complete section
3048 dedicated to it. Please refer to section 2.4 for more details.
3049
3050 Examples :
3051 server first 10.1.1.1:1080 cookie first check inter 1000
3052 server second 10.1.1.2:1080 cookie second check inter 1000
3053
3054 See also : section 2.4 about server options
3055
3056
3057source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreaud53f96b2009-02-04 18:46:54 +01003058source <addr>[:<port>] [interface <name>]
Willy Tarreaueabeafa2008-01-16 16:17:06 +01003059 Set the source address for outgoing connections
3060 May be used in sections : defaults | frontend | listen | backend
3061 yes | no | yes | yes
3062 Arguments :
3063 <addr> is the IPv4 address HAProxy will bind to before connecting to a
3064 server. This address is also used as a source for health checks.
3065 The default value of 0.0.0.0 means that the system will select
3066 the most appropriate address to reach its destination.
3067
3068 <port> is an optional port. It is normally not needed but may be useful
3069 in some very specific contexts. The default value of zero means
3070 the system will select a free port.
3071
3072 <addr2> is the IP address to present to the server when connections are
3073 forwarded in full transparent proxy mode. This is currently only
3074 supported on some patched Linux kernels. When this address is
3075 specified, clients connecting to the server will be presented
3076 with this address, while health checks will still use the address
3077 <addr>.
3078
3079 <port2> is the optional port to present to the server when connections
3080 are forwarded in full transparent proxy mode (see <addr2> above).
3081 The default value of zero means the system will select a free
3082 port.
3083
Willy Tarreaud53f96b2009-02-04 18:46:54 +01003084 <name> is an optional interface name to which to bind to for outgoing
3085 traffic. On systems supporting this features (currently, only
3086 Linux), this allows one to bind all traffic to the server to
3087 this interface even if it is not the one the system would select
3088 based on routing tables. This should be used with extreme care.
3089 Note that using this option requires root privileges.
3090
Willy Tarreaueabeafa2008-01-16 16:17:06 +01003091 The "source" keyword is useful in complex environments where a specific
3092 address only is allowed to connect to the servers. It may be needed when a
3093 private address must be used through a public gateway for instance, and it is
3094 known that the system cannot determine the adequate source address by itself.
3095
3096 An extension which is available on certain patched Linux kernels may be used
3097 through the "usesrc" optional keyword. It makes it possible to connect to the
3098 servers with an IP address which does not belong to the system itself. This
3099 is called "full transparent proxy mode". For this to work, the destination
3100 servers have to route their traffic back to this address through the machine
3101 running HAProxy, and IP forwarding must generally be enabled on this machine.
3102
3103 In this "full transparent proxy" mode, it is possible to force a specific IP
3104 address to be presented to the servers. This is not much used in fact. A more
3105 common use is to tell HAProxy to present the client's IP address. For this,
3106 there are two methods :
3107
3108 - present the client's IP and port addresses. This is the most transparent
3109 mode, but it can cause problems when IP connection tracking is enabled on
3110 the machine, because a same connection may be seen twice with different
3111 states. However, this solution presents the huge advantage of not
3112 limiting the system to the 64k outgoing address+port couples, because all
3113 of the client ranges may be used.
3114
3115 - present only the client's IP address and select a spare port. This
3116 solution is still quite elegant but slightly less transparent (downstream
3117 firewalls logs will not match upstream's). It also presents the downside
3118 of limiting the number of concurrent connections to the usual 64k ports.
3119 However, since the upstream and downstream ports are different, local IP
3120 connection tracking on the machine will not be upset by the reuse of the
3121 same session.
3122
3123 Note that depending on the transparent proxy technology used, it may be
3124 required to force the source address. In fact, cttproxy version 2 requires an
3125 IP address in <addr> above, and does not support setting of "0.0.0.0" as the
3126 IP address because it creates NAT entries which much match the exact outgoing
3127 address. Tproxy version 4 and some other kernel patches which work in pure
3128 forwarding mode generally will not have this limitation.
3129
3130 This option sets the default source for all servers in the backend. It may
3131 also be specified in a "defaults" section. Finer source address specification
3132 is possible at the server level using the "source" server option. Refer to
3133 section 2.4 for more information.
3134
3135 Examples :
3136 backend private
3137 # Connect to the servers using our 192.168.1.200 source address
3138 source 192.168.1.200
3139
3140 backend transparent_ssl1
3141 # Connect to the SSL farm from the client's source address
3142 source 192.168.1.200 usesrc clientip
3143
3144 backend transparent_ssl2
3145 # Connect to the SSL farm from the client's source address and port
3146 # not recommended if IP conntrack is present on the local machine.
3147 source 192.168.1.200 usesrc client
3148
3149 backend transparent_ssl3
3150 # Connect to the SSL farm from the client's source address. It
3151 # is more conntrack-friendly.
3152 source 192.168.1.200 usesrc clientip
3153
3154 backend transparent_smtp
3155 # Connect to the SMTP farm from the client's source address/port
3156 # with Tproxy version 4.
3157 source 0.0.0.0 usesrc clientip
3158
3159 See also : the "source" server option in section 2.4, the Tproxy patches for
3160 the Linux kernel on www.balabit.com, the "bind" keyword.
3161
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01003162
Willy Tarreau844e3c52008-01-11 16:28:18 +01003163srvtimeout <timeout> (deprecated)
3164 Set the maximum inactivity time on the server side.
3165 May be used in sections : defaults | frontend | listen | backend
3166 yes | no | yes | yes
3167 Arguments :
3168 <timeout> is the timeout value specified in milliseconds by default, but
3169 can be in any other unit if the number is suffixed by the unit,
3170 as explained at the top of this document.
3171
3172 The inactivity timeout applies when the server is expected to acknowledge or
3173 send data. In HTTP mode, this timeout is particularly important to consider
3174 during the first phase of the server's response, when it has to send the
3175 headers, as it directly represents the server's processing time for the
3176 request. To find out what value to put there, it's often good to start with
3177 what would be considered as unacceptable response times, then check the logs
3178 to observe the response time distribution, and adjust the value accordingly.
3179
3180 The value is specified in milliseconds by default, but can be in any other
3181 unit if the number is suffixed by the unit, as specified at the top of this
3182 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
3183 recommended that the client timeout remains equal to the server timeout in
3184 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003185 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01003186 packet losses by specifying timeouts that are slightly above multiples of 3
3187 seconds (eg: 4 or 5 seconds minimum).
3188
3189 This parameter is specific to backends, but can be specified once for all in
3190 "defaults" sections. This is in fact one of the easiest solutions not to
3191 forget about it. An unspecified timeout results in an infinite timeout, which
3192 is not recommended. Such a usage is accepted and works but reports a warning
3193 during startup because it may results in accumulation of expired sessions in
3194 the system if the system's timeouts are not configured either.
3195
3196 This parameter is provided for compatibility but is currently deprecated.
3197 Please use "timeout server" instead.
3198
3199 See also : "timeout server", "timeout client" and "clitimeout".
3200
3201
Willy Tarreaueabeafa2008-01-16 16:17:06 +01003202stats auth <user>:<passwd>
3203 Enable statistics with authentication and grant access to an account
3204 May be used in sections : defaults | frontend | listen | backend
3205 yes | no | yes | yes
3206 Arguments :
3207 <user> is a user name to grant access to
3208
3209 <passwd> is the cleartext password associated to this user
3210
3211 This statement enables statistics with default settings, and restricts access
3212 to declared users only. It may be repeated as many times as necessary to
3213 allow as many users as desired. When a user tries to access the statistics
3214 without a valid account, a "401 Forbidden" response will be returned so that
3215 the browser asks the user to provide a valid user and password. The real
3216 which will be returned to the browser is configurable using "stats realm".
3217
3218 Since the authentication method is HTTP Basic Authentication, the passwords
3219 circulate in cleartext on the network. Thus, it was decided that the
3220 configuration file would also use cleartext passwords to remind the users
3221 that those ones should not be sensible and not shared with any other account.
3222
3223 It is also possible to reduce the scope of the proxies which appear in the
3224 report using "stats scope".
3225
3226 Though this statement alone is enough to enable statistics reporting, it is
3227 recommended to set all other settings in order to avoid relying on default
3228 unobvious parameters.
3229
3230 Example :
3231 # public access (limited to this backend only)
3232 backend public_www
3233 server srv1 192.168.0.1:80
3234 stats enable
3235 stats hide-version
3236 stats scope .
3237 stats uri /admin?stats
3238 stats realm Haproxy\ Statistics
3239 stats auth admin1:AdMiN123
3240 stats auth admin2:AdMiN321
3241
3242 # internal monitoring access (unlimited)
3243 backend private_monitoring
3244 stats enable
3245 stats uri /admin?stats
3246 stats refresh 5s
3247
3248 See also : "stats enable", "stats realm", "stats scope", "stats uri"
3249
3250
3251stats enable
3252 Enable statistics reporting with default settings
3253 May be used in sections : defaults | frontend | listen | backend
3254 yes | no | yes | yes
3255 Arguments : none
3256
3257 This statement enables statistics reporting with default settings defined
3258 at build time. Unless stated otherwise, these settings are used :
3259 - stats uri : /haproxy?stats
3260 - stats realm : "HAProxy Statistics"
3261 - stats auth : no authentication
3262 - stats scope : no restriction
3263
3264 Though this statement alone is enough to enable statistics reporting, it is
3265 recommended to set all other settings in order to avoid relying on default
3266 unobvious parameters.
3267
3268 Example :
3269 # public access (limited to this backend only)
3270 backend public_www
3271 server srv1 192.168.0.1:80
3272 stats enable
3273 stats hide-version
3274 stats scope .
3275 stats uri /admin?stats
3276 stats realm Haproxy\ Statistics
3277 stats auth admin1:AdMiN123
3278 stats auth admin2:AdMiN321
3279
3280 # internal monitoring access (unlimited)
3281 backend private_monitoring
3282 stats enable
3283 stats uri /admin?stats
3284 stats refresh 5s
3285
3286 See also : "stats auth", "stats realm", "stats uri"
3287
3288
3289stats realm <realm>
3290 Enable statistics and set authentication realm
3291 May be used in sections : defaults | frontend | listen | backend
3292 yes | no | yes | yes
3293 Arguments :
3294 <realm> is the name of the HTTP Basic Authentication realm reported to
3295 the browser. The browser uses it to display it in the pop-up
3296 inviting the user to enter a valid username and password.
3297
3298 The realm is read as a single word, so any spaces in it should be escaped
3299 using a backslash ('\').
3300
3301 This statement is useful only in conjunction with "stats auth" since it is
3302 only related to authentication.
3303
3304 Though this statement alone is enough to enable statistics reporting, it is
3305 recommended to set all other settings in order to avoid relying on default
3306 unobvious parameters.
3307
3308 Example :
3309 # public access (limited to this backend only)
3310 backend public_www
3311 server srv1 192.168.0.1:80
3312 stats enable
3313 stats hide-version
3314 stats scope .
3315 stats uri /admin?stats
3316 stats realm Haproxy\ Statistics
3317 stats auth admin1:AdMiN123
3318 stats auth admin2:AdMiN321
3319
3320 # internal monitoring access (unlimited)
3321 backend private_monitoring
3322 stats enable
3323 stats uri /admin?stats
3324 stats refresh 5s
3325
3326 See also : "stats auth", "stats enable", "stats uri"
3327
3328
3329stats refresh <delay>
3330 Enable statistics with automatic refresh
3331 May be used in sections : defaults | frontend | listen | backend
3332 yes | no | yes | yes
3333 Arguments :
3334 <delay> is the suggested refresh delay, specified in seconds, which will
3335 be returned to the browser consulting the report page. While the
3336 browser is free to apply any delay, it will generally respect it
3337 and refresh the page this every seconds. The refresh interval may
3338 be specified in any other non-default time unit, by suffixing the
3339 unit after the value, as explained at the top of this document.
3340
3341 This statement is useful on monitoring displays with a permanent page
3342 reporting the load balancer's activity. When set, the HTML report page will
3343 include a link "refresh"/"stop refresh" so that the user can select whether
3344 he wants automatic refresh of the page or not.
3345
3346 Though this statement alone is enough to enable statistics reporting, it is
3347 recommended to set all other settings in order to avoid relying on default
3348 unobvious parameters.
3349
3350 Example :
3351 # public access (limited to this backend only)
3352 backend public_www
3353 server srv1 192.168.0.1:80
3354 stats enable
3355 stats hide-version
3356 stats scope .
3357 stats uri /admin?stats
3358 stats realm Haproxy\ Statistics
3359 stats auth admin1:AdMiN123
3360 stats auth admin2:AdMiN321
3361
3362 # internal monitoring access (unlimited)
3363 backend private_monitoring
3364 stats enable
3365 stats uri /admin?stats
3366 stats refresh 5s
3367
3368 See also : "stats auth", "stats enable", "stats realm", "stats uri"
3369
3370
3371stats scope { <name> | "." }
3372 Enable statistics and limit access scope
3373 May be used in sections : defaults | frontend | listen | backend
3374 yes | no | yes | yes
3375 Arguments :
3376 <name> is the name of a listen, frontend or backend section to be
3377 reported. The special name "." (a single dot) designates the
3378 section in which the statement appears.
3379
3380 When this statement is specified, only the sections enumerated with this
3381 statement will appear in the report. All other ones will be hidden. This
3382 statement may appear as many times as needed if multiple sections need to be
3383 reported. Please note that the name checking is performed as simple string
3384 comparisons, and that it is never checked that a give section name really
3385 exists.
3386
3387 Though this statement alone is enough to enable statistics reporting, it is
3388 recommended to set all other settings in order to avoid relying on default
3389 unobvious parameters.
3390
3391 Example :
3392 # public access (limited to this backend only)
3393 backend public_www
3394 server srv1 192.168.0.1:80
3395 stats enable
3396 stats hide-version
3397 stats scope .
3398 stats uri /admin?stats
3399 stats realm Haproxy\ Statistics
3400 stats auth admin1:AdMiN123
3401 stats auth admin2:AdMiN321
3402
3403 # internal monitoring access (unlimited)
3404 backend private_monitoring
3405 stats enable
3406 stats uri /admin?stats
3407 stats refresh 5s
3408
3409 See also : "stats auth", "stats enable", "stats realm", "stats uri"
3410
3411
3412stats uri <prefix>
3413 Enable statistics and define the URI prefix to access them
3414 May be used in sections : defaults | frontend | listen | backend
3415 yes | no | yes | yes
3416 Arguments :
3417 <prefix> is the prefix of any URI which will be redirected to stats. This
3418 prefix may contain a question mark ('?') to indicate part of a
3419 query string.
3420
3421 The statistics URI is intercepted on the relayed traffic, so it appears as a
3422 page within the normal application. It is strongly advised to ensure that the
3423 selected URI will never appear in the application, otherwise it will never be
3424 possible to reach it in the application.
3425
3426 The default URI compiled in haproxy is "/haproxy?stats", but this may be
3427 changed at build time, so it's better to always explictly specify it here.
3428 It is generally a good idea to include a question mark in the URI so that
3429 intermediate proxies refrain from caching the results. Also, since any string
3430 beginning with the prefix will be accepted as a stats request, the question
3431 mark helps ensuring that no valid URI will begin with the same words.
3432
3433 It is sometimes very convenient to use "/" as the URI prefix, and put that
3434 statement in a "listen" instance of its own. That makes it easy to dedicate
3435 an address or a port to statistics only.
3436
3437 Though this statement alone is enough to enable statistics reporting, it is
3438 recommended to set all other settings in order to avoid relying on default
3439 unobvious parameters.
3440
3441 Example :
3442 # public access (limited to this backend only)
3443 backend public_www
3444 server srv1 192.168.0.1:80
3445 stats enable
3446 stats hide-version
3447 stats scope .
3448 stats uri /admin?stats
3449 stats realm Haproxy\ Statistics
3450 stats auth admin1:AdMiN123
3451 stats auth admin2:AdMiN321
3452
3453 # internal monitoring access (unlimited)
3454 backend private_monitoring
3455 stats enable
3456 stats uri /admin?stats
3457 stats refresh 5s
3458
3459 See also : "stats auth", "stats enable", "stats realm"
3460
3461
3462stats hide-version
3463 Enable statistics and hide HAProxy version reporting
3464 May be used in sections : defaults | frontend | listen | backend
3465 yes | no | yes | yes
3466 Arguments : none
3467
3468 By default, the stats page reports some useful status information along with
3469 the statistics. Among them is HAProxy's version. However, it is generally
3470 considered dangerous to report precise version to anyone, as it can help them
3471 target known weaknesses with specific attacks. The "stats hide-version"
3472 statement removes the version from the statistics report. This is recommended
3473 for public sites or any site with a weak login/password.
3474
3475 Though this statement alone is enough to enable statistics reporting, it is
3476 recommended to set all other settings in order to avoid relying on default
3477 unobvious parameters.
3478
3479 Example :
3480 # public access (limited to this backend only)
3481 backend public_www
3482 server srv1 192.168.0.1:80
3483 stats enable
3484 stats hide-version
3485 stats scope .
3486 stats uri /admin?stats
3487 stats realm Haproxy\ Statistics
3488 stats auth admin1:AdMiN123
3489 stats auth admin2:AdMiN321
3490
3491 # internal monitoring access (unlimited)
3492 backend private_monitoring
3493 stats enable
3494 stats uri /admin?stats
3495 stats refresh 5s
3496
3497 See also : "stats auth", "stats enable", "stats realm", "stats uri"
3498
3499
Willy Tarreau62644772008-07-16 18:36:06 +02003500tcp-request content accept [{if | unless} <condition>]
3501 Accept a connection if/unless a content inspection condition is matched
3502 May be used in sections : defaults | frontend | listen | backend
3503 no | yes | yes | no
3504
3505 During TCP content inspection, the connection is immediately validated if the
3506 condition is true (when used with "if") or false (when used with "unless").
3507 Most of the time during content inspection, a condition will be in an
3508 uncertain state which is neither true nor false. The evaluation immediately
3509 stops when such a condition is encountered. It is important to understand
3510 that "accept" and "reject" rules are evaluated in their exact declaration
3511 order, so that it is possible to build complex rules from them. There is no
3512 specific limit to the number of rules which may be inserted.
3513
3514 Note that the "if/unless" condition is optionnal. If no condition is set on
3515 the action, it is simply performed unconditionally.
3516
3517 If no "tcp-request content" rules are matched, the default action already is
3518 "accept". Thus, this statement alone does not bring anything without another
3519 "reject" statement.
3520
3521 See section 2.3 about ACL usage.
3522
3523 See also : "tcp-request content-reject", "tcp-request inspect-delay"
3524
3525
3526tcp-request content reject [{if | unless} <condition>]
3527 Reject a connection if/unless a content inspection condition is matched
3528 May be used in sections : defaults | frontend | listen | backend
3529 no | yes | yes | no
3530
3531 During TCP content inspection, the connection is immediately rejected if the
3532 condition is true (when used with "if") or false (when used with "unless").
3533 Most of the time during content inspection, a condition will be in an
3534 uncertain state which is neither true nor false. The evaluation immediately
3535 stops when such a condition is encountered. It is important to understand
3536 that "accept" and "reject" rules are evaluated in their exact declaration
3537 order, so that it is possible to build complex rules from them. There is no
3538 specific limit to the number of rules which may be inserted.
3539
3540 Note that the "if/unless" condition is optionnal. If no condition is set on
3541 the action, it is simply performed unconditionally.
3542
3543 If no "tcp-request content" rules are matched, the default action is set to
3544 "accept".
3545
3546 Example:
3547 # reject SMTP connection if client speaks first
3548 tcp-request inspect-delay 30s
3549 acl content_present req_len gt 0
3550 tcp-request reject if content_present
3551
3552 # Forward HTTPS connection only if client speaks
3553 tcp-request inspect-delay 30s
3554 acl content_present req_len gt 0
3555 tcp-request accept if content_present
3556 tcp-request reject
3557
3558 See section 2.3 about ACL usage.
3559
3560 See also : "tcp-request content-accept", "tcp-request inspect-delay"
3561
3562
3563tcp-request inspect-delay <timeout>
3564 Set the maximum allowed time to wait for data during content inspection
3565 May be used in sections : defaults | frontend | listen | backend
3566 no | yes | yes | no
3567 Arguments :
3568 <timeout> is the timeout value specified in milliseconds by default, but
3569 can be in any other unit if the number is suffixed by the unit,
3570 as explained at the top of this document.
3571
3572 People using haproxy primarily as a TCP relay are often worried about the
3573 risk of passing any type of protocol to a server without any analysis. In
3574 order to be able to analyze the request contents, we must first withhold
3575 the data then analyze them. This statement simply enables withholding of
3576 data for at most the specified amount of time.
3577
3578 Note that when performing content inspection, haproxy will evaluate the whole
3579 rules for every new chunk which gets in, taking into account the fact that
3580 those data are partial. If no rule matches before the aforementionned delay,
3581 a last check is performed upon expiration, this time considering that the
3582 contents are definitive.
3583
3584 As soon as a rule matches, the request is released and continues as usual. If
3585 the timeout is reached and no rule matches, the default policy will be to let
3586 it pass through unaffected.
3587
3588 For most protocols, it is enough to set it to a few seconds, as most clients
3589 send the full request immediately upon connection. Add 3 or more seconds to
3590 cover TCP retransmits but that's all. For some protocols, it may make sense
3591 to use large values, for instance to ensure that the client never talks
3592 before the server (eg: SMTP), or to wait for a client to talk before passing
3593 data to the server (eg: SSL). Note that the client timeout must cover at
3594 least the inspection delay, otherwise it will expire first.
3595
3596 See also : "tcp-request content accept", "tcp-request content-reject",
3597 "timeout client".
3598
3599
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003600timeout check <timeout>
3601 Set additional check timeout, but only after a connection has been already
3602 established.
3603
3604 May be used in sections: defaults | frontend | listen | backend
3605 yes | no | yes | yes
3606 Arguments:
3607 <timeout> is the timeout value specified in milliseconds by default, but
3608 can be in any other unit if the number is suffixed by the unit,
3609 as explained at the top of this document.
3610
3611 If set, haproxy uses min("timeout connect", "inter") as a connect timeout
3612 for check and "timeout check" as an additional read timeout. The "min" is
3613 used so that people running with *very* long "timeout connect" (eg. those
3614 who needed this due to the queue or tarpit) do not slow down their checks.
3615 Of course it is better to use "check queue" and "check tarpit" instead of
3616 long "timeout connect".
3617
3618 If "timeout check" is not set haproxy uses "inter" for complete check
3619 timeout (connect + read) exactly like all <1.3.15 version.
3620
3621 In most cases check request is much simpler and faster to handle than normal
3622 requests and people may want to kick out laggy servers so this timeout should
Willy Tarreau41a340d2008-01-22 12:25:31 +01003623 be smaller than "timeout server".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003624
3625 This parameter is specific to backends, but can be specified once for all in
3626 "defaults" sections. This is in fact one of the easiest solutions not to
3627 forget about it.
3628
Willy Tarreau41a340d2008-01-22 12:25:31 +01003629 See also: "timeout connect", "timeout queue", "timeout server",
3630 "timeout tarpit".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003631
3632
Willy Tarreau0ba27502007-12-24 16:55:16 +01003633timeout client <timeout>
3634timeout clitimeout <timeout> (deprecated)
3635 Set the maximum inactivity time on the client side.
3636 May be used in sections : defaults | frontend | listen | backend
3637 yes | yes | yes | no
3638 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003639 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01003640 can be in any other unit if the number is suffixed by the unit,
3641 as explained at the top of this document.
3642
3643 The inactivity timeout applies when the client is expected to acknowledge or
3644 send data. In HTTP mode, this timeout is particularly important to consider
3645 during the first phase, when the client sends the request, and during the
3646 response while it is reading data sent by the server. The value is specified
3647 in milliseconds by default, but can be in any other unit if the number is
3648 suffixed by the unit, as specified at the top of this document. In TCP mode
3649 (and to a lesser extent, in HTTP mode), it is highly recommended that the
3650 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003651 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01003652 losses by specifying timeouts that are slightly above multiples of 3 seconds
3653 (eg: 4 or 5 seconds).
3654
3655 This parameter is specific to frontends, but can be specified once for all in
3656 "defaults" sections. This is in fact one of the easiest solutions not to
3657 forget about it. An unspecified timeout results in an infinite timeout, which
3658 is not recommended. Such a usage is accepted and works but reports a warning
3659 during startup because it may results in accumulation of expired sessions in
3660 the system if the system's timeouts are not configured either.
3661
3662 This parameter replaces the old, deprecated "clitimeout". It is recommended
3663 to use it to write new configurations. The form "timeout clitimeout" is
3664 provided only by backwards compatibility but its use is strongly discouraged.
3665
3666 See also : "clitimeout", "timeout server".
3667
3668
3669timeout connect <timeout>
3670timeout contimeout <timeout> (deprecated)
3671 Set the maximum time to wait for a connection attempt to a server to succeed.
3672 May be used in sections : defaults | frontend | listen | backend
3673 yes | no | yes | yes
3674 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003675 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01003676 can be in any other unit if the number is suffixed by the unit,
3677 as explained at the top of this document.
3678
3679 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003680 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreau0ba27502007-12-24 16:55:16 +01003681 cover one or several TCP packet losses by specifying timeouts that are
3682 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003683 connect timeout also presets both queue and tarpit timeouts to the same value
3684 if these have not been specified.
Willy Tarreau0ba27502007-12-24 16:55:16 +01003685
3686 This parameter is specific to backends, but can be specified once for all in
3687 "defaults" sections. This is in fact one of the easiest solutions not to
3688 forget about it. An unspecified timeout results in an infinite timeout, which
3689 is not recommended. Such a usage is accepted and works but reports a warning
3690 during startup because it may results in accumulation of failed sessions in
3691 the system if the system's timeouts are not configured either.
3692
3693 This parameter replaces the old, deprecated "contimeout". It is recommended
3694 to use it to write new configurations. The form "timeout contimeout" is
3695 provided only by backwards compatibility but its use is strongly discouraged.
3696
Willy Tarreau41a340d2008-01-22 12:25:31 +01003697 See also: "timeout check", "timeout queue", "timeout server", "contimeout",
3698 "timeout tarpit".
Willy Tarreau0ba27502007-12-24 16:55:16 +01003699
3700
Willy Tarreau036fae02008-01-06 13:24:40 +01003701timeout http-request <timeout>
3702 Set the maximum allowed time to wait for a complete HTTP request
3703 May be used in sections : defaults | frontend | listen | backend
3704 yes | yes | yes | no
3705 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003706 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau036fae02008-01-06 13:24:40 +01003707 can be in any other unit if the number is suffixed by the unit,
3708 as explained at the top of this document.
3709
3710 In order to offer DoS protection, it may be required to lower the maximum
3711 accepted time to receive a complete HTTP request without affecting the client
3712 timeout. This helps protecting against established connections on which
3713 nothing is sent. The client timeout cannot offer a good protection against
3714 this abuse because it is an inactivity timeout, which means that if the
3715 attacker sends one character every now and then, the timeout will not
3716 trigger. With the HTTP request timeout, no matter what speed the client
3717 types, the request will be aborted if it does not complete in time.
3718
3719 Note that this timeout only applies to the header part of the request, and
3720 not to any data. As soon as the empty line is received, this timeout is not
3721 used anymore.
3722
3723 Generally it is enough to set it to a few seconds, as most clients send the
3724 full request immediately upon connection. Add 3 or more seconds to cover TCP
3725 retransmits but that's all. Setting it to very low values (eg: 50 ms) will
3726 generally work on local networks as long as there are no packet losses. This
3727 will prevent people from sending bare HTTP requests using telnet.
3728
3729 If this parameter is not set, the client timeout still applies between each
3730 chunk of the incoming request.
3731
3732 See also : "timeout client".
3733
Willy Tarreau844e3c52008-01-11 16:28:18 +01003734
3735timeout queue <timeout>
3736 Set the maximum time to wait in the queue for a connection slot to be free
3737 May be used in sections : defaults | frontend | listen | backend
3738 yes | no | yes | yes
3739 Arguments :
3740 <timeout> is the timeout value specified in milliseconds by default, but
3741 can be in any other unit if the number is suffixed by the unit,
3742 as explained at the top of this document.
3743
3744 When a server's maxconn is reached, connections are left pending in a queue
3745 which may be server-specific or global to the backend. In order not to wait
3746 indefinitely, a timeout is applied to requests pending in the queue. If the
3747 timeout is reached, it is considered that the request will almost never be
3748 served, so it is dropped and a 503 error is returned to the client.
3749
3750 The "timeout queue" statement allows to fix the maximum time for a request to
3751 be left pending in a queue. If unspecified, the same value as the backend's
3752 connection timeout ("timeout connect") is used, for backwards compatibility
3753 with older versions with no "timeout queue" parameter.
3754
3755 See also : "timeout connect", "contimeout".
3756
3757
3758timeout server <timeout>
3759timeout srvtimeout <timeout> (deprecated)
3760 Set the maximum inactivity time on the server side.
3761 May be used in sections : defaults | frontend | listen | backend
3762 yes | no | yes | yes
3763 Arguments :
3764 <timeout> is the timeout value specified in milliseconds by default, but
3765 can be in any other unit if the number is suffixed by the unit,
3766 as explained at the top of this document.
3767
3768 The inactivity timeout applies when the server is expected to acknowledge or
3769 send data. In HTTP mode, this timeout is particularly important to consider
3770 during the first phase of the server's response, when it has to send the
3771 headers, as it directly represents the server's processing time for the
3772 request. To find out what value to put there, it's often good to start with
3773 what would be considered as unacceptable response times, then check the logs
3774 to observe the response time distribution, and adjust the value accordingly.
3775
3776 The value is specified in milliseconds by default, but can be in any other
3777 unit if the number is suffixed by the unit, as specified at the top of this
3778 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
3779 recommended that the client timeout remains equal to the server timeout in
3780 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003781 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01003782 packet losses by specifying timeouts that are slightly above multiples of 3
3783 seconds (eg: 4 or 5 seconds minimum).
3784
3785 This parameter is specific to backends, but can be specified once for all in
3786 "defaults" sections. This is in fact one of the easiest solutions not to
3787 forget about it. An unspecified timeout results in an infinite timeout, which
3788 is not recommended. Such a usage is accepted and works but reports a warning
3789 during startup because it may results in accumulation of expired sessions in
3790 the system if the system's timeouts are not configured either.
3791
3792 This parameter replaces the old, deprecated "srvtimeout". It is recommended
3793 to use it to write new configurations. The form "timeout srvtimeout" is
3794 provided only by backwards compatibility but its use is strongly discouraged.
3795
3796 See also : "srvtimeout", "timeout client".
3797
3798
3799timeout tarpit <timeout>
3800 Set the duration for which tapitted connections will be maintained
3801 May be used in sections : defaults | frontend | listen | backend
3802 yes | yes | yes | yes
3803 Arguments :
3804 <timeout> is the tarpit duration specified in milliseconds by default, but
3805 can be in any other unit if the number is suffixed by the unit,
3806 as explained at the top of this document.
3807
3808 When a connection is tarpitted using "reqtarpit", it is maintained open with
3809 no activity for a certain amount of time, then closed. "timeout tarpit"
3810 defines how long it will be maintained open.
3811
3812 The value is specified in milliseconds by default, but can be in any other
3813 unit if the number is suffixed by the unit, as specified at the top of this
3814 document. If unspecified, the same value as the backend's connection timeout
3815 ("timeout connect") is used, for backwards compatibility with older versions
3816 with no "timeout tapit" parameter.
3817
3818 See also : "timeout connect", "contimeout".
3819
3820
3821transparent (deprecated)
3822 Enable client-side transparent proxying
3823 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +01003824 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +01003825 Arguments : none
3826
3827 This keyword was introduced in order to provide layer 7 persistence to layer
3828 3 load balancers. The idea is to use the OS's ability to redirect an incoming
3829 connection for a remote address to a local process (here HAProxy), and let
3830 this process know what address was initially requested. When this option is
3831 used, sessions without cookies will be forwarded to the original destination
3832 IP address of the incoming request (which should match that of another
3833 equipment), while requests with cookies will still be forwarded to the
3834 appropriate server.
3835
3836 The "transparent" keyword is deprecated, use "option transparent" instead.
3837
3838 Note that contrary to a common belief, this option does NOT make HAProxy
3839 present the client's IP to the server when establishing the connection.
3840
Willy Tarreau844e3c52008-01-11 16:28:18 +01003841 See also: "option transparent"
3842
3843
3844use_backend <backend> if <condition>
3845use_backend <backend> unless <condition>
3846 Switch to a specific backend if/unless a Layer 7 condition is matched.
3847 May be used in sections : defaults | frontend | listen | backend
3848 no | yes | yes | no
3849 Arguments :
3850 <backend> is the name of a valid backend or "listen" section.
3851
3852 <condition> is a condition composed of ACLs, as described in section 2.3.
3853
3854 When doing content-switching, connections arrive on a frontend and are then
3855 dispatched to various backends depending on a number of conditions. The
3856 relation between the conditions and the backends is described with the
3857 "use_backend" keyword. This is supported only in HTTP mode.
3858
3859 There may be as many "use_backend" rules as desired. All of these rules are
3860 evaluated in their declaration order, and the first one which matches will
3861 assign the backend.
3862
3863 In the first form, the backend will be used if the condition is met. In the
3864 second form, the backend will be used if the condition is not met. If no
3865 condition is valid, the backend defined with "default_backend" will be used.
3866 If no default backend is defined, either the servers in the same section are
3867 used (in case of a "listen" section) or, in case of a frontend, no server is
3868 used and a 503 service unavailable response is returned.
3869
3870 See also: "default_backend" and section 2.3 about ACLs.
3871
Willy Tarreau036fae02008-01-06 13:24:40 +01003872
Willy Tarreau0ba27502007-12-24 16:55:16 +010038732.3) Using ACLs
Willy Tarreau6a06a402007-07-15 20:15:28 +02003874---------------
3875
3876The use of Access Control Lists (ACL) provides a flexible solution to perform
Willy Tarreau0ba27502007-12-24 16:55:16 +01003877content switching and generally to take decisions based on content extracted
3878from the request, the response or any environmental status. The principle is
3879simple :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003880
3881 - define test criteria with sets of values
3882 - perform actions only if a set of tests is valid
3883
3884The actions generally consist in blocking the request, or selecting a backend.
3885
3886In order to define a test, the "acl" keyword is used. The syntax is :
3887
3888 acl <aclname> <criterion> [flags] [operator] <value> ...
3889
Willy Tarreau0ba27502007-12-24 16:55:16 +01003890This creates a new ACL <aclname> or completes an existing one with new tests.
3891Those tests apply to the portion of request/response specified in <criterion>
Willy Tarreau6a06a402007-07-15 20:15:28 +02003892and may be adjusted with optional flags [flags]. Some criteria also support
3893an operator which may be specified before the set of values. The values are
3894of the type supported by the criterion, and are separated by spaces.
3895
Willy Tarreau0ba27502007-12-24 16:55:16 +01003896ACL names must be formed from upper and lower case letters, digits, '-' (dash),
3897'_' (underscore) , '.' (dot) and ':' (colon). ACL names are case-sensitive,
3898which means that "my_acl" and "My_Acl" are two different ACLs.
3899
3900There is no enforced limit to the number of ACLs. The unused ones do not affect
Willy Tarreau6a06a402007-07-15 20:15:28 +02003901performance, they just consume a small amount of memory.
3902
Willy Tarreau0ba27502007-12-24 16:55:16 +01003903The following ACL flags are currently supported :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003904
3905 -i : ignore case during matching.
3906 -- : force end of flags. Useful when a string looks like one of the flags.
3907
3908Supported types of values are :
Willy Tarreau0ba27502007-12-24 16:55:16 +01003909
Willy Tarreau6a06a402007-07-15 20:15:28 +02003910 - integers or integer ranges
3911 - strings
3912 - regular expressions
3913 - IP addresses and networks
3914
3915
Willy Tarreau0ba27502007-12-24 16:55:16 +010039162.3.1) Matching integers
Willy Tarreau6a06a402007-07-15 20:15:28 +02003917------------------------
3918
3919Matching integers is special in that ranges and operators are permitted. Note
3920that integer matching only applies to positive values. A range is a value
3921expressed with a lower and an upper bound separated with a colon, both of which
3922may be omitted.
3923
3924For instance, "1024:65535" is a valid range to represent a range of
3925unprivileged ports, and "1024:" would also work. "0:1023" is a valid
3926representation of privileged ports, and ":1023" would also work.
3927
Willy Tarreau62644772008-07-16 18:36:06 +02003928As a special case, some ACL functions support decimal numbers which are in fact
3929two integers separated by a dot. This is used with some version checks for
3930instance. All integer properties apply to those decimal numbers, including
3931ranges and operators.
3932
Willy Tarreau6a06a402007-07-15 20:15:28 +02003933For an easier usage, comparison operators are also supported. Note that using
Willy Tarreau0ba27502007-12-24 16:55:16 +01003934operators with ranges does not make much sense and is strongly discouraged.
3935Similarly, it does not make much sense to perform order comparisons with a set
3936of values.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003937
Willy Tarreau0ba27502007-12-24 16:55:16 +01003938Available operators for integer matching are :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003939
3940 eq : true if the tested value equals at least one value
3941 ge : true if the tested value is greater than or equal to at least one value
3942 gt : true if the tested value is greater than at least one value
3943 le : true if the tested value is less than or equal to at least one value
3944 lt : true if the tested value is less than at least one value
3945
Willy Tarreau0ba27502007-12-24 16:55:16 +01003946For instance, the following ACL matches any negative Content-Length header :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003947
3948 acl negative-length hdr_val(content-length) lt 0
3949
Willy Tarreau62644772008-07-16 18:36:06 +02003950This one matches SSL versions between 3.0 and 3.1 (inclusive) :
3951
3952 acl sslv3 req_ssl_ver 3:3.1
3953
Willy Tarreau6a06a402007-07-15 20:15:28 +02003954
Willy Tarreau0ba27502007-12-24 16:55:16 +010039552.3.2) Matching strings
Willy Tarreau6a06a402007-07-15 20:15:28 +02003956-----------------------
3957
3958String matching applies to verbatim strings as they are passed, with the
3959exception of the backslash ("\") which makes it possible to escape some
3960characters such as the space. If the "-i" flag is passed before the first
3961string, then the matching will be performed ignoring the case. In order
3962to match the string "-i", either set it second, or pass the "--" flag
Willy Tarreau0ba27502007-12-24 16:55:16 +01003963before the first string. Same applies of course to match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02003964
3965
Willy Tarreau0ba27502007-12-24 16:55:16 +010039662.3.3) Matching regular expressions (regexes)
Willy Tarreau6a06a402007-07-15 20:15:28 +02003967---------------------------------------------
3968
3969Just like with string matching, regex matching applies to verbatim strings as
3970they are passed, with the exception of the backslash ("\") which makes it
3971possible to escape some characters such as the space. If the "-i" flag is
3972passed before the first regex, then the matching will be performed ignoring
3973the case. In order to match the string "-i", either set it second, or pass
Willy Tarreau0ba27502007-12-24 16:55:16 +01003974the "--" flag before the first string. Same principle applies of course to
3975match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02003976
3977
Willy Tarreau0ba27502007-12-24 16:55:16 +010039782.3.4) Matching IPv4 addresses
3979------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02003980
3981IPv4 addresses values can be specified either as plain addresses or with a
3982netmask appended, in which case the IPv4 address matches whenever it is
3983within the network. Plain addresses may also be replaced with a resolvable
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003984host name, but this practice is generally discouraged as it makes it more
Willy Tarreau0ba27502007-12-24 16:55:16 +01003985difficult to read and debug configurations. If hostnames are used, you should
3986at least ensure that they are present in /etc/hosts so that the configuration
3987does not depend on any random DNS match at the moment the configuration is
3988parsed.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003989
3990
Willy Tarreau0ba27502007-12-24 16:55:16 +010039912.3.5) Available matching criteria
Willy Tarreau6a06a402007-07-15 20:15:28 +02003992----------------------------------
3993
Willy Tarreau0ba27502007-12-24 16:55:16 +010039942.3.5.1) Matching at Layer 4 and below
3995--------------------------------------
3996
3997A first set of criteria applies to information which does not require any
3998analysis of the request or response contents. Those generally include TCP/IP
3999addresses and ports, as well as internal values independant on the stream.
4000
Willy Tarreau6a06a402007-07-15 20:15:28 +02004001always_false
4002 This one never matches. All values and flags are ignored. It may be used as
4003 a temporary replacement for another one when adjusting configurations.
4004
4005always_true
4006 This one always matches. All values and flags are ignored. It may be used as
4007 a temporary replacement for another one when adjusting configurations.
4008
4009src <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01004010 Applies to the client's IPv4 address. It is usually used to limit access to
Willy Tarreau6a06a402007-07-15 20:15:28 +02004011 certain resources such as statistics. Note that it is the TCP-level source
4012 address which is used, and not the address of a client behind a proxy.
4013
4014src_port <integer>
4015 Applies to the client's TCP source port. This has a very limited usage.
4016
4017dst <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01004018 Applies to the local IPv4 address the client connected to. It can be used to
Willy Tarreau6a06a402007-07-15 20:15:28 +02004019 switch to a different backend for some alternative addresses.
4020
4021dst_port <integer>
4022 Applies to the local port the client connected to. It can be used to switch
4023 to a different backend for some alternative ports.
4024
4025dst_conn <integer>
4026 Applies to the number of currently established connections on the frontend,
4027 including the one being evaluated. It can be used to either return a sorry
Willy Tarreau0ba27502007-12-24 16:55:16 +01004028 page before hard-blocking, or to use a specific backend to drain new requests
Willy Tarreau6a06a402007-07-15 20:15:28 +02004029 when the farm is considered saturated.
4030
Willy Tarreau0ba27502007-12-24 16:55:16 +01004031nbsrv <integer>
4032nbsrv(backend) <integer>
4033 Returns true when the number of usable servers of either the current backend
4034 or the named backend matches the values or ranges specified. This is used to
4035 switch to an alternate backend when the number of servers is too low to
4036 to handle some load. It is useful to report a failure when combined with
4037 "monitor fail".
4038
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +08004039connslots <integer>
4040connslots(backend) <integer>
4041 The basic idea here is to be able to measure the number of connection "slots"
4042 still available (connection, + queue) - so that anything beyond that (intended
4043 usage; see "use_backend" keyword) can be redirected to a different backend.
4044
4045 'connslots' = number of available server connection slots, + number of available
4046 server queue slots.
4047
4048 *Note that while "dst_conn" may be used, "connslots" comes in especially useful
4049 when you have a case of traffic going to one single ip, splitting into multiple
4050 backends (perhaps using acls to do name-based load balancing) - and you want to
4051 be able to differentiate between different backends, and their "connslots"
4052 available. Also, whereas "nbsrv" only measures servers that are actually *down*,
4053 this acl is more fine-grained - and looks into the number of conn slots available
4054 as well.
4055
4056 *OTHER CAVEATS AND NOTES: at this point in time, the code does not take care of
4057 dynamic connections. Also, if any of the server maxconn, or maxqueue is 0, then
4058 this acl clearly does not make sense - in which case the value returned will be -1.
4059
Willy Tarreau0ba27502007-12-24 16:55:16 +01004060
Willy Tarreau62644772008-07-16 18:36:06 +020040612.3.5.2) Matching contents at Layer 4
4062-------------------------------------
4063
4064A second set of criteria depends on data found in buffers, but which can change
4065during analysis. This requires that some data has been buffered, for instance
4066through TCP request content inspection. Please see the "tcp-request" keyword
4067for more detailed information on the subject.
4068
4069req_len <integer>
4070 Returns true when the lenght of the data in the request buffer matches the
4071 specified range. It is important to understand that this test does not
4072 return false as long as the buffer is changing. This means that a check with
4073 equality to zero will almost always immediately match at the beginning of the
4074 session, while a test for more data will wait for that data to come in and
4075 return false only when haproxy is certain that no more data will come in.
4076 This test was designed to be used with TCP request content inspection.
4077
4078req_ssl_ver <decimal>
4079 Returns true when data in the request buffer look like SSL, with a protocol
4080 version matching the specified range. Both SSLv2 hello messages and SSLv3
4081 messages are supported. The test tries to be strict enough to avoid being
4082 easily fooled. In particular, it waits for as many bytes as announced in the
4083 message header if this header looks valid (bound to the buffer size). Note
4084 that TLSv1 is announced as SSL version 3.1. This test was designed to be used
4085 with TCP request content inspection.
4086
Willy Tarreaub6fb4202008-07-20 11:18:28 +02004087wait_end
4088 Waits for the end of the analysis period to return true. This may be used in
4089 conjunction with content analysis to avoid returning a wrong verdict early.
4090 It may also be used to delay some actions, such as a delayed reject for some
4091 special addresses. Since it either stops the rules evaluation or immediately
4092 returns true, it is recommended to use this acl as the last one in a rule.
4093 Please note that the default ACL "WAIT_END" is always usable without prior
4094 declaration. This test was designed to be used with TCP request content
4095 inspection.
4096
4097 Examples :
4098 # delay every incoming request by 2 seconds
4099 tcp-request inspect-delay 2s
4100 tcp-request content accept if WAIT_END
4101
4102 # don't immediately tell bad guys they are rejected
4103 tcp-request inspect-delay 10s
4104 acl goodguys src 10.0.0.0/24
4105 acl badguys src 10.0.1.0/24
4106 tcp-request content accept if goodguys
4107 tcp-request content reject if badguys WAIT_END
4108 tcp-request content reject
4109
Willy Tarreau62644772008-07-16 18:36:06 +02004110
41112.3.5.3) Matching at Layer 7
Willy Tarreau0ba27502007-12-24 16:55:16 +01004112----------------------------
4113
Willy Tarreau62644772008-07-16 18:36:06 +02004114A third set of criteria applies to information which can be found at the
Willy Tarreau0ba27502007-12-24 16:55:16 +01004115application layer (layer 7). Those require that a full HTTP request has been
4116read, and are only evaluated then. They may require slightly more CPU resources
4117than the layer 4 ones, but not much since the request and response are indexed.
4118
Willy Tarreau6a06a402007-07-15 20:15:28 +02004119method <string>
4120 Applies to the method in the HTTP request, eg: "GET". Some predefined ACL
4121 already check for most common methods.
4122
4123req_ver <string>
4124 Applies to the version string in the HTTP request, eg: "1.0". Some predefined
4125 ACL already check for versions 1.0 and 1.1.
4126
4127path <string>
4128 Returns true when the path part of the request, which starts at the first
4129 slash and ends before the question mark, equals one of the strings. It may be
4130 used to match known files, such as /favicon.ico.
4131
4132path_beg <string>
Willy Tarreau0ba27502007-12-24 16:55:16 +01004133 Returns true when the path begins with one of the strings. This can be used
4134 to send certain directory names to alternative backends.
Willy Tarreau6a06a402007-07-15 20:15:28 +02004135
4136path_end <string>
4137 Returns true when the path ends with one of the strings. This may be used to
4138 control file name extension.
4139
4140path_sub <string>
4141 Returns true when the path contains one of the strings. It can be used to
4142 detect particular patterns in paths, such as "../" for example. See also
4143 "path_dir".
4144
4145path_dir <string>
4146 Returns true when one of the strings is found isolated or delimited with
4147 slashes in the path. This is used to perform filename or directory name
4148 matching without the risk of wrong match due to colliding prefixes. See also
4149 "url_dir" and "path_sub".
4150
4151path_dom <string>
4152 Returns true when one of the strings is found isolated or delimited with dots
4153 in the path. This may be used to perform domain name matching in proxy
4154 requests. See also "path_sub" and "url_dom".
4155
4156path_reg <regex>
4157 Returns true when the path matches one of the regular expressions. It can be
4158 used any time, but it is important to remember that regex matching is slower
4159 than other methods. See also "url_reg" and all "path_" criteria.
4160
4161url <string>
4162 Applies to the whole URL passed in the request. The only real use is to match
4163 "*", for which there already is a predefined ACL.
4164
4165url_beg <string>
4166 Returns true when the URL begins with one of the strings. This can be used to
4167 check whether a URL begins with a slash or with a protocol scheme.
4168
4169url_end <string>
4170 Returns true when the URL ends with one of the strings. It has very limited
4171 use. "path_end" should be used instead for filename matching.
4172
4173url_sub <string>
4174 Returns true when the URL contains one of the strings. It can be used to
4175 detect particular patterns in query strings for example. See also "path_sub".
4176
4177url_dir <string>
4178 Returns true when one of the strings is found isolated or delimited with
4179 slashes in the URL. This is used to perform filename or directory name
4180 matching without the risk of wrong match due to colliding prefixes. See also
4181 "path_dir" and "url_sub".
4182
4183url_dom <string>
4184 Returns true when one of the strings is found isolated or delimited with dots
4185 in the URL. This is used to perform domain name matching without the risk of
4186 wrong match due to colliding prefixes. See also "url_sub".
4187
4188url_reg <regex>
4189 Returns true when the URL matches one of the regular expressions. It can be
4190 used any time, but it is important to remember that regex matching is slower
4191 than other methods. See also "path_reg" and all "url_" criteria.
4192
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01004193url_ip <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01004194 Applies to the IP address specified in the absolute URI in an HTTP request.
4195 It can be used to prevent access to certain resources such as local network.
Willy Tarreau198a7442008-01-17 12:05:32 +01004196 It is useful with option "http_proxy".
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01004197
4198url_port <integer>
Willy Tarreau0ba27502007-12-24 16:55:16 +01004199 Applies to the port specified in the absolute URI in an HTTP request. It can
4200 be used to prevent access to certain resources. It is useful with option
Willy Tarreau198a7442008-01-17 12:05:32 +01004201 "http_proxy". Note that if the port is not specified in the request, port 80
Willy Tarreau0ba27502007-12-24 16:55:16 +01004202 is assumed.
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01004203
Willy Tarreau6a06a402007-07-15 20:15:28 +02004204hdr <string>
4205hdr(header) <string>
4206 Note: all the "hdr*" matching criteria either apply to all headers, or to a
4207 particular header whose name is passed between parenthesis and without any
Willy Tarreau0ba27502007-12-24 16:55:16 +01004208 space. The header name is not case-sensitive. The header matching complies
4209 with RFC2616, and treats as separate headers all values delimited by commas.
Willy Tarreau6a06a402007-07-15 20:15:28 +02004210
4211 The "hdr" criteria returns true if any of the headers matching the criteria
Willy Tarreau0ba27502007-12-24 16:55:16 +01004212 match any of the strings. This can be used to check exact for values. For
Willy Tarreau6a06a402007-07-15 20:15:28 +02004213 instance, checking that "connection: close" is set :
4214
4215 hdr(Connection) -i close
4216
4217hdr_beg <string>
4218hdr_beg(header) <string>
4219 Returns true when one of the headers begins with one of the strings. See
4220 "hdr" for more information on header matching.
4221
4222hdr_end <string>
4223hdr_end(header) <string>
4224 Returns true when one of the headers ends with one of the strings. See "hdr"
4225 for more information on header matching.
4226
4227hdr_sub <string>
4228hdr_sub(header) <string>
4229 Returns true when one of the headers contains one of the strings. See "hdr"
4230 for more information on header matching.
4231
4232hdr_dir <string>
4233hdr_dir(header) <string>
4234 Returns true when one of the headers contains one of the strings either
4235 isolated or delimited by slashes. This is used to perform filename or
4236 directory name matching, and may be used with Referer. See "hdr" for more
4237 information on header matching.
4238
4239hdr_dom <string>
4240hdr_dom(header) <string>
4241 Returns true when one of the headers contains one of the strings either
4242 isolated or delimited by dots. This is used to perform domain name matching,
4243 and may be used with the Host header. See "hdr" for more information on
4244 header matching.
4245
4246hdr_reg <regex>
4247hdr_reg(header) <regex>
4248 Returns true when one of the headers matches of the regular expressions. It
4249 can be used at any time, but it is important to remember that regex matching
4250 is slower than other methods. See also other "hdr_" criteria, as well as
4251 "hdr" for more information on header matching.
4252
4253hdr_val <integer>
4254hdr_val(header) <integer>
4255 Returns true when one of the headers starts with a number which matches the
4256 values or ranges specified. This may be used to limit content-length to
4257 acceptable values for example. See "hdr" for more information on header
4258 matching.
4259
4260hdr_cnt <integer>
4261hdr_cnt(header) <integer>
Willy Tarreau0ba27502007-12-24 16:55:16 +01004262 Returns true when the number of occurrence of the specified header matches
4263 the values or ranges specified. It is important to remember that one header
4264 line may count as several headers if it has several values. This is used to
4265 detect presence, absence or abuse of a specific header, as well as to block
4266 request smugling attacks by rejecting requests which contain more than one
4267 of certain headers. See "hdr" for more information on header matching.
Willy Tarreau6a06a402007-07-15 20:15:28 +02004268
4269
Willy Tarreau0ba27502007-12-24 16:55:16 +010042702.3.6) Pre-defined ACLs
Willy Tarreau6a06a402007-07-15 20:15:28 +02004271-----------------------
4272
4273Some predefined ACLs are hard-coded so that they do not have to be declared in
4274every frontend which needs them. They all have their names in upper case in
Willy Tarreau0ba27502007-12-24 16:55:16 +01004275order to avoid confusion. Their equivalence is provided below. Please note that
4276only the first three ones are not layer 7 based.
Willy Tarreau6a06a402007-07-15 20:15:28 +02004277
4278ACL name Equivalent to Usage
4279---------------+-----------------------------+---------------------------------
Willy Tarreau58393e12008-07-20 10:39:22 +02004280TRUE always_true always match
4281FALSE always_false never match
Willy Tarreau6a06a402007-07-15 20:15:28 +02004282LOCALHOST src 127.0.0.1/8 match connection from local host
4283HTTP_1.0 req_ver 1.0 match HTTP version 1.0
4284HTTP_1.1 req_ver 1.1 match HTTP version 1.1
4285METH_CONNECT method CONNECT match HTTP CONNECT method
4286METH_GET method GET HEAD match HTTP GET or HEAD method
4287METH_HEAD method HEAD match HTTP HEAD method
4288METH_OPTIONS method OPTIONS match HTTP OPTIONS method
4289METH_POST method POST match HTTP POST method
4290METH_TRACE method TRACE match HTTP TRACE method
4291HTTP_URL_ABS url_reg ^[^/:]*:// match absolute URL with scheme
4292HTTP_URL_SLASH url_beg / match URL begining with "/"
4293HTTP_URL_STAR url * match URL equal to "*"
4294HTTP_CONTENT hdr_val(content-length) gt 0 match an existing content-length
Willy Tarreauc6317702008-07-20 09:29:50 +02004295REQ_CONTENT req_len gt 0 match data in the request buffer
Willy Tarreaub6fb4202008-07-20 11:18:28 +02004296WAIT_END wait_end wait for end of content analysis
Willy Tarreau6a06a402007-07-15 20:15:28 +02004297---------------+-----------------------------+---------------------------------
4298
4299
Willy Tarreau0ba27502007-12-24 16:55:16 +010043002.3.7) Using ACLs to form conditions
Willy Tarreau6a06a402007-07-15 20:15:28 +02004301------------------------------------
4302
4303Some actions are only performed upon a valid condition. A condition is a
4304combination of ACLs with operators. 3 operators are supported :
4305
4306 - AND (implicit)
4307 - OR (explicit with the "or" keyword or the "||" operator)
4308 - Negation with the exclamation mark ("!")
4309
4310A condition is formed as a disjonctive form :
4311
4312 [!]acl1 [!]acl2 ... [!]acln { or [!]acl1 [!]acl2 ... [!]acln } ...
4313
4314Such conditions are generally used after an "if" or "unless" statement,
4315indicating when the condition will trigger the action.
4316
4317For instance, to block HTTP requests to the "*" URL with methods other than
Willy Tarreau0ba27502007-12-24 16:55:16 +01004318"OPTIONS", as well as POST requests without content-length, and GET or HEAD
4319requests with a content-length greater than 0, and finally every request which
4320is not either GET/HEAD/POST/OPTIONS !
Willy Tarreau6a06a402007-07-15 20:15:28 +02004321
4322 acl missing_cl hdr_cnt(Content-length) eq 0
4323 block if HTTP_URL_STAR !METH_OPTIONS || METH_POST missing_cl
4324 block if METH_GET HTTP_CONTENT
4325 block unless METH_GET or METH_POST or METH_OPTIONS
4326
4327To select a different backend for requests to static contents on the "www" site
4328and to every request on the "img", "video", "download" and "ftp" hosts :
4329
4330 acl url_static path_beg /static /images /img /css
4331 acl url_static path_end .gif .png .jpg .css .js
4332 acl host_www hdr_beg(host) -i www
4333 acl host_static hdr_beg(host) -i img. video. download. ftp.
4334
4335 # now use backend "static" for all static-only hosts, and for static urls
4336 # of host "www". Use backend "www" for the rest.
4337 use_backend static if host_static or host_www url_static
4338 use_backend www if host_www
4339
Willy Tarreau844e3c52008-01-11 16:28:18 +01004340See section 2.2 for detailed help on the "block" and "use_backend" keywords.
Willy Tarreaudbc36f62007-11-30 12:29:11 +01004341
4342
Willy Tarreauc7246fc2007-12-02 17:31:20 +010043432.4) Server options
Willy Tarreau5764b382007-11-30 17:46:49 +01004344-------------------
4345
Willy Tarreau198a7442008-01-17 12:05:32 +01004346The "server" keyword supports a certain number of settings which are all passed
4347as arguments on the server line. The order in which those arguments appear does
4348not count, and they are all optional. Some of those settings are single words
4349(booleans) while others expect one or several values after them. In this case,
4350the values must immediately follow the setting name. All those settings must be
4351specified after the server's address if they are used :
4352
4353 server <name> <address>[:port] [settings ...]
4354
4355The currently supported settings are the following ones.
4356
4357addr <ipv4>
4358 Using the "addr" parameter, it becomes possible to use a different IP address
4359 to send health-checks. On some servers, it may be desirable to dedicate an IP
4360 address to specific component able to perform complex tests which are more
4361 suitable to health-checks than the application. This parameter is ignored if
4362 the "check" parameter is not set. See also the "port" parameter.
4363
4364backup
4365 When "backup" is present on a server line, the server is only used in load
4366 balancing when all other non-backup servers are unavailable. Requests coming
4367 with a persistence cookie referencing the server will always be served
4368 though. By default, only the first operational backup server is used, unless
Willy Tarreauaf85d942008-01-30 10:47:10 +01004369 the "allbackups" option is set in the backend. See also the "allbackups"
Willy Tarreau198a7442008-01-17 12:05:32 +01004370 option.
4371
4372check
4373 This option enables health checks on the server. By default, a server is
4374 always considered available. If "check" is set, the server will receive
4375 periodic health checks to ensure that it is really able to serve requests.
4376 The default address and port to send the tests to are those of the server,
4377 and the default source is the same as the one defined in the backend. It is
4378 possible to change the address using the "addr" parameter, the port using the
4379 "port" parameter, the source address using the "source" address, and the
4380 interval and timers using the "inter", "rise" and "fall" parameters. The
4381 request method is define in the backend using the "httpchk", "smtpchk",
4382 and "ssl-hello-chk" options. Please refer to those options and parameters for
4383 more information.
4384
4385cookie <value>
4386 The "cookie" parameter sets the cookie value assigned to the server to
4387 <value>. This value will be checked in incoming requests, and the first
4388 operational server possessing the same value will be selected. In return, in
4389 cookie insertion or rewrite modes, this value will be assigned to the cookie
4390 sent to the client. There is nothing wrong in having several servers sharing
4391 the same cookie value, and it is in fact somewhat common between normal and
4392 backup servers. See also the "cookie" keyword in backend section.
4393
4394fall <count>
4395 The "fall" parameter states that a server will be considered as dead after
4396 <count> consecutive unsuccessful health checks. This value defaults to 3 if
4397 unspecified. See also the "check", "inter" and "rise" parameters.
4398
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01004399id <value>
4400 Set a persistent value for server ID. Must be unique and larger than 1000, as
4401 smaller values are reserved for auto-assigned ids.
4402
Willy Tarreau198a7442008-01-17 12:05:32 +01004403inter <delay>
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01004404fastinter <delay>
4405downinter <delay>
Willy Tarreau198a7442008-01-17 12:05:32 +01004406 The "inter" parameter sets the interval between two consecutive health checks
4407 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01004408 It is also possible to use "fastinter" and "downinter" to optimize delays
Willy Tarreau41a340d2008-01-22 12:25:31 +01004409 between checks depending on the server state :
4410
4411 Server state | Interval used
4412 ---------------------------------+-----------------------------------------
4413 UP 100% (non-transitional) | "inter"
4414 ---------------------------------+-----------------------------------------
4415 Transitionally UP (going down), |
4416 Transitionally DOWN (going up), | "fastinter" if set, "inter" otherwise.
4417 or yet unchecked. |
4418 ---------------------------------+-----------------------------------------
4419 DOWN 100% (non-transitional) | "downinter" if set, "inter" otherwise.
4420 ---------------------------------+-----------------------------------------
4421
4422 Just as with every other time-based parameter, they can be entered in any
4423 other explicit unit among { us, ms, s, m, h, d }. The "inter" parameter also
4424 serves as a timeout for health checks sent to servers if "timeout check" is
4425 not set. In order to reduce "resonance" effects when multiple servers are
4426 hosted on the same hardware, the health-checks of all servers are started
4427 with a small time offset between them. It is also possible to add some random
4428 noise in the health checks interval using the global "spread-checks"
4429 keyword. This makes sense for instance when a lot of backends use the same
4430 servers.
Willy Tarreau198a7442008-01-17 12:05:32 +01004431
4432maxconn <maxconn>
4433 The "maxconn" parameter specifies the maximal number of concurrent
4434 connections that will be sent to this server. If the number of incoming
4435 concurrent requests goes higher than this value, they will be queued, waiting
4436 for a connection to be released. This parameter is very important as it can
4437 save fragile servers from going down under extreme loads. If a "minconn"
4438 parameter is specified, the limit becomes dynamic. The default value is "0"
4439 which means unlimited. See also the "minconn" and "maxqueue" parameters, and
4440 the backend's "fullconn" keyword.
4441
4442maxqueue <maxqueue>
4443 The "maxqueue" parameter specifies the maximal number of connections which
4444 will wait in the queue for this server. If this limit is reached, next
4445 requests will be redispatched to other servers instead of indefinitely
4446 waiting to be served. This will break persistence but may allow people to
4447 quickly re-log in when the server they try to connect to is dying. The
4448 default value is "0" which means the queue is unlimited. See also the
4449 "maxconn" and "minconn" parameters.
4450
4451minconn <minconn>
4452 When the "minconn" parameter is set, the maxconn limit becomes a dynamic
4453 limit following the backend's load. The server will always accept at least
4454 <minconn> connections, never more than <maxconn>, and the limit will be on
4455 the ramp between both values when the backend has less than <fullconn>
4456 concurrent connections. This makes it possible to limit the load on the
4457 server during normal loads, but push it further for important loads without
4458 overloading the server during exceptionnal loads. See also the "maxconn"
4459 and "maxqueue" parameters, as well as the "fullconn" backend keyword.
4460
4461port <port>
4462 Using the "port" parameter, it becomes possible to use a different port to
4463 send health-checks. On some servers, it may be desirable to dedicate a port
4464 to a specific component able to perform complex tests which are more suitable
4465 to health-checks than the application. It is common to run a simple script in
4466 inetd for instance. This parameter is ignored if the "check" parameter is not
4467 set. See also the "addr" parameter.
4468
Willy Tarreau21d2af32008-02-14 20:25:24 +01004469redir <prefix>
4470 The "redir" parameter enables the redirection mode for all GET and HEAD
4471 requests addressing this server. This means that instead of having HAProxy
4472 forward the request to the server, it will send an "HTTP 302" response with
4473 the "Location" header composed of this prefix immediately followed by the
4474 requested URI beginning at the leading '/' of the path component. That means
4475 that no trailing slash should be used after <prefix>. All invalid requests
4476 will be rejected, and all non-GET or HEAD requests will be normally served by
4477 the server. Note that since the response is completely forged, no header
4478 mangling nor cookie insertion is possible in the respose. However, cookies in
4479 requests are still analysed, making this solution completely usable to direct
4480 users to a remote location in case of local disaster. Main use consists in
4481 increasing bandwidth for static servers by having the clients directly
4482 connect to them. Note: never use a relative location here, it would cause a
4483 loop between the client and HAProxy!
4484
4485 Example : server srv1 192.168.1.1:80 redir http://image1.mydomain.com check
4486
Willy Tarreau198a7442008-01-17 12:05:32 +01004487rise <count>
4488 The "rise" parameter states that a server will be considered as operational
4489 after <count> consecutive successful health checks. This value defaults to 2
4490 if unspecified. See also the "check", "inter" and "fall" parameters.
4491
Willy Tarreau5764b382007-11-30 17:46:49 +01004492slowstart <start_time_in_ms>
Willy Tarreau198a7442008-01-17 12:05:32 +01004493 The "slowstart" parameter for a server accepts a value in milliseconds which
Willy Tarreau5764b382007-11-30 17:46:49 +01004494 indicates after how long a server which has just come back up will run at
Willy Tarreaubefdff12007-12-02 22:27:38 +01004495 full speed. Just as with every other time-based parameter, it can be entered
4496 in any other explicit unit among { us, ms, s, m, h, d }. The speed grows
4497 linearly from 0 to 100% during this time. The limitation applies to two
4498 parameters :
Willy Tarreau5764b382007-11-30 17:46:49 +01004499
4500 - maxconn: the number of connections accepted by the server will grow from 1
4501 to 100% of the usual dynamic limit defined by (minconn,maxconn,fullconn).
4502
4503 - weight: when the backend uses a dynamic weighted algorithm, the weight
4504 grows linearly from 1 to 100%. In this case, the weight is updated at every
Willy Tarreau198a7442008-01-17 12:05:32 +01004505 health-check. For this reason, it is important that the "inter" parameter
4506 is smaller than the "slowstart", in order to maximize the number of steps.
Willy Tarreau5764b382007-11-30 17:46:49 +01004507
4508 The slowstart never applies when haproxy starts, otherwise it would cause
4509 trouble to running servers. It only applies when a server has been previously
4510 seen as failed.
4511
Willy Tarreau198a7442008-01-17 12:05:32 +01004512source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreauc76721d2009-02-04 20:20:58 +01004513source <addr>[:<port>] [interface <name>] ...
Willy Tarreau198a7442008-01-17 12:05:32 +01004514 The "source" parameter sets the source address which will be used when
4515 connecting to the server. It follows the exact same parameters and principle
4516 as the backend "source" keyword, except that it only applies to the server
4517 referencing it. Please consult the "source" keyword for details.
4518
Krzysztof Piotr Oledzkic8b16fc2008-02-18 01:26:35 +01004519track [<proxy>/]<server>
4520 This option enables ability to set the current state of the server by
4521 tracking another one. Only a server with checks enabled can be tracked
4522 so it is not possible for example to track a server that tracks another
4523 one. If <proxy> is omitted the current one is used. If disable-on-404 is
4524 used, it has to be enabled on both proxies.
4525
Willy Tarreau198a7442008-01-17 12:05:32 +01004526weight <weight>
4527 The "weight" parameter is used to adjust the server's weight relative to
4528 other servers. All servers will receive a load proportional to their weight
4529 relative to the sum of all weights, so the higher the weight, the higher the
4530 load. The default weight is 1, and the maximal value is 255. If this
4531 parameter is used to distribute the load according to server's capacity, it
4532 is recommended to start with values which can both grow and shrink, for
4533 instance between 10 and 100 to leave enough room above and below for later
4534 adjustments.
4535
Willy Tarreauced27012008-01-17 20:35:34 +01004536
45372.5) HTTP header manipulation
4538-----------------------------
4539
4540In HTTP mode, it is possible to rewrite, add or delete some of the request and
4541response headers based on regular expressions. It is also possible to block a
4542request or a response if a particular header matches a regular expression,
4543which is enough to stop most elementary protocol attacks, and to protect
4544against information leak from the internal network. But there is a limitation
4545to this : since HAProxy's HTTP engine does not support keep-alive, only headers
4546passed during the first request of a TCP session will be seen. All subsequent
4547headers will be considered data only and not analyzed. Furthermore, HAProxy
4548never touches data contents, it stops analysis at the end of headers.
4549
4550This section covers common usage of the following keywords, described in detail
4551in section 2.2.1 :
4552
4553 - reqadd <string>
4554 - reqallow <search>
4555 - reqiallow <search>
4556 - reqdel <search>
4557 - reqidel <search>
4558 - reqdeny <search>
4559 - reqideny <search>
4560 - reqpass <search>
4561 - reqipass <search>
4562 - reqrep <search> <replace>
4563 - reqirep <search> <replace>
4564 - reqtarpit <search>
4565 - reqitarpit <search>
4566 - rspadd <string>
4567 - rspdel <search>
4568 - rspidel <search>
4569 - rspdeny <search>
4570 - rspideny <search>
4571 - rsprep <search> <replace>
4572 - rspirep <search> <replace>
4573
4574With all these keywords, the same conventions are used. The <search> parameter
4575is a POSIX extended regular expression (regex) which supports grouping through
4576parenthesis (without the backslash). Spaces and other delimiters must be
4577prefixed with a backslash ('\') to avoid confusion with a field delimiter.
4578Other characters may be prefixed with a backslash to change their meaning :
4579
4580 \t for a tab
4581 \r for a carriage return (CR)
4582 \n for a new line (LF)
4583 \ to mark a space and differentiate it from a delimiter
4584 \# to mark a sharp and differentiate it from a comment
4585 \\ to use a backslash in a regex
4586 \\\\ to use a backslash in the text (*2 for regex, *2 for haproxy)
4587 \xXX to write the ASCII hex code XX as in the C language
4588
4589The <replace> parameter contains the string to be used to replace the largest
4590portion of text matching the regex. It can make use of the special characters
4591above, and can reference a substring which is delimited by parenthesis in the
4592regex, by writing a backslash ('\') immediately followed by one digit from 0 to
Willy Tarreaud2a4aa22008-01-31 15:28:22 +010045939 indicating the group position (0 designating the entire line). This practice
Willy Tarreauced27012008-01-17 20:35:34 +01004594is very common to users of the "sed" program.
4595
4596The <string> parameter represents the string which will systematically be added
4597after the last header line. It can also use special character sequences above.
4598
4599Notes related to these keywords :
4600---------------------------------
4601 - these keywords are not always convenient to allow/deny based on header
4602 contents. It is strongly recommended to use ACLs with the "block" keyword
4603 instead, resulting in far more flexible and manageable rules.
4604
4605 - lines are always considered as a whole. It is not possible to reference
4606 a header name only or a value only. This is important because of the way
4607 headers are written (notably the number of spaces after the colon).
4608
4609 - the first line is always considered as a header, which makes it possible to
4610 rewrite or filter HTTP requests URIs or response codes, but in turn makes
4611 it harder to distinguish between headers and request line. The regex prefix
4612 ^[^\ \t]*[\ \t] matches any HTTP method followed by a space, and the prefix
4613 ^[^ \t:]*: matches any header name followed by a colon.
4614
4615 - for performances reasons, the number of characters added to a request or to
4616 a response is limited at build time to values between 1 and 4 kB. This
4617 should normally be far more than enough for most usages. If it is too short
4618 on occasional usages, it is possible to gain some space by removing some
4619 useless headers before adding new ones.
4620
4621 - keywords beginning with "reqi" and "rspi" are the same as their couterpart
4622 without the 'i' letter except that they ignore case when matching patterns.
4623
4624 - when a request passes through a frontend then a backend, all req* rules
4625 from the frontend will be evaluated, then all req* rules from the backend
4626 will be evaluated. The reverse path is applied to responses.
4627
4628 - req* statements are applied after "block" statements, so that "block" is
4629 always the first one, but before "use_backend" in order to permit rewriting
4630 before switching.
4631
Willy Tarreau5764b382007-11-30 17:46:49 +01004632
Willy Tarreauced27012008-01-17 20:35:34 +010046332.6) Logging
Willy Tarreau844e3c52008-01-11 16:28:18 +01004634------------
4635
Willy Tarreaucc6c8912009-02-22 10:53:55 +01004636One of HAProxy's strong points certainly lies is its precise logs. It probably
4637provides the finest level of information available for such a product, which is
4638very important for troubleshooting complex environments. Standard information
4639provided in logs include client ports, TCP/HTTP state timers, precise session
4640state at termination and precise termination cause, information about decisions
4641to direct trafic to a server, and of course the ability to capture arbitrary
4642headers.
4643
4644In order to improve administrators reactivity, it offers a great transparency
4645about encountered problems, both internal and external, and it is possible to
4646send logs to different sources at the same time with different level filters :
4647
4648 - global process-level logs (system errors, start/stop, etc..)
4649 - per-instance system and internal errors (lack of resource, bugs, ...)
4650 - per-instance external troubles (servers up/down, max connections)
4651 - per-instance activity (client connections), either at the establishment or
4652 at the termination.
4653
4654The ability to distribute different levels of logs to different log servers
4655allow several production teams to interact and to fix their problems as soon
4656as possible. For example, the system team might monitor system-wide errors,
4657while the application team might be monitoring the up/down for their servers in
4658real time, and the security team might analyze the activity logs with one hour
4659delay.
4660
4661
46622.6.1) Log levels
4663-----------------
4664
4665TCP and HTTP connections can be logged with informations such as date, time,
4666source IP address, destination address, connection duration, response times,
4667HTTP request, the HTTP return code, number of bytes transmitted, the conditions
4668in which the session ended, and even exchanged cookies values, to track a
4669particular user's problems for example. All messages are sent to up to two
4670syslog servers. Check the "log" keyword in section 2.2 for more info about log
4671facilities.
4672
4673
46742.6.2) Log formats
4675------------------
4676
4677HAProxy supports 3 log formats. Several fields are common between these formats
4678and will be detailed in the next sections. A few of them may slightly vary with
4679the configuration, due to indicators specific to certain options. The supported
4680formats are the following ones :
4681
4682 - the default format, which is very basic and very rarely used. It only
4683 provides very basic information about the incoming connection at the moment
4684 it is accepted : source IP:port, destination IP:port, and frontend-name.
4685 This mode will eventually disappear so it will not be described to great
4686 extents.
4687
4688 - the TCP format, which is more advanced. This format is enabled when "option
4689 tcplog" is set on the frontend. HAProxy will then usually wait for the
4690 connection to terminate before logging. This format provides much richer
4691 information, such as timers, connection counts, queue size, etc... This
4692 format is recommended for pure TCP proxies.
4693
4694 - the HTTP format, which is the most advanced for HTTP proxying. This format
4695 is enabled when "option httplog" is set on the frontend. It provides the
4696 same information as the TCP format with some HTTP-specific fields such as
4697 the request, the status code, and captures of headers and cookies. This
4698 format is recommended for HTTP proxies.
4699
4700Next sections will go deeper into details for each of these formats. Format
4701specification will be performed on a "field" basis. Unless stated otherwise, a
4702field is a portion of text delimited by any number of spaces. Since syslog
4703servers are susceptible of inserting fields at the beginning of a line, it is
4704always assumed that the first field is the one containing the process name and
4705identifier.
4706
4707Note : Since log lines may be quite long, the log examples in sections below
4708 might be broken into multiple lines. The example log lines will be
4709 prefixed with 3 closing angle brackets ('>>>') and each time a log is
4710 broken into multiple lines, each non-final line will end with a
4711 backslash ('\') and the next line will start indented by two characters.
4712
4713
47142.6.2.1) Default log format
4715---------------------------
4716
4717This format is used when no specific option is set. The log is emitted as soon
4718as the connection is accepted. One should note that this currently is the only
4719format which logs the request's destination IP and ports.
4720
4721 Example :
4722 listen www
4723 mode http
4724 log global
4725 server srv1 127.0.0.1:8000
4726
4727 >>> Feb 6 12:12:09 localhost \
4728 haproxy[14385]: Connect from 10.0.1.2:33312 to 10.0.3.31:8012 \
4729 (www/HTTP)
4730
4731 Field Format Extract from the example above
4732 1 process_name '[' pid ']:' haproxy[14385]:
4733 2 'Connect from' Connect from
4734 3 source_ip ':' source_port 10.0.1.2:33312
4735 4 'to' to
4736 5 destination_ip ':' destination_port 10.0.3.31:8012
4737 6 '(' frontend_name '/' mode ')' (www/HTTP)
4738
4739Detailed fields description :
4740 - "source_ip" is the IP address of the client which initiated the connection.
4741 - "source_port" is the TCP port of the client which initiated the connection.
4742 - "destination_ip" is the IP address the client connected to.
4743 - "destination_port" is the TCP port the client connected to.
4744 - "frontend_name" is the name of the frontend (or listener) which received
4745 and processed the connection.
4746 - "mode is the mode the frontend is operating (TCP or HTTP).
4747
4748It is advised not to use this deprecated format for newer installations as it
4749will eventually disappear.
4750
4751
47522.6.2.2) TCP log format
4753-----------------------
4754
4755The TCP format is used when "option tcplog" is specified in the frontend, and
4756is the recommended format for pure TCP proxies. It provides a lot of precious
4757information for troubleshooting. Since this format includes timers and byte
4758counts, the log is normally emitted at the end of the session. It can be
4759emitted earlier if "option logasap" is specified, which makes sense in most
4760environments with long sessions such as remote terminals. Sessions which match
4761the "monitor" rules are never logged. It is also possible not to emit logs for
4762sessions for which no data were exchanged between the client and the server, by
4763specifying "option dontlognull" in the frontend. A few fields may slightly vary
4764depending on some configuration options, those are marked with a star ('*')
4765after the field name below.
4766
4767 Example :
4768 frontend fnt
4769 mode tcp
4770 option tcplog
4771 log global
4772 default_backend bck
4773
4774 backend bck
4775 server srv1 127.0.0.1:8000
4776
4777 >>> Feb 6 12:12:56 localhost \
4778 haproxy[14387]: 10.0.1.2:33313 [06/Feb/2009:12:12:51.443] fnt \
4779 bck/srv1 0/0/5007 212 -- 0/0/0/0/3 0/0
4780
4781 Field Format Extract from the example above
4782 1 process_name '[' pid ']:' haproxy[14387]:
4783 2 client_ip ':' client_port 10.0.1.2:33313
4784 3 '[' accept_date ']' [06/Feb/2009:12:12:51.443]
4785 4 frontend_name fnt
4786 5 backend_name '/' server_name bck/srv1
4787 6 Tw '/' Tc '/' Tt* 0/0/5007
4788 7 bytes_read* 212
4789 8 termination_state --
4790 9 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 0/0/0/0/3
4791 10 srv_queue '/' backend_queue 0/0
4792
4793Detailed fields description :
4794 - "client_ip" is the IP address of the client which initiated the TCP
4795 connection to haproxy.
4796
4797 - "client_port" is the TCP port of the client which initiated the connection.
4798
4799 - "accept_date" is the exact date when the connection was received by haproxy
4800 (which might be very slightly different from the date observed on the
4801 network if there was some queuing in the system's backlog). This is usually
4802 the same date which may appear in any upstream firewall's log.
4803
4804 - "frontend_name" is the name of the frontend (or listener) which received
4805 and processed the connection.
4806
4807 - "backend_name" is the name of the backend (or listener) which was selected
4808 to manage the connection to the server. This will be the same as the
4809 frontend if no switching rule has been applied, which is common for TCP
4810 applications.
4811
4812 - "server_name" is the name of the last server to which the connection was
4813 sent, which might differ from the first one if there were connection errors
4814 and a redispatch occurred. Note that this server belongs to the backend
4815 which processed the request. If the connection was aborted before reaching
4816 a server, "<NOSRV>" is indicated instead of a server name.
4817
4818 - "Tw" is the total time in milliseconds spent waiting in the various queues.
4819 It can be "-1" if the connection was aborted before reaching the queue.
4820 See "Timers" below for more details.
4821
4822 - "Tc" is the total time in milliseconds spent waiting for the connection to
4823 establish to the final server, including retries. It can be "-1" if the
4824 connection was aborted before a connection could be established. See
4825 "Timers" below for more details.
4826
4827 - "Tt" is the total time in milliseconds elapsed between the accept and the
4828 last close. It covers all possible processings. There is one exception, if
4829 "option logasap" was specified, then the time counting stops at the moment
4830 the log is emitted. In this case, a '+' sign is prepended before the value,
4831 indicating that the final one will be larger. See "Timers" below for more
4832 details.
4833
4834 - "bytes_read" is the total number of bytes transmitted from the server to
4835 the client when the log is emitted. If "option logasap" is specified, the
4836 this value will be prefixed with a '+' sign indicating that the final one
4837 may be larger. Please note that this value is a 64-bit counter, so log
4838 analysis tools must be able to handle it without overflowing.
4839
4840 - "termination_state" is the condition the session was in when the session
4841 ended. This indicates the session state, which side caused the end of
4842 session to happen, and for what reason (timeout, error, ...). The normal
4843 flags should be "--", indicating the session was closed by either end with
4844 no data remaining in buffers. See below "Session state at disconnection"
4845 for more details.
4846
4847 - "actconn" is the total number of concurrent connections on the process when
4848 the session was logged. It it useful to detect when some per-process system
4849 limits have been reached. For instance, if actconn is close to 512 when
4850 multiple connection errors occur, chances are high that the system limits
4851 the process to use a maximum of 1024 file descriptors and that all of them
4852 are used. See section 1 "Global parameters" to find how to tune the system.
4853
4854 - "feconn" is the total number of concurrent connections on the frontend when
4855 the session was logged. It is useful to estimate the amount of resource
4856 required to sustain high loads, and to detect when the frontend's "maxconn"
4857 has been reached. Most often when this value increases by huge jumps, it is
4858 because there is congestion on the backend servers, but sometimes it can be
4859 caused by a denial of service attack.
4860
4861 - "beconn" is the total number of concurrent connections handled by the
4862 backend when the session was logged. It includes the total number of
4863 concurrent connections active on servers as well as the number of
4864 connections pending in queues. It is useful to estimate the amount of
4865 additional servers needed to support high loads for a given application.
4866 Most often when this value increases by huge jumps, it is because there is
4867 congestion on the backend servers, but sometimes it can be caused by a
4868 denial of service attack.
4869
4870 - "srv_conn" is the total number of concurrent connections still active on
4871 the server when the session was logged. It can never exceed the server's
4872 configured "maxconn" parameter. If this value is very often close or equal
4873 to the server's "maxconn", it means that traffic regulation is involved a
4874 lot, meaning that either the server's maxconn value is too low, or that
4875 there aren't enough servers to process the load with an optimal response
4876 time. When only one of the server's "srv_conn" is high, it usually means
4877 that this server has some trouble causing the connections to take longer to
4878 be processed than on other servers.
4879
4880 - "retries" is the number of connection retries experienced by this session
4881 when trying to connect to the server. It must normally be zero, unless a
4882 server is being stopped at the same moment the connection was attempted.
4883 Frequent retries generally indicate either a network problem between
4884 haproxy and the server, or a misconfigured system backlog on the server
4885 preventing new connections from being queued. This field may optionally be
4886 prefixed with a '+' sign, indicating that the session has experienced a
4887 redispatch after the maximal retry count has been reached on the initial
4888 server. In this case, the server name appearing in the log is the one the
4889 connection was redispatched to, and not the first one, though both may
4890 sometimes be the same in case of hashing for instance. So as a general rule
4891 of thumb, when a '+' is present in front of the retry count, this count
4892 should not be attributed to the logged server.
4893
4894 - "srv_queue" is the total number of requests which were processed before
4895 this one in the server queue. It is zero when the request has not gone
4896 through the server queue. It makes it possible to estimate the approximate
4897 server's response time by dividing the time spent in queue by the number of
4898 requests in the queue. It is worth noting that if a session experiences a
4899 redispatch and passes through two server queues, their positions will be
4900 cumulated. A request should not pass through both the server queue and the
4901 backend queue unless a redispatch occurs.
4902
4903 - "backend_queue" is the total number of requests which were processed before
4904 this one in the backend's global queue. It is zero when the request has not
4905 gone through the global queue. It makes it possible to estimate the average
4906 queue length, which easily translates into a number of missing servers when
4907 divided by a server's "maxconn" parameter. It is worth noting that if a
4908 session experiences a redispatch, it may pass twice in the backend's queue,
4909 and then both positions will be cumulated. A request should not pass
4910 through both the server queue and the backend queue unless a redispatch
4911 occurs.
4912
4913
49142.6.2.3) HTTP log format
4915------------------------
4916
4917The HTTP format is the most complete and the best suited for HTTP proxies. It
4918is enabled by when "option httplog" is specified in the frontend. It provides
4919the same level of information as the TCP format with additional features which
4920are specific to the HTTP protocol. Just like the TCP format, the log is usually
4921emitted at the end of the session, unless "option logasap" is specified, which
4922generally only makes sense for download sites. A session which matches the
4923"monitor" rules will never logged. It is also possible not to log sessions for
4924which no data were sent by the client by specifying "option dontlognull" in the
4925frontend.
4926
4927Most fields are shared with the TCP log, some being different. A few fields may
4928slightly vary depending on some configuration options. Those ones are marked
4929with a star ('*') after the field name below.
4930
4931 Example :
4932 frontend http-in
4933 mode http
4934 option httplog
4935 log global
4936 default_backend bck
4937
4938 backend static
4939 server srv1 127.0.0.1:8000
4940
4941 >>> Feb 6 12:14:14 localhost \
4942 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
4943 static/srv1 10/0/30/69/109 200 2750 - - ---- 1/1/1/1/0 0/0 {1wt.eu} \
4944 {} "GET /index.html HTTP/1.1"
4945
4946 Field Format Extract from the example above
4947 1 process_name '[' pid ']:' haproxy[14389]:
4948 2 client_ip ':' client_port 10.0.1.2:33317
4949 3 '[' accept_date ']' [06/Feb/2009:12:14:14.655]
4950 4 frontend_name http-in
4951 5 backend_name '/' server_name static/srv1
4952 6 Tq '/' Tw '/' Tc '/' Tr '/' Tt* 10/0/30/69/109
4953 7 status_code 200
4954 8 bytes_read* 2750
4955 9 captured_request_cookie -
4956 10 captured_response_cookie -
4957 11 termination_state ----
4958 12 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 1/1/1/1/0
4959 13 srv_queue '/' backend_queue 0/0
4960 14 '{' captured_request_headers* '}' {haproxy.1wt.eu}
4961 15 '{' captured_response_headers* '}' {}
4962 16 '"' http_request '"' "GET /index.html HTTP/1.1"
4963
4964
4965Detailed fields description :
4966 - "client_ip" is the IP address of the client which initiated the TCP
4967 connection to haproxy.
4968
4969 - "client_port" is the TCP port of the client which initiated the connection.
4970
4971 - "accept_date" is the exact date when the TCP connection was received by
4972 haproxy (which might be very slightly different from the date observed on
4973 the network if there was some queuing in the system's backlog). This is
4974 usually the same date which may appear in any upstream firewall's log. This
4975 does not depend on the fact that the client has sent the request or not.
4976
4977 - "frontend_name" is the name of the frontend (or listener) which received
4978 and processed the connection.
4979
4980 - "backend_name" is the name of the backend (or listener) which was selected
4981 to manage the connection to the server. This will be the same as the
4982 frontend if no switching rule has been applied.
4983
4984 - "server_name" is the name of the last server to which the connection was
4985 sent, which might differ from the first one if there were connection errors
4986 and a redispatch occurred. Note that this server belongs to the backend
4987 which processed the request. If the request was aborted before reaching a
4988 server, "<NOSRV>" is indicated instead of a server name. If the request was
4989 intercepted by the stats subsystem, "<STATS>" is indicated instead.
4990
4991 - "Tq" is the total time in milliseconds spent waiting for the client to send
4992 a full HTTP request, not counting data. It can be "-1" if the connection
4993 was aborted before a complete request could be received. It should always
4994 be very small because a request generally fits in one single packet. Large
4995 times here generally indicate network trouble between the client and
4996 haproxy. See "Timers" below for more details.
4997
4998 - "Tw" is the total time in milliseconds spent waiting in the various queues.
4999 It can be "-1" if the connection was aborted before reaching the queue.
5000 See "Timers" below for more details.
5001
5002 - "Tc" is the total time in milliseconds spent waiting for the connection to
5003 establish to the final server, including retries. It can be "-1" if the
5004 request was aborted before a connection could be established. See "Timers"
5005 below for more details.
5006
5007 - "Tr" is the total time in milliseconds spent waiting for the server to send
5008 a full HTTP response, not counting data. It can be "-1" if the request was
5009 aborted before a complete response could be received. It generally matches
5010 the server's processing time for the request, though it may be altered by
5011 the amount of data sent by the client to the server. Large times here on
5012 "GET" requests generally indicate an overloaded server. See "Timers" below
5013 for more details.
5014
5015 - "Tt" is the total time in milliseconds elapsed between the accept and the
5016 last close. It covers all possible processings. There is one exception, if
5017 "option logasap" was specified, then the time counting stops at the moment
5018 the log is emitted. In this case, a '+' sign is prepended before the value,
5019 indicating that the final one will be larger. See "Timers" below for more
5020 details.
5021
5022 - "status_code" is the HTTP status code returned to the client. This status
5023 is generally set by the server, but it might also be set by haproxy when
5024 the server cannot be reached or when its response is blocked by haproxy.
5025
5026 - "bytes_read" is the total number of bytes transmitted to the client when
5027 the log is emitted. This does include HTTP headers. If "option logasap" is
5028 specified, the this value will be prefixed with a '+' sign indicating that
5029 the final one may be larger. Please note that this value is a 64-bit
5030 counter, so log analysis tools must be able to handle it without
5031 overflowing.
5032
5033 - "captured_request_cookie" is an optional "name=value" entry indicating that
5034 the client had this cookie in the request. The cookie name and its maximum
5035 length are defined by the "capture cookie" statement in the frontend
5036 configuration. The field is a single dash ('-') when the option is not
5037 set. Only one cookie may be captured, it is generally used to track session
5038 ID exchanges between a client and a server to detect session crossing
5039 between clients due to application bugs. For more details, please consult
5040 the section "Capturing HTTP headers and cookies" below.
5041
5042 - "captured_response_cookie" is an optional "name=value" entry indicating
5043 that the server has returned a cookie with its response. The cookie name
5044 and its maximum length are defined by the "capture cookie" statement in the
5045 frontend configuration. The field is a single dash ('-') when the option is
5046 not set. Only one cookie may be captured, it is generally used to track
5047 session ID exchanges between a client and a server to detect session
5048 crossing between clients due to application bugs. For more details, please
5049 consult the section "Capturing HTTP headers and cookies" below.
5050
5051 - "termination_state" is the condition the session was in when the session
5052 ended. This indicates the session state, which side caused the end of
5053 session to happen, for what reason (timeout, error, ...), just like in TCP
5054 logs, and information about persistence operations on cookies in the last
5055 two characters. The normal flags should begin with "--", indicating the
5056 session was closed by either end with no data remaining in buffers. See
5057 below "Session state at disconnection" for more details.
5058
5059 - "actconn" is the total number of concurrent connections on the process when
5060 the session was logged. It it useful to detect when some per-process system
5061 limits have been reached. For instance, if actconn is close to 512 or 1024
5062 when multiple connection errors occur, chances are high that the system
5063 limits the process to use a maximum of 1024 file descriptors and that all
5064 of them are used. See section 1 "Global parameters" to find how to tune the
5065 system.
5066
5067 - "feconn" is the total number of concurrent connections on the frontend when
5068 the session was logged. It is useful to estimate the amount of resource
5069 required to sustain high loads, and to detect when the frontend's "maxconn"
5070 has been reached. Most often when this value increases by huge jumps, it is
5071 because there is congestion on the backend servers, but sometimes it can be
5072 caused by a denial of service attack.
5073
5074 - "beconn" is the total number of concurrent connections handled by the
5075 backend when the session was logged. It includes the total number of
5076 concurrent connections active on servers as well as the number of
5077 connections pending in queues. It is useful to estimate the amount of
5078 additional servers needed to support high loads for a given application.
5079 Most often when this value increases by huge jumps, it is because there is
5080 congestion on the backend servers, but sometimes it can be caused by a
5081 denial of service attack.
5082
5083 - "srv_conn" is the total number of concurrent connections still active on
5084 the server when the session was logged. It can never exceed the server's
5085 configured "maxconn" parameter. If this value is very often close or equal
5086 to the server's "maxconn", it means that traffic regulation is involved a
5087 lot, meaning that either the server's maxconn value is too low, or that
5088 there aren't enough servers to process the load with an optimal response
5089 time. When only one of the server's "srv_conn" is high, it usually means
5090 that this server has some trouble causing the requests to take longer to be
5091 processed than on other servers.
5092
5093 - "retries" is the number of connection retries experienced by this session
5094 when trying to connect to the server. It must normally be zero, unless a
5095 server is being stopped at the same moment the connection was attempted.
5096 Frequent retries generally indicate either a network problem between
5097 haproxy and the server, or a misconfigured system backlog on the server
5098 preventing new connections from being queued. This field may optionally be
5099 prefixed with a '+' sign, indicating that the session has experienced a
5100 redispatch after the maximal retry count has been reached on the initial
5101 server. In this case, the server name appearing in the log is the one the
5102 connection was redispatched to, and not the first one, though both may
5103 sometimes be the same in case of hashing for instance. So as a general rule
5104 of thumb, when a '+' is present in front of the retry count, this count
5105 should not be attributed to the logged server.
5106
5107 - "srv_queue" is the total number of requests which were processed before
5108 this one in the server queue. It is zero when the request has not gone
5109 through the server queue. It makes it possible to estimate the approximate
5110 server's response time by dividing the time spent in queue by the number of
5111 requests in the queue. It is worth noting that if a session experiences a
5112 redispatch and passes through two server queues, their positions will be
5113 cumulated. A request should not pass through both the server queue and the
5114 backend queue unless a redispatch occurs.
5115
5116 - "backend_queue" is the total number of requests which were processed before
5117 this one in the backend's global queue. It is zero when the request has not
5118 gone through the global queue. It makes it possible to estimate the average
5119 queue length, which easily translates into a number of missing servers when
5120 divided by a server's "maxconn" parameter. It is worth noting that if a
5121 session experiences a redispatch, it may pass twice in the backend's queue,
5122 and then both positions will be cumulated. A request should not pass
5123 through both the server queue and the backend queue unless a redispatch
5124 occurs.
5125
5126 - "captured_request_headers" is a list of headers captured in the request due
5127 to the presence of the "capture request header" statement in the frontend.
5128 Multiple headers can be captured, they will be delimited by a vertical bar
5129 ('|'). When no capture is enabled, the braces do not appear, causing a
5130 shift of remaining fields. It is important to note that this field may
5131 contain spaces, and that using it requires a smarter log parser than when
5132 it's not used. Please consult the section "Capturing HTTP headers and
5133 cookies" below for more details.
5134
5135 - "captured_response_headers" is a list of headers captured in the response
5136 due to the presence of the "capture response header" statement in the
5137 frontend. Multiple headers can be captured, they will be delimited by a
5138 vertical bar ('|'). When no capture is enabled, the braces do not appear,
5139 causing a shift of remaining fields. It is important to note that this
5140 field may contain spaces, and that using it requires a smarter log parser
5141 than when it's not used. Please consult the section "Capturing HTTP headers
5142 and cookies" below for more details.
5143
5144 - "http_request" is the complete HTTP request line, including the method,
5145 request and HTTP version string. Non-printable characters are encoded (see
5146 below the section "Non-printable characters"). This is always the last
5147 field, and it is always delimited by quotes and is the only one which can
5148 contain quotes. If new fields are added to the log format, they will be
5149 added before this field. This field might be truncated if the request is
5150 huge and does not fit in the standard syslog buffer (1024 characters). This
5151 is the reason why this field must always remain the last one.
5152
5153
51542.6.3) Advanced logging options
5155-------------------------------
5156
5157Some advanced logging options are often looked for but are not easy to find out
5158just by looking at the various options. Here is an entry point for the few
5159options which can enable better logging. Please refer to the keywords reference
5160for more information about their usage.
5161
5162
51632.6.3.1) Disabling logging of external tests
5164--------------------------------------------
5165
5166It is quite common to have some monitoring tools perform health checks on
5167haproxy. Sometimes it will be a layer 3 load-balancer such as LVS or any
5168commercial load-balancer, and sometimes it will simply be a more complete
5169monitoring system such as Nagios. When the tests are very frequent, users often
5170ask how to disable logging for those checks. There are three possibilities :
5171
5172 - if connections come from everywhere and are just TCP probes, it is often
5173 desired to simply disable logging of connections without data exchange, by
5174 setting "option dontlognull" in the frontend. It also disables logging of
5175 port scans, which may or may not be desired.
5176
5177 - if the connection come from a known source network, use "monitor-net" to
5178 declare this network as monitoring only. Any host in this network will then
5179 only be able to perform health checks, and their requests will not be
5180 logged. This is generally appropriate to designate a list of equipments
5181 such as other load-balancers.
5182
5183 - if the tests are performed on a known URI, use "monitor-uri" to declare
5184 this URI as dedicated to monitoring. Any host sending this request will
5185 only get the result of a health-check, and the request will not be logged.
5186
5187
51882.6.3.2) Logging before waiting for the session to terminate
5189------------------------------------------------------------
5190
5191The problem with logging at end of connection is that you have no clue about
5192what is happening during very long sessions, such as remote terminal sessions
5193or large file downloads. This problem can be worked around by specifying
5194"option logasap" in the frontend. Haproxy will then log as soon as possible,
5195just before data transfer begins. This means that in case of TCP, it will still
5196log the connection status to the server, and in case of HTTP, it will log just
5197after processing the server headers. In this case, the number of bytes reported
5198is the number of header bytes sent to the client. In order to avoid confusion
5199with normal logs, the total time field and the number of bytes are prefixed
5200with a '+' sign which means that real numbers are certainly larger.
5201
5202
52032.6.4) Timing events
5204--------------------
5205
5206Timers provide a great help in troubleshooting network problems. All values are
5207reported in milliseconds (ms). These timers should be used in conjunction with
5208the session termination flags. In TCP mode with "option tcplog" set on the
5209frontend, 3 control points are reported under the form "Tw/Tc/Tt", and in HTTP
5210mode, 5 control points are reported under the form "Tq/Tw/Tc/Tr/Tt" :
5211
5212 - Tq: total time to get the client request (HTTP mode only). It's the time
5213 elapsed between the moment the client connection was accepted and the
5214 moment the proxy received the last HTTP header. The value "-1" indicates
5215 that the end of headers (empty line) has never been seen. This happens when
5216 the client closes prematurely or times out.
5217
5218 - Tw: total time spent in the queues waiting for a connection slot. It
5219 accounts for backend queue as well as the server queues, and depends on the
5220 queue size, and the time needed for the server to complete previous
5221 requests. The value "-1" means that the request was killed before reaching
5222 the queue, which is generally what happens with invalid or denied requests.
5223
5224 - Tc: total time to establish the TCP connection to the server. It's the time
5225 elapsed between the moment the proxy sent the connection request, and the
5226 moment it was acknowledged by the server, or between the TCP SYN packet and
5227 the matching SYN/ACK packet in return. The value "-1" means that the
5228 connection never established.
5229
5230 - Tr: server response time (HTTP mode only). It's the time elapsed between
5231 the moment the TCP connection was established to the server and the moment
5232 the server sent its complete response headers. It purely shows its request
5233 processing time, without the network overhead due to the data transmission.
5234 It is worth noting that when the client has data to send to the server, for
5235 instance during a POST request, the time already runs, and this can distort
5236 apparent response time. For this reason, it's generally wise not to trust
5237 too much this field for POST requests initiated from clients behind an
5238 untrusted network. A value of "-1" here means that the last the response
5239 header (empty line) was never seen, most likely because the server timeout
5240 stroke before the server managed to process the request.
5241
5242 - Tt: total session duration time, between the moment the proxy accepted it
5243 and the moment both ends were closed. The exception is when the "logasap"
5244 option is specified. In this case, it only equals (Tq+Tw+Tc+Tr), and is
5245 prefixed with a '+' sign. From this field, we can deduce "Td", the data
5246 transmission time, by substracting other timers when valid :
5247
5248 Td = Tt - (Tq + Tw + Tc + Tr)
5249
5250 Timers with "-1" values have to be excluded from this equation. In TCP
5251 mode, "Tq" and "Tr" have to be excluded too. Note that "Tt" can never be
5252 negative.
5253
5254These timers provide precious indications on trouble causes. Since the TCP
5255protocol defines retransmit delays of 3, 6, 12... seconds, we know for sure
5256that timers close to multiples of 3s are nearly always related to lost packets
5257due to network problems (wires, negociation, congestion). Moreover, if "Tt" is
5258close to a timeout value specified in the configuration, it often means that a
5259session has been aborted on timeout.
5260
5261Most common cases :
5262
5263 - If "Tq" is close to 3000, a packet has probably been lost between the
5264 client and the proxy. This is very rare on local networks but might happen
5265 when clients are on far remote networks and send large requests. It may
5266 happen that values larger than usual appear here without any network cause.
5267 Sometimes, during an attack or just after a resource starvation has ended,
5268 haproxy may accept thousands of connections in a few milliseconds. The time
5269 spent accepting these connections will inevitably slightly delay processing
5270 of other connections, and it can happen that request times in the order of
5271 a few tens of milliseconds are measured after a few thousands of new
5272 connections have been accepted at once.
5273
5274 - If "Tc" is close to 3000, a packet has probably been lost between the
5275 server and the proxy during the server connection phase. This value should
5276 always be very low, such as 1 ms on local networks and less than a few tens
5277 of ms on remote networks.
5278
5279 - If "Tr" is nearly always lower than 3000 except some rare values which seem to
5280 be the average majored by 3000, there are probably some packets lost between
5281 the proxy and the server.
5282
5283 - If "Tt" is large even for small byte counts, it generally is because
5284 neither the client nor the server decides to close the connection, for
5285 instance because both have agreed on a keep-alive connection mode. In order
5286 to solve this issue, it will be needed to specify "option httpclose" on
5287 either the frontend or the backend. If the problem persists, it means that
5288 the server ignores the "close" connection mode and expects the client to
5289 close. Then it will be required to use "option forceclose". Having the
5290 smallest possible 'Tt' is important when connection regulation is used with
5291 the "maxconn" option on the servers, since no new connection will be sent
5292 to the server until another one is released.
5293
5294Other noticeable HTTP log cases ('xx' means any value to be ignored) :
5295
5296 Tq/Tw/Tc/Tr/+Tt The "option logasap" is present on the frontend and the log
5297 was emitted before the data phase. All the timers are valid
5298 except "Tt" which is shorter than reality.
5299
5300 -1/xx/xx/xx/Tt The client was not able to send a complete request in time
5301 or it aborted too early. Check the session termination flags
5302 then "timeout http-request" and "timeout client" settings.
5303
5304 Tq/-1/xx/xx/Tt It was not possible to process the request, maybe because
5305 servers were out of order, because the request was invalid
5306 or forbidden by ACL rules. Check the session termination
5307 flags.
5308
5309 Tq/Tw/-1/xx/Tt The connection could not establish on the server. Either it
5310 actively refused it or it timed out after Tt-(Tq+Tw) ms.
5311 Check the session termination flags, then check the
5312 "timeout connect" setting. Note that the tarpit action might
5313 return similar-looking patterns, with "Tw" equal to the time
5314 the client connection was maintained open.
5315
5316 Tq/Tw/Tc/-1/Tt The server has accepted the connection but did not return
5317 a complete response in time, or it closed its connexion
5318 unexpectedly after Tt-(Tq+Tw+Tc) ms. Check the session
5319 termination flags, then check the "timeout server" setting.
5320
5321
53222.6.5) Session state at disconnection
5323-------------------------------------
5324
5325TCP and HTTP logs provide a session termination indicator in the
5326"termination_state" field, just before the number of active connections. It is
53272-characters long in TCP mode, and is extended to 4 characters in HTTP mode,
5328each of which has a special meaning :
5329
5330 - On the first character, a code reporting the first event which caused the
5331 session to terminate :
5332
5333 C : the TCP session was unexpectedly aborted by the client.
5334
5335 S : the TCP session was unexpectedly aborted by the server, or the
5336 server explicitly refused it.
5337
5338 P : the session was prematurely aborted by the proxy, because of a
5339 connection limit enforcement, because a DENY filter was matched,
5340 because of a security check which detected and blocked a dangerous
5341 error in server response which might have caused information leak
5342 (eg: cacheable cookie), or because the response was processed by
5343 the proxy (redirect, stats, etc...).
5344
5345 R : a resource on the proxy has been exhausted (memory, sockets, source
5346 ports, ...). Usually, this appears during the connection phase, and
5347 system logs should contain a copy of the precise error. If this
5348 happens, it must be considered as a very serious anomaly which
5349 should be fixed as soon as possible by any means.
5350
5351 I : an internal error was identified by the proxy during a self-check.
5352 This should NEVER happen, and you are encouraged to report any log
5353 containing this, because this would almost certainly be a bug. It
5354 would be wise to preventively restart the process after such an
5355 event too, in case it would be caused by memory corruption.
5356
5357 c : the client-side timeout expired while waiting for the client to
5358 send or receive data.
5359
5360 s : the server-side timeout expired while waiting for the server to
5361 send or receive data.
5362
5363 - : normal session completion, both the client and the server closed
5364 with nothing left in the buffers.
5365
5366 - on the second character, the TCP or HTTP session state when it was closed :
5367
5368 R : th proxy was waiting for a complete, valid REQUEST from the client
5369 (HTTP mode only). Nothing was sent to any server.
5370
5371 Q : the proxy was waiting in the QUEUE for a connection slot. This can
5372 only happen when servers have a 'maxconn' parameter set. It can
5373 also happen in the global queue after a redispatch consecutive to
5374 a failed attempt to connect to a dying server. If no redispatch is
5375 reported, then no connection attempt was made to any server.
5376
5377 C : the proxy was waiting for the CONNECTION to establish on the
5378 server. The server might at most have noticed a connection attempt.
5379
5380 H : the proxy was waiting for complete, valid response HEADERS from the
5381 server (HTTP only).
5382
5383 D : the session was in the DATA phase.
5384
5385 L : the proxy was still transmitting LAST data to the client while the
5386 server had already finished. This one is very rare as it can only
5387 happen when the client dies while receiving the last packets.
5388
5389 T : the request was tarpitted. It has been held open with the client
5390 during the whole "timeout tarpit" duration or until the client
5391 closed, both of which will be reported in the "Tw" timer.
5392
5393 - : normal session completion after end of data transfer.
5394
5395 - the third character tells whether the persistence cookie was provided by
5396 the client (only in HTTP mode) :
5397
5398 N : the client provided NO cookie. This is usually the case for new
5399 visitors, so counting the number of occurrences of this flag in the
5400 logs generally indicate a valid trend for the site frequentation.
5401
5402 I : the client provided an INVALID cookie matching no known server.
5403 This might be caused by a recent configuration change, mixed
5404 cookies between HTTP/HTTPS sites, or an attack.
5405
5406 D : the client provided a cookie designating a server which was DOWN,
5407 so either "option persist" was used and the client was sent to
5408 this server, or it was not set and the client was redispatched to
5409 another server.
5410
5411 V : the client provided a valid cookie, and was sent to the associated
5412 server.
5413
5414 - : does not apply (no cookie set in configuration).
5415
5416 - the last character reports what operations were performed on the persistence
5417 cookie returned by the server (only in HTTP mode) :
5418
5419 N : NO cookie was provided by the server, and none was inserted either.
5420
5421 I : no cookie was provided by the server, and the proxy INSERTED one.
5422 Note that in "cookie insert" mode, if the server provides a cookie,
5423 it will still be overwritten and reported as "I" here.
5424
5425 P : a cookie was PROVIDED by the server and transmitted as-is.
5426
5427 R : the cookie provided by the server was REWRITTEN by the proxy, which
5428 happens in "cookie rewrite" or "cookie prefix" modes.
5429
5430 D : the cookie provided by the server was DELETED by the proxy.
5431
5432 - : does not apply (no cookie set in configuration).
5433
5434The combination of the two first flags give a lot of information about what was
5435happening when the session terminated, and why it did terminate. It can be
5436helpful to detect server saturation, network troubles, local system resource
5437starvation, attacks, etc...
5438
5439The most common termination flags combinations are indicated below. They are
5440alphabetically sorted, with the lowercase set just after the upper case for
5441easier finding and understanding.
5442
5443 Flags Reason
5444
5445 -- Normal termination.
5446
5447 CC The client aborted before the connection could be established to the
5448 server. This can happen when haproxy tries to connect to a recently
5449 dead (or unchecked) server, and the client aborts while haproxy is
5450 waiting for the server to respond or for "timeout connect" to expire.
5451
5452 CD The client unexpectedly aborted during data transfer. This can be
5453 caused by a browser crash, by an intermediate equipment between the
5454 client and haproxy which decided to actively break the connection,
5455 by network routing issues between the client and haproxy, or by a
5456 keep-alive session between the server and the client terminated first
5457 by the client.
5458
5459 cD The client did not send nor acknowledge any data for as long as the
5460 "timeout client" delay. This is often caused by network failures on
5461 the client side, or the client simply leaving the net uncleanly.
5462
5463 CH The client aborted while waiting for the server to start responding.
5464 It might be the server taking too long to respond or the client
5465 clicking the 'Stop' button too fast.
5466
5467 cH The "timeout client" stroke while waiting for client data during a
5468 POST request. This is sometimes caused by too large TCP MSS values
5469 for PPPoE networks which cannot transport full-sized packets. It can
5470 also happen when client timeout is smaller than server timeout and
5471 the server takes too long to respond.
5472
5473 CQ The client aborted while its session was queued, waiting for a server
5474 with enough empty slots to accept it. It might be that either all the
5475 servers were saturated or that the assigned server was taking too
5476 long a time to respond.
5477
5478 CR The client aborted before sending a full HTTP request. Most likely
5479 the request was typed by hand using a telnet client, and aborted
5480 too early. The HTTP status code is likely a 400 here. Sometimes this
5481 might also be caused by an IDS killing the connection between haproxy
5482 and the client.
5483
5484 cR The "timeout http-request" stroke before the client sent a full HTTP
5485 request. This is sometimes caused by too large TCP MSS values on the
5486 client side for PPPoE networks which cannot transport full-sized
5487 packets, or by clients sending requests by hand and not typing fast
5488 enough, or forgetting to enter the empty line at the end of the
5489 request. The HTTP status code is likely a 408 here.
5490
5491 CT The client aborted while its session was tarpitted. It is important to
5492 check if this happens on valid requests, in order to be sure that no
5493 wrong tarpit rules have been written. If a lot of them happen, it might
5494 make sense to lower the "timeout tarpit" value to something closer to
5495 the average reported "Tw" timer, in order not to consume resources for
5496 just a few attackers.
5497
5498 SC The server or an equipement between it and haproxy explicitly refused
5499 the TCP connection (the proxy received a TCP RST or an ICMP message
5500 in return). Under some circumstances, it can also be the network
5501 stack telling the proxy that the server is unreachable (eg: no route,
5502 or no ARP response on local network). When this happens in HTTP mode,
5503 the status code is likely a 502 or 503 here.
5504
5505 sC The "timeout connect" stroke before a connection to the server could
5506 complete. When this happens in HTTP mode, the status code is likely a
5507 503 or 504 here.
5508
5509 SD The connection to the server died with an error during the data
5510 transfer. This usually means that haproxy has received an RST from
5511 the server or an ICMP message from an intermediate equipment while
5512 exchanging data with the server. This can be caused by a server crash
5513 or by a network issue on an intermediate equipment.
5514
5515 sD The server did not send nor acknowledge any data for as long as the
5516 "timeout server" setting during the data phase. This is often caused
5517 by too short timeouts on L4 equipements before the server (firewalls,
5518 load-balancers, ...), as well as keep-alive sessions maintained
5519 between the client and the server expiring first on haproxy.
5520
5521 SH The server aborted before sending its full HTTP response headers, or
5522 it crashed while processing the request. Since a server aborting at
5523 this moment is very rare, it would be wise to inspect its logs to
5524 control whether it crashed and why. The logged request may indicate a
5525 small set of faulty requests, demonstrating bugs in the application.
5526 Sometimes this might also be caused by an IDS killing the connection
5527 between haproxy and the server.
5528
5529 sH The "timeout server" stroke before the server could return its
5530 response headers. This is the most common anomaly, indicating too
5531 long transactions, probably caused by server or database saturation.
5532 The immediate workaround consists in increasing the "timeout server"
5533 setting, but it is important to keep in mind that the user experience
5534 will suffer from these long response times. The only long term
5535 solution is to fix the application.
5536
5537 sQ The session spent too much time in queue and has been expired. See
5538 the "timeout queue" and "timeout connect" settings to find out how to
5539 fix this if it happens too often. If it often happens massively in
5540 short periods, it may indicate general problems on the affected
5541 servers due to I/O or database congestion, or saturation caused by
5542 external attacks.
5543
5544 PC The proxy refused to establish a connection to the server because the
5545 process' socket limit has been reached while attempting to connect.
5546 The global "maxconn" parameter may be increased in the configuration
5547 so that it does not happen anymore. This status is very rare and
5548 might happen when the global "ulimit-n" parameter is forced by hand.
5549
5550 PH The proxy blocked the server's response, because it was invalid,
5551 incomplete, dangerous (cache control), or matched a security filter.
5552 In any case, an HTTP 502 error is sent to the client. One possible
5553 cause for this error is an invalid syntax in an HTTP header name
5554 containing unauthorized characters.
5555
5556 PR The proxy blocked the client's HTTP request, either because of an
5557 invalid HTTP syntax, in which case it returned an HTTP 400 error to
5558 the client, or because a deny filter matched, in which case it
5559 returned an HTTP 403 error.
5560
5561 PT The proxy blocked the client's request and has tarpitted its
5562 connection before returning it a 500 server error. Nothing was sent
5563 to the server. The connection was maintained open for as long as
5564 reported by the "Tw" timer field.
5565
5566 RC A local resource has been exhausted (memory, sockets, source ports)
5567 preventing the connection to the server from establishing. The error
5568 logs will tell precisely what was missing. This is very rare and can
5569 only be solved by proper system tuning.
5570
5571
55722.6.6) Non-printable characters
5573-------------------------------
5574
5575In order not to cause trouble to log analysis tools or terminals during log
5576consulting, non-printable characters are not sent as-is into log files, but are
5577converted to the two-digits hexadecimal representation of their ASCII code,
5578prefixed by the character '#'. The only characters that can be logged without
5579being escaped are comprised between 32 and 126 (inclusive). Obviously, the
5580escape character '#' itself is also encoded to avoid any ambiguity ("#23"). It
5581is the same for the character '"' which becomes "#22", as well as '{', '|' and
5582'}' when logging headers.
5583
5584Note that the space character (' ') is not encoded in headers, which can cause
5585issues for tools relying on space count to locate fields. A typical header
5586containing spaces is "User-Agent".
5587
5588Last, it has been observed that some syslog daemons such as syslog-ng escape
5589the quote ('"') with a backslash ('\'). The reverse operation can safely be
5590performed since no quote may appear anywhere else in the logs.
5591
5592
55932.6.7) Capturing HTTP cookies
5594-----------------------------
5595
5596Cookie capture simplifies the tracking a complete user session. This can be
5597achieved using the "capture cookie" statement in the frontend. Please refer to
5598section 2.2 for more details. Only one cookie can be captured, and the same
5599cookie will simultaneously be checked in the request ("Cookie:" header) and in
5600the response ("Set-Cookie:" header). The respective values will be reported in
5601the HTTP logs at the "captured_request_cookie" and "captured_response_cookie"
5602locations (see section 2.6.2.3 about HTTP log format). When either cookie is
5603not seen, a dash ('-') replaces the value. This way, it's easy to detect when a
5604user switches to a new session for example, because the server will reassign it
5605a new cookie. It is also possible to detect if a server unexpectedly sets a
5606wrong cookie to a client, leading to session crossing.
5607
5608 Examples :
5609 # capture the first cookie whose name starts with "ASPSESSION"
5610 capture cookie ASPSESSION len 32
5611
5612 # capture the first cookie whose name is exactly "vgnvisitor"
5613 capture cookie vgnvisitor= len 32
5614
5615
56162.6.8) Capturing HTTP headers
5617-----------------------------
5618
5619Header captures are useful to track unique request identifiers set by an upper
5620proxy, virtual host names, user-agents, POST content-length, referrers, etc. In
5621the response, one can search for information about the response length, how the
5622server asked the cache to behave, or an object location during a redirection.
5623
5624Header captures are performed using the "capture request header" and "capture
5625response header" statements in the frontend. Please consult their definition in
5626section 2.2 for more details.
5627
5628It is possible to include both request headers and response headers at the same
5629time. Non-existant headers are logged as empty strings, and if one header
5630appears more than once, only its last occurence will be logged. Request headers
5631are grouped within braces '{' and '}' in the same order as they were declared,
5632and delimited with a vertical bar '|' without any space. Response headers
5633follow the same representation, but are displayed after a space following the
5634request headers block. These blocks are displayed just before the HTTP request
5635in the logs.
5636
5637 Example :
5638 # This instance chains to the outgoing proxy
5639 listen proxy-out
5640 mode http
5641 option httplog
5642 option logasap
5643 log global
5644 server cache1 192.168.1.1:3128
5645
5646 # log the name of the virtual server
5647 capture request header Host len 20
5648
5649 # log the amount of data uploaded during a POST
5650 capture request header Content-Length len 10
5651
5652 # log the beginning of the referrer
5653 capture request header Referer len 20
5654
5655 # server name (useful for outgoing proxies only)
5656 capture response header Server len 20
5657
5658 # logging the content-length is useful with "option logasap"
5659 capture response header Content-Length len 10
5660
5661 # log the expected cache behaviour on the response
5662 capture response header Cache-Control len 8
5663
5664 # the Via header will report the next proxy's name
5665 capture response header Via len 20
5666
5667 # log the URL location during a redirection
5668 capture response header Location len 20
5669
5670 >>> Aug 9 20:26:09 localhost \
5671 haproxy[2022]: 127.0.0.1:34014 [09/Aug/2004:20:26:09] proxy-out \
5672 proxy-out/cache1 0/0/0/162/+162 200 +350 - - ---- 0/0/0/0/0 0/0 \
5673 {fr.adserver.yahoo.co||http://fr.f416.mail.} {|864|private||} \
5674 "GET http://fr.adserver.yahoo.com/"
5675
5676 >>> Aug 9 20:30:46 localhost \
5677 haproxy[2022]: 127.0.0.1:34020 [09/Aug/2004:20:30:46] proxy-out \
5678 proxy-out/cache1 0/0/0/182/+182 200 +279 - - ---- 0/0/0/0/0 0/0 \
5679 {w.ods.org||} {Formilux/0.1.8|3495|||} \
5680 "GET http://trafic.1wt.eu/ HTTP/1.1"
5681
5682 >>> Aug 9 20:30:46 localhost \
5683 haproxy[2022]: 127.0.0.1:34028 [09/Aug/2004:20:30:46] proxy-out \
5684 proxy-out/cache1 0/0/2/126/+128 301 +223 - - ---- 0/0/0/0/0 0/0 \
5685 {www.sytadin.equipement.gouv.fr||http://trafic.1wt.eu/} \
5686 {Apache|230|||http://www.sytadin.} \
5687 "GET http://www.sytadin.equipement.gouv.fr/ HTTP/1.1"
5688
5689
56902.6.9) Examples of logs
5691-----------------------
5692
5693These are real-world examples of logs accompanied with an explanation. Some of
5694them have been made up by hand. The syslog part has been removed for better
5695reading. Their sole purpose is to explain how to decipher them.
5696
5697 >>> haproxy[674]: 127.0.0.1:33318 [15/Oct/2003:08:31:57.130] px-http \
5698 px-http/srv1 6559/0/7/147/6723 200 243 - - ---- 5/3/3/1/0 0/0 \
5699 "HEAD / HTTP/1.0"
5700
5701 => long request (6.5s) entered by hand through 'telnet'. The server replied
5702 in 147 ms, and the session ended normally ('----')
5703
5704 >>> haproxy[674]: 127.0.0.1:33319 [15/Oct/2003:08:31:57.149] px-http \
5705 px-http/srv1 6559/1230/7/147/6870 200 243 - - ---- 324/239/239/99/0 \
5706 0/9 "HEAD / HTTP/1.0"
5707
5708 => Idem, but the request was queued in the global queue behind 9 other
5709 requests, and waited there for 1230 ms.
5710
5711 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.654] px-http \
5712 px-http/srv1 9/0/7/14/+30 200 +243 - - ---- 3/3/3/1/0 0/0 \
5713 "GET /image.iso HTTP/1.0"
5714
5715 => request for a long data transfer. The "logasap" option was specified, so
5716 the log was produced just before transfering data. The server replied in
5717 14 ms, 243 bytes of headers were sent to the client, and total time from
5718 accept to first data byte is 30 ms.
5719
5720 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.925] px-http \
5721 px-http/srv1 9/0/7/14/30 502 243 - - PH-- 3/2/2/0/0 0/0 \
5722 "GET /cgi-bin/bug.cgi? HTTP/1.0"
5723
5724 => the proxy blocked a server response either because of an "rspdeny" or
5725 "rspideny" filter, or because the response was improperly formatted and
5726 not HTTP-compliant, or because it blocked sensible information which
5727 risked being cached. In this case, the response is replaced with a "502
5728 bad gateway". The flags ("PH--") tell us that it was haproxy who decided
5729 to return the 502 and not the server.
5730
5731 >>> haproxy[18113]: 127.0.0.1:34548 [15/Oct/2003:15:18:55.798] px-http \
5732 px-http/<NOSRV> -1/-1/-1/-1/8490 -1 0 - - CR-- 2/2/2/0/0 0/0 ""
5733
5734 => the client never completed its request and aborted itself ("C---") after
5735 8.5s, while the proxy was waiting for the request headers ("-R--").
5736 Nothing was sent to any server.
5737
5738 >>> haproxy[18113]: 127.0.0.1:34549 [15/Oct/2003:15:19:06.103] px-http \
5739 px-http/<NOSRV> -1/-1/-1/-1/50001 408 0 - - cR-- 2/2/2/0/0 0/0 ""
5740
5741 => The client never completed its request, which was aborted by the
5742 time-out ("c---") after 50s, while the proxy was waiting for the request
5743 headers ("-R--"). Nothing was sent to any server, but the proxy could
5744 send a 408 return code to the client.
5745
5746 >>> haproxy[18989]: 127.0.0.1:34550 [15/Oct/2003:15:24:28.312] px-tcp \
5747 px-tcp/srv1 0/0/5007 0 cD 0/0/0/0/0 0/0
5748
5749 => This log was produced with "option tcplog". The client timed out after
5750 5 seconds ("c----").
5751
5752 >>> haproxy[18989]: 10.0.0.1:34552 [15/Oct/2003:15:26:31.462] px-http \
5753 px-http/srv1 3183/-1/-1/-1/11215 503 0 - - SC-- 205/202/202/115/3 \
5754 0/0 "HEAD / HTTP/1.0"
5755
5756 => The request took 3s to complete (probably a network problem), and the
5757 connection to the server failed ('SC--') after 4 attemps of 2 seconds
5758 (config says 'retries 3'), and no redispatch (otherwise we would have
5759 seen "/+3"). Status code 503 was returned to the client. There were 115
5760 connections on this server, 202 connections on this proxy, and 205 on
5761 the global process. It is possible that the server refused the
5762 connection because of too many already established.
Willy Tarreau844e3c52008-01-11 16:28:18 +01005763
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +01005764
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +010057652.7) CSV format
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +01005766---------------
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01005767
5768 0. pxname: proxy name
5769 1. svname: service name (FRONTEND for frontend, BACKEND for backend, any name
5770 for server)
5771 2. qcur: current queued requests
5772 3. qmax: max queued requests
5773 4. scur: current sessions
5774 5. smax: max sessions
5775 6. slim: sessions limit
5776 7. stot: total sessions
5777 8. bin: bytes in
5778 9. bout: bytes out
5779 10. dreq: denied requests
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +01005780 11. dresp: denied responses
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01005781 12. ereq: request errors
5782 13. econ: connection errors
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +01005783 14. eresp: response errors
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01005784 15. wretr: retries (warning)
5785 16. wredis: redispatches (warning)
5786 17. status: status (UP/DOWN/...)
5787 18. weight: server weight (server), total weight (backend)
5788 19. act: server is active (server), number of active servers (backend)
5789 20. bck: server is backup (server), number of backup servers (backend)
5790 21. chkfail: number of failed checks
5791 22. chkdown: number of UP->DOWN transitions
5792 23. lastchg: last status change (in seconds)
5793 24. downtime: total downtime (in seconds)
5794 25. qlimit: queue limit
5795 26. pid: process id (0 for first instance, 1 for second, ...)
5796 27. iid: unique proxy id
5797 28. sid: service id (unique inside a proxy)
5798 29. throttle: warm up status
5799 30. lbtot: total number of times a server was selected
5800 31. tracked: id of proxy/server if tracking is enabled
5801 32. type (0=frontend, 1=backend, 2=server)
Willy Tarreau844e3c52008-01-11 16:28:18 +01005802
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +01005803
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +010058042.8) Unix Socket commands
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +01005805-------------------------
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +01005806
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +01005807The following commands are supported on the UNIX stats socket ; all of them
5808must be terminated by a line feed. It is important to understand that when
5809multiple haproxy processes are started on the same sockets, any process may
5810pick up the request and will output its own stats.
5811
5812show stat [<iid> <type> <sid>]
5813 Dump statistics in the CSV format. By passing <id>, <type> and <sid>, it is
5814 possible to dump only selected items :
5815 - <iid> is a proxy ID, -1 to dump everything
5816 - <type> selects the type of dumpable objects : 1 for frontends, 2 for
5817 backends, 4 for servers, -1 for everything. These values can be ORed,
5818 for example:
5819 1 + 2 = 3 -> frontend + backend.
5820 1 + 2 + 4 = 7 -> frontend + backend + server.
5821 - <sid> is a server ID, -1 to dump everything from the selected proxy.
5822
5823show info
5824 Dump info about haproxy status on current process.
5825
5826show sess
5827 Dump all known sessions. Avoid doing this on slow connections as this can
5828 be huge.
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +01005829
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +01005830
Willy Tarreau0ba27502007-12-24 16:55:16 +01005831/*
5832 * Local variables:
5833 * fill-column: 79
5834 * End:
5835 */