blob: 18ceefdf935abda6aff990f42337ed5dc8f396d2 [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.
Willy Tarreauf49d1df2009-03-01 08:35:41 +0100254 This value is limited to 100 by default in single process mode. However, in
Willy Tarreaua0250ba2008-01-06 11:22:57 +0100255 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
Willy Tarreauf49d1df2009-03-01 08:35:41 +0100257 part of them to other processes. Setting this value to -1 completely disables
Willy Tarreaua0250ba2008-01-06 11:22:57 +0100258 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
Willy Tarreau59140a22009-02-22 12:02:30 +01001375 error pages, and to use absolute paths, since files are read
1376 before any chroot is performed.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001377
1378 It is important to understand that this keyword is not meant to rewrite
1379 errors returned by the server, but errors detected and returned by HAProxy.
1380 This is why the list of supported errors is limited to a small set.
1381
1382 The files are returned verbatim on the TCP socket. This allows any trick such
1383 as redirections to another URL or site, as well as tricks to clean cookies,
1384 force enable or disable caching, etc... The package provides default error
1385 files returning the same contents as default errors.
1386
Willy Tarreau59140a22009-02-22 12:02:30 +01001387 The files should not exceed the configured buffer size (BUFSIZE), which
1388 generally is 8 or 16 kB, otherwise they will be truncated. It is also wise
1389 not to put any reference to local contents (eg: images) in order to avoid
1390 loops between the client and HAProxy when all servers are down, causing an
1391 error to be returned instead of an image. For better HTTP compliance, it is
1392 recommended that all header lines end with CR-LF and not LF alone.
1393
Willy Tarreau0ba27502007-12-24 16:55:16 +01001394 The files are read at the same time as the configuration and kept in memory.
1395 For this reason, the errors continue to be returned even when the process is
1396 chrooted, and no file change is considered while the process is running. A
Willy Tarreauc27debf2008-01-06 08:57:02 +01001397 simple method for developing those files consists in associating them to the
Willy Tarreau0ba27502007-12-24 16:55:16 +01001398 403 status code and interrogating a blocked URL.
1399
1400 See also : "errorloc", "errorloc302", "errorloc303"
1401
Willy Tarreau59140a22009-02-22 12:02:30 +01001402 Example :
1403 errorfile 400 /etc/haproxy/errorfiles/400badreq.http
1404 errorfile 403 /etc/haproxy/errorfiles/403forbid.http
1405 errorfile 503 /etc/haproxy/errorfiles/503sorry.http
1406
Willy Tarreau2769aa02007-12-27 18:26:09 +01001407
1408errorloc <code> <url>
1409errorloc302 <code> <url>
1410 Return an HTTP redirection to a URL instead of errors generated by HAProxy
1411 May be used in sections : defaults | frontend | listen | backend
1412 yes | yes | yes | yes
1413 Arguments :
1414 <code> is the HTTP status code. Currently, HAProxy is capable of
1415 generating codes 400, 403, 408, 500, 502, 503, and 504.
1416
1417 <url> it is the exact contents of the "Location" header. It may contain
1418 either a relative URI to an error page hosted on the same site,
1419 or an absolute URI designating an error page on another site.
1420 Special care should be given to relative URIs to avoid redirect
1421 loops if the URI itself may generate the same error (eg: 500).
1422
1423 It is important to understand that this keyword is not meant to rewrite
1424 errors returned by the server, but errors detected and returned by HAProxy.
1425 This is why the list of supported errors is limited to a small set.
1426
1427 Note that both keyword return the HTTP 302 status code, which tells the
1428 client to fetch the designated URL using the same HTTP method. This can be
1429 quite problematic in case of non-GET methods such as POST, because the URL
1430 sent to the client might not be allowed for something other than GET. To
1431 workaround this problem, please use "errorloc303" which send the HTTP 303
1432 status code, indicating to the client that the URL must be fetched with a GET
1433 request.
1434
1435 See also : "errorfile", "errorloc303"
1436
1437
1438errorloc303 <code> <url>
1439 Return an HTTP redirection to a URL instead of errors generated by HAProxy
1440 May be used in sections : defaults | frontend | listen | backend
1441 yes | yes | yes | yes
1442 Arguments :
1443 <code> is the HTTP status code. Currently, HAProxy is capable of
1444 generating codes 400, 403, 408, 500, 502, 503, and 504.
1445
1446 <url> it is the exact contents of the "Location" header. It may contain
1447 either a relative URI to an error page hosted on the same site,
1448 or an absolute URI designating an error page on another site.
1449 Special care should be given to relative URIs to avoid redirect
1450 loops if the URI itself may generate the same error (eg: 500).
1451
1452 It is important to understand that this keyword is not meant to rewrite
1453 errors returned by the server, but errors detected and returned by HAProxy.
1454 This is why the list of supported errors is limited to a small set.
1455
1456 Note that both keyword return the HTTP 303 status code, which tells the
1457 client to fetch the designated URL using the same HTTP GET method. This
1458 solves the usual problems associated with "errorloc" and the 302 code. It is
1459 possible that some very old browsers designed before HTTP/1.1 do not support
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001460 it, but no such problem has been reported till now.
Willy Tarreau2769aa02007-12-27 18:26:09 +01001461
1462 See also : "errorfile", "errorloc", "errorloc302"
1463
1464
1465fullconn <conns>
1466 Specify at what backend load the servers will reach their maxconn
1467 May be used in sections : defaults | frontend | listen | backend
1468 yes | no | yes | yes
1469 Arguments :
1470 <conns> is the number of connections on the backend which will make the
1471 servers use the maximal number of connections.
1472
Willy Tarreau198a7442008-01-17 12:05:32 +01001473 When a server has a "maxconn" parameter specified, it means that its number
Willy Tarreau2769aa02007-12-27 18:26:09 +01001474 of concurrent connections will never go higher. Additionally, if it has a
Willy Tarreau198a7442008-01-17 12:05:32 +01001475 "minconn" parameter, it indicates a dynamic limit following the backend's
Willy Tarreau2769aa02007-12-27 18:26:09 +01001476 load. The server will then always accept at least <minconn> connections,
1477 never more than <maxconn>, and the limit will be on the ramp between both
1478 values when the backend has less than <conns> concurrent connections. This
1479 makes it possible to limit the load on the servers during normal loads, but
1480 push it further for important loads without overloading the servers during
1481 exceptionnal loads.
1482
1483 Example :
1484 # The servers will accept between 100 and 1000 concurrent connections each
1485 # and the maximum of 1000 will be reached when the backend reaches 10000
1486 # connections.
1487 backend dynamic
1488 fullconn 10000
1489 server srv1 dyn1:80 minconn 100 maxconn 1000
1490 server srv2 dyn2:80 minconn 100 maxconn 1000
1491
1492 See also : "maxconn", "server"
1493
1494
1495grace <time>
1496 Maintain a proxy operational for some time after a soft stop
1497 May be used in sections : defaults | frontend | listen | backend
1498 no | yes | yes | yes
1499 Arguments :
1500 <time> is the time (by default in milliseconds) for which the instance
1501 will remain operational with the frontend sockets still listening
1502 when a soft-stop is received via the SIGUSR1 signal.
1503
1504 This may be used to ensure that the services disappear in a certain order.
1505 This was designed so that frontends which are dedicated to monitoring by an
1506 external equipement fail immediately while other ones remain up for the time
1507 needed by the equipment to detect the failure.
1508
1509 Note that currently, there is very little benefit in using this parameter,
1510 and it may in fact complicate the soft-reconfiguration process more than
1511 simplify it.
1512
Willy Tarreau0ba27502007-12-24 16:55:16 +01001513
1514http-check disable-on-404
1515 Enable a maintenance mode upon HTTP/404 response to health-checks
1516 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau2769aa02007-12-27 18:26:09 +01001517 yes | no | yes | yes
Willy Tarreau0ba27502007-12-24 16:55:16 +01001518 Arguments : none
1519
1520 When this option is set, a server which returns an HTTP code 404 will be
1521 excluded from further load-balancing, but will still receive persistent
1522 connections. This provides a very convenient method for Web administrators
1523 to perform a graceful shutdown of their servers. It is also important to note
1524 that a server which is detected as failed while it was in this mode will not
1525 generate an alert, just a notice. If the server responds 2xx or 3xx again, it
1526 will immediately be reinserted into the farm. The status on the stats page
1527 reports "NOLB" for a server in this mode. It is important to note that this
1528 option only works in conjunction with the "httpchk" option.
1529
Willy Tarreau2769aa02007-12-27 18:26:09 +01001530 See also : "option httpchk"
1531
1532
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01001533id <value>
1534 Set a persistent value for proxy ID. Must be unique and larger than 1000, as
1535 smaller values are reserved for auto-assigned ids.
1536
1537
Willy Tarreau2769aa02007-12-27 18:26:09 +01001538log global
1539log <address> <facility> [<level>]
1540 Enable per-instance logging of events and traffic.
1541 May be used in sections : defaults | frontend | listen | backend
1542 yes | yes | yes | yes
1543 Arguments :
1544 global should be used when the instance's logging parameters are the
1545 same as the global ones. This is the most common usage. "global"
1546 replaces <address>, <facility> and <level> with those of the log
1547 entries found in the "global" section. Only one "log global"
1548 statement may be used per instance, and this form takes no other
1549 parameter.
1550
1551 <address> indicates where to send the logs. It takes the same format as
1552 for the "global" section's logs, and can be one of :
1553
1554 - An IPv4 address optionally followed by a colon (':') and a UDP
1555 port. If no port is specified, 514 is used by default (the
1556 standard syslog port).
1557
1558 - A filesystem path to a UNIX domain socket, keeping in mind
1559 considerations for chroot (be sure the path is accessible
1560 inside the chroot) and uid/gid (be sure the path is
1561 appropriately writeable).
1562
1563 <facility> must be one of the 24 standard syslog facilities :
1564
1565 kern user mail daemon auth syslog lpr news
1566 uucp cron auth2 ftp ntp audit alert cron2
1567 local0 local1 local2 local3 local4 local5 local6 local7
1568
1569 <level> is optional and can be specified to filter outgoing messages. By
1570 default, all messages are sent. If a level is specified, only
1571 messages with a severity at least as important as this level
1572 will be sent. 8 levels are known :
1573
1574 emerg alert crit err warning notice info debug
1575
1576 Note that up to two "log" entries may be specified per instance. However, if
1577 "log global" is used and if the "global" section already contains 2 log
1578 entries, then additional log entries will be ignored.
1579
1580 Also, it is important to keep in mind that it is the frontend which decides
Willy Tarreaucc6c8912009-02-22 10:53:55 +01001581 what to log from a connection, and that in case of content switching, the log
1582 entries from the backend will be ignored. Connections are logged at level
1583 "info".
1584
1585 However, backend log declaration define how and where servers status changes
1586 will be logged. Level "notice" will be used to indicate a server going up,
1587 "warning" will be used for termination signals and definitive service
1588 termination, and "alert" will be used for when a server goes down.
1589
1590 Note : According to RFC3164, messages are truncated to 1024 bytes before
1591 being emitted.
Willy Tarreau2769aa02007-12-27 18:26:09 +01001592
1593 Example :
1594 log global
1595 log 127.0.0.1:514 local0 notice
1596
1597
1598maxconn <conns>
1599 Fix the maximum number of concurrent connections on a frontend
1600 May be used in sections : defaults | frontend | listen | backend
1601 yes | yes | yes | no
1602 Arguments :
1603 <conns> is the maximum number of concurrent connections the frontend will
1604 accept to serve. Excess connections will be queued by the system
1605 in the socket's listen queue and will be served once a connection
1606 closes.
1607
1608 If the system supports it, it can be useful on big sites to raise this limit
1609 very high so that haproxy manages connection queues, instead of leaving the
1610 clients with unanswered connection attempts. This value should not exceed the
1611 global maxconn. Also, keep in mind that a connection contains two buffers
1612 of 8kB each, as well as some other data resulting in about 17 kB of RAM being
1613 consumed per established connection. That means that a medium system equipped
1614 with 1GB of RAM can withstand around 40000-50000 concurrent connections if
1615 properly tuned.
1616
1617 Also, when <conns> is set to large values, it is possible that the servers
1618 are not sized to accept such loads, and for this reason it is generally wise
1619 to assign them some reasonable connection limits.
1620
1621 See also : "server", global section's "maxconn", "fullconn"
1622
1623
1624mode { tcp|http|health }
1625 Set the running mode or protocol of the instance
1626 May be used in sections : defaults | frontend | listen | backend
1627 yes | yes | yes | yes
1628 Arguments :
1629 tcp The instance will work in pure TCP mode. A full-duplex connection
1630 will be established between clients and servers, and no layer 7
1631 examination will be performed. This is the default mode. It
1632 should be used for SSL, SSH, SMTP, ...
1633
1634 http The instance will work in HTTP mode. The client request will be
1635 analyzed in depth before connecting to any server. Any request
1636 which is not RFC-compliant will be rejected. Layer 7 filtering,
1637 processing and switching will be possible. This is the mode which
1638 brings HAProxy most of its value.
1639
1640 health The instance will work in "health" mode. It will just reply "OK"
1641 to incoming connections and close the connection. Nothing will be
1642 logged. This mode is used to reply to external components health
1643 checks. This mode is deprecated and should not be used anymore as
1644 it is possible to do the same and even better by combining TCP or
1645 HTTP modes with the "monitor" keyword.
1646
1647 When doing content switching, it is mandatory that the frontend and the
1648 backend are in the same mode (generally HTTP), otherwise the configuration
1649 will be refused.
1650
1651 Example :
1652 defaults http_instances
1653 mode http
1654
1655 See also : "monitor", "monitor-net"
1656
Willy Tarreau0ba27502007-12-24 16:55:16 +01001657
1658monitor fail [if | unless] <condition>
Willy Tarreau2769aa02007-12-27 18:26:09 +01001659 Add a condition to report a failure to a monitor HTTP request.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001660 May be used in sections : defaults | frontend | listen | backend
1661 no | yes | yes | no
Willy Tarreau0ba27502007-12-24 16:55:16 +01001662 Arguments :
1663 if <cond> the monitor request will fail if the condition is satisfied,
1664 and will succeed otherwise. The condition should describe a
1665 combinated test which must induce a failure if all conditions
1666 are met, for instance a low number of servers both in a
1667 backend and its backup.
1668
1669 unless <cond> the monitor request will succeed only if the condition is
1670 satisfied, and will fail otherwise. Such a condition may be
1671 based on a test on the presence of a minimum number of active
1672 servers in a list of backends.
1673
1674 This statement adds a condition which can force the response to a monitor
1675 request to report a failure. By default, when an external component queries
1676 the URI dedicated to monitoring, a 200 response is returned. When one of the
1677 conditions above is met, haproxy will return 503 instead of 200. This is
1678 very useful to report a site failure to an external component which may base
1679 routing advertisements between multiple sites on the availability reported by
1680 haproxy. In this case, one would rely on an ACL involving the "nbsrv"
Willy Tarreau2769aa02007-12-27 18:26:09 +01001681 criterion. Note that "monitor fail" only works in HTTP mode.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001682
1683 Example:
1684 frontend www
Willy Tarreau2769aa02007-12-27 18:26:09 +01001685 mode http
Willy Tarreau0ba27502007-12-24 16:55:16 +01001686 acl site_dead nbsrv(dynamic) lt 2
1687 acl site_dead nbsrv(static) lt 2
1688 monitor-uri /site_alive
1689 monitor fail if site_dead
1690
Willy Tarreau2769aa02007-12-27 18:26:09 +01001691 See also : "monitor-net", "monitor-uri"
1692
1693
1694monitor-net <source>
1695 Declare a source network which is limited to monitor requests
1696 May be used in sections : defaults | frontend | listen | backend
1697 yes | yes | yes | no
1698 Arguments :
1699 <source> is the source IPv4 address or network which will only be able to
1700 get monitor responses to any request. It can be either an IPv4
1701 address, a host name, or an address followed by a slash ('/')
1702 followed by a mask.
1703
1704 In TCP mode, any connection coming from a source matching <source> will cause
1705 the connection to be immediately closed without any log. This allows another
1706 equipement to probe the port and verify that it is still listening, without
1707 forwarding the connection to a remote server.
1708
1709 In HTTP mode, a connection coming from a source matching <source> will be
1710 accepted, the following response will be sent without waiting for a request,
1711 then the connection will be closed : "HTTP/1.0 200 OK". This is normally
1712 enough for any front-end HTTP probe to detect that the service is UP and
1713 running without forwarding the request to a backend server.
1714
1715 Monitor requests are processed very early. It is not possible to block nor
1716 divert them using ACLs. They cannot be logged either, and it is the intended
1717 purpose. They are only used to report HAProxy's health to an upper component,
1718 nothing more. Right now, it is not possible to set failure conditions on
1719 requests caught by "monitor-net".
1720
1721 Example :
1722 # addresses .252 and .253 are just probing us.
1723 frontend www
1724 monitor-net 192.168.0.252/31
1725
1726 See also : "monitor fail", "monitor-uri"
1727
1728
1729monitor-uri <uri>
1730 Intercept a URI used by external components' monitor requests
1731 May be used in sections : defaults | frontend | listen | backend
1732 yes | yes | yes | no
1733 Arguments :
1734 <uri> is the exact URI which we want to intercept to return HAProxy's
1735 health status instead of forwarding the request.
1736
1737 When an HTTP request referencing <uri> will be received on a frontend,
1738 HAProxy will not forward it nor log it, but instead will return either
1739 "HTTP/1.0 200 OK" or "HTTP/1.0 503 Service unavailable", depending on failure
1740 conditions defined with "monitor fail". This is normally enough for any
1741 front-end HTTP probe to detect that the service is UP and running without
1742 forwarding the request to a backend server. Note that the HTTP method, the
1743 version and all headers are ignored, but the request must at least be valid
1744 at the HTTP level. This keyword may only be used with an HTTP-mode frontend.
1745
1746 Monitor requests are processed very early. It is not possible to block nor
1747 divert them using ACLs. They cannot be logged either, and it is the intended
1748 purpose. They are only used to report HAProxy's health to an upper component,
1749 nothing more. However, it is possible to add any number of conditions using
1750 "monitor fail" and ACLs so that the result can be adjusted to whatever check
1751 can be imagined (most often the number of available servers in a backend).
1752
1753 Example :
1754 # Use /haproxy_test to report haproxy's status
1755 frontend www
1756 mode http
1757 monitor-uri /haproxy_test
1758
1759 See also : "monitor fail", "monitor-net"
1760
Willy Tarreau0ba27502007-12-24 16:55:16 +01001761
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001762option abortonclose
1763no option abortonclose
1764 Enable or disable early dropping of aborted requests pending in queues.
1765 May be used in sections : defaults | frontend | listen | backend
1766 yes | no | yes | yes
1767 Arguments : none
1768
1769 In presence of very high loads, the servers will take some time to respond.
1770 The per-instance connection queue will inflate, and the response time will
1771 increase respective to the size of the queue times the average per-session
1772 response time. When clients will wait for more than a few seconds, they will
Willy Tarreau198a7442008-01-17 12:05:32 +01001773 often hit the "STOP" button on their browser, leaving a useless request in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001774 the queue, and slowing down other users, and the servers as well, because the
1775 request will eventually be served, then aborted at the first error
1776 encountered while delivering the response.
1777
1778 As there is no way to distinguish between a full STOP and a simple output
1779 close on the client side, HTTP agents should be conservative and consider
1780 that the client might only have closed its output channel while waiting for
1781 the response. However, this introduces risks of congestion when lots of users
1782 do the same, and is completely useless nowadays because probably no client at
1783 all will close the session while waiting for the response. Some HTTP agents
1784 support this behaviour (Squid, Apache, HAProxy), and others do not (TUX, most
1785 hardware-based load balancers). So the probability for a closed input channel
Willy Tarreau198a7442008-01-17 12:05:32 +01001786 to represent a user hitting the "STOP" button is close to 100%, and the risk
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001787 of being the single component to break rare but valid traffic is extremely
1788 low, which adds to the temptation to be able to abort a session early while
1789 still not served and not pollute the servers.
1790
1791 In HAProxy, the user can choose the desired behaviour using the option
1792 "abortonclose". By default (without the option) the behaviour is HTTP
1793 compliant and aborted requests will be served. But when the option is
1794 specified, a session with an incoming channel closed will be aborted while
1795 it is still possible, either pending in the queue for a connection slot, or
1796 during the connection establishment if the server has not yet acknowledged
1797 the connection request. This considerably reduces the queue size and the load
1798 on saturated servers when users are tempted to click on STOP, which in turn
1799 reduces the response time for other users.
1800
1801 If this option has been enabled in a "defaults" section, it can be disabled
1802 in a specific instance by prepending the "no" keyword before it.
1803
1804 See also : "timeout queue" and server's "maxconn" and "maxqueue" parameters
1805
1806
1807option allbackups
1808no option allbackups
1809 Use either all backup servers at a time or only the first one
1810 May be used in sections : defaults | frontend | listen | backend
1811 yes | no | yes | yes
1812 Arguments : none
1813
1814 By default, the first operational backup server gets all traffic when normal
1815 servers are all down. Sometimes, it may be preferred to use multiple backups
1816 at once, because one will not be enough. When "option allbackups" is enabled,
1817 the load balancing will be performed among all backup servers when all normal
1818 ones are unavailable. The same load balancing algorithm will be used and the
1819 servers' weights will be respected. Thus, there will not be any priority
1820 order between the backup servers anymore.
1821
1822 This option is mostly used with static server farms dedicated to return a
1823 "sorry" page when an application is completely offline.
1824
1825 If this option has been enabled in a "defaults" section, it can be disabled
1826 in a specific instance by prepending the "no" keyword before it.
1827
1828
1829option checkcache
1830no option checkcache
1831 Analyze all server responses and block requests with cachable cookies
1832 May be used in sections : defaults | frontend | listen | backend
1833 yes | no | yes | yes
1834 Arguments : none
1835
1836 Some high-level frameworks set application cookies everywhere and do not
1837 always let enough control to the developer to manage how the responses should
1838 be cached. When a session cookie is returned on a cachable object, there is a
1839 high risk of session crossing or stealing between users traversing the same
1840 caches. In some situations, it is better to block the response than to let
1841 some sensible session information go in the wild.
1842
1843 The option "checkcache" enables deep inspection of all server responses for
1844 strict compliance with HTTP specification in terms of cachability. It
Willy Tarreau198a7442008-01-17 12:05:32 +01001845 carefully checks "Cache-control", "Pragma" and "Set-cookie" headers in server
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001846 response to check if there's a risk of caching a cookie on a client-side
1847 proxy. When this option is enabled, the only responses which can be delivered
Willy Tarreau198a7442008-01-17 12:05:32 +01001848 to the client are :
1849 - all those without "Set-Cookie" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001850 - all those with a return code other than 200, 203, 206, 300, 301, 410,
Willy Tarreau198a7442008-01-17 12:05:32 +01001851 provided that the server has not set a "Cache-control: public" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001852 - all those that come from a POST request, provided that the server has not
1853 set a 'Cache-Control: public' header ;
1854 - those with a 'Pragma: no-cache' header
1855 - those with a 'Cache-control: private' header
1856 - those with a 'Cache-control: no-store' header
1857 - those with a 'Cache-control: max-age=0' header
1858 - those with a 'Cache-control: s-maxage=0' header
1859 - those with a 'Cache-control: no-cache' header
1860 - those with a 'Cache-control: no-cache="set-cookie"' header
1861 - those with a 'Cache-control: no-cache="set-cookie,' header
1862 (allowing other fields after set-cookie)
1863
1864 If a response doesn't respect these requirements, then it will be blocked
Willy Tarreau198a7442008-01-17 12:05:32 +01001865 just as if it was from an "rspdeny" filter, with an "HTTP 502 bad gateway".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001866 The session state shows "PH--" meaning that the proxy blocked the response
1867 during headers processing. Additionnaly, an alert will be sent in the logs so
1868 that admins are informed that there's something to be fixed.
1869
1870 Due to the high impact on the application, the application should be tested
1871 in depth with the option enabled before going to production. It is also a
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001872 good practice to always activate it during tests, even if it is not used in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001873 production, as it will report potentially dangerous application behaviours.
1874
1875 If this option has been enabled in a "defaults" section, it can be disabled
1876 in a specific instance by prepending the "no" keyword before it.
1877
1878
1879option clitcpka
1880no option clitcpka
1881 Enable or disable the sending of TCP keepalive packets on the client side
1882 May be used in sections : defaults | frontend | listen | backend
1883 yes | yes | yes | no
1884 Arguments : none
1885
1886 When there is a firewall or any session-aware component between a client and
1887 a server, and when the protocol involves very long sessions with long idle
1888 periods (eg: remote desktops), there is a risk that one of the intermediate
1889 components decides to expire a session which has remained idle for too long.
1890
1891 Enabling socket-level TCP keep-alives makes the system regularly send packets
1892 to the other end of the connection, leaving it active. The delay between
1893 keep-alive probes is controlled by the system only and depends both on the
1894 operating system and its tuning parameters.
1895
1896 It is important to understand that keep-alive packets are neither emitted nor
1897 received at the application level. It is only the network stacks which sees
1898 them. For this reason, even if one side of the proxy already uses keep-alives
1899 to maintain its connection alive, those keep-alive packets will not be
1900 forwarded to the other side of the proxy.
1901
1902 Please note that this has nothing to do with HTTP keep-alive.
1903
1904 Using option "clitcpka" enables the emission of TCP keep-alive probes on the
1905 client side of a connection, which should help when session expirations are
1906 noticed between HAProxy and a client.
1907
1908 If this option has been enabled in a "defaults" section, it can be disabled
1909 in a specific instance by prepending the "no" keyword before it.
1910
1911 See also : "option srvtcpka", "option tcpka"
1912
1913
Willy Tarreau0ba27502007-12-24 16:55:16 +01001914option contstats
1915 Enable continuous traffic statistics updates
1916 May be used in sections : defaults | frontend | listen | backend
1917 yes | yes | yes | no
1918 Arguments : none
1919
1920 By default, counters used for statistics calculation are incremented
1921 only when a session finishes. It works quite well when serving small
1922 objects, but with big ones (for example large images or archives) or
1923 with A/V streaming, a graph generated from haproxy counters looks like
1924 a hedgehog. With this option enabled counters get incremented continuously,
1925 during a whole session. Recounting touches a hotpath directly so
1926 it is not enabled by default, as it has small performance impact (~0.5%).
1927
1928
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001929option dontlognull
1930no option dontlognull
1931 Enable or disable logging of null connections
1932 May be used in sections : defaults | frontend | listen | backend
1933 yes | yes | yes | no
1934 Arguments : none
1935
1936 In certain environments, there are components which will regularly connect to
1937 various systems to ensure that they are still alive. It can be the case from
1938 another load balancer as well as from monitoring systems. By default, even a
1939 simple port probe or scan will produce a log. If those connections pollute
1940 the logs too much, it is possible to enable option "dontlognull" to indicate
1941 that a connection on which no data has been transferred will not be logged,
1942 which typically corresponds to those probes.
1943
1944 It is generally recommended not to use this option in uncontrolled
1945 environments (eg: internet), otherwise scans and other malicious activities
1946 would not be logged.
1947
1948 If this option has been enabled in a "defaults" section, it can be disabled
1949 in a specific instance by prepending the "no" keyword before it.
1950
Willy Tarreauced27012008-01-17 20:35:34 +01001951 See also : "log", "monitor-net", "monitor-uri" and section 2.6 about logging.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001952
1953
1954option forceclose
1955no option forceclose
1956 Enable or disable active connection closing after response is transferred.
1957 May be used in sections : defaults | frontend | listen | backend
1958 yes | no | yes | yes
1959 Arguments : none
1960
1961 Some HTTP servers do not necessarily close the connections when they receive
1962 the "Connection: close" set by "option httpclose", and if the client does not
1963 close either, then the connection remains open till the timeout expires. This
1964 causes high number of simultaneous connections on the servers and shows high
1965 global session times in the logs.
1966
1967 When this happens, it is possible to use "option forceclose". It will
1968 actively close the outgoing server channel as soon as the server begins to
1969 reply and only if the request buffer is empty. Note that this should NOT be
1970 used if CONNECT requests are expected between the client and the server. This
1971 option implicitly enables the "httpclose" option.
1972
1973 If this option has been enabled in a "defaults" section, it can be disabled
1974 in a specific instance by prepending the "no" keyword before it.
1975
1976 See also : "option httpclose"
1977
1978
Ross Westaf72a1d2008-08-03 10:51:45 +02001979option forwardfor [ except <network> ] [ header <name> ]
Willy Tarreauc27debf2008-01-06 08:57:02 +01001980 Enable insertion of the X-Forwarded-For header to requests sent to servers
1981 May be used in sections : defaults | frontend | listen | backend
1982 yes | yes | yes | yes
1983 Arguments :
1984 <network> is an optional argument used to disable this option for sources
1985 matching <network>
Ross Westaf72a1d2008-08-03 10:51:45 +02001986 <name> an optional argument to specify a different "X-Forwarded-For"
1987 header name.
Willy Tarreauc27debf2008-01-06 08:57:02 +01001988
1989 Since HAProxy works in reverse-proxy mode, the servers see its IP address as
1990 their client address. This is sometimes annoying when the client's IP address
1991 is expected in server logs. To solve this problem, the well-known HTTP header
1992 "X-Forwarded-For" may be added by HAProxy to all requests sent to the server.
1993 This header contains a value representing the client's IP address. Since this
1994 header is always appended at the end of the existing header list, the server
1995 must be configured to always use the last occurrence of this header only. See
Ross Westaf72a1d2008-08-03 10:51:45 +02001996 the server's manual to find how to enable use of this standard header. Note
1997 that only the last occurrence of the header must be used, since it is really
1998 possible that the client has already brought one.
1999
2000 The keyword "header" may be used to supply a different header name to replace
2001 the default "X-Forwarded-For". This can be useful where you might already
2002 have a "X-Forwarded-For" header from a different application (eg: stunnel),
2003 and you need preserve it. Also if your backend server doesn't use the
2004 "X-Forwarded-For" header and requires different one (eg: Zeus Web Servers
2005 require "X-Cluster-Client-IP").
Willy Tarreauc27debf2008-01-06 08:57:02 +01002006
2007 Sometimes, a same HAProxy instance may be shared between a direct client
2008 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
2009 used to decrypt HTTPS traffic). It is possible to disable the addition of the
2010 header for a known source address or network by adding the "except" keyword
2011 followed by the network address. In this case, any source IP matching the
2012 network will not cause an addition of this header. Most common uses are with
2013 private networks or 127.0.0.1.
2014
2015 This option may be specified either in the frontend or in the backend. If at
Ross Westaf72a1d2008-08-03 10:51:45 +02002016 least one of them uses it, the header will be added. Note that the backend's
2017 setting of the header subargument takes precedence over the frontend's if
2018 both are defined.
Willy Tarreauc27debf2008-01-06 08:57:02 +01002019
2020 It is important to note that as long as HAProxy does not support keep-alive
2021 connections, only the first request of a connection will receive the header.
2022 For this reason, it is important to ensure that "option httpclose" is set
2023 when using this option.
2024
Ross Westaf72a1d2008-08-03 10:51:45 +02002025 Examples :
Willy Tarreauc27debf2008-01-06 08:57:02 +01002026 # Public HTTP address also used by stunnel on the same machine
2027 frontend www
2028 mode http
2029 option forwardfor except 127.0.0.1 # stunnel already adds the header
2030
Ross Westaf72a1d2008-08-03 10:51:45 +02002031 # Those servers want the IP Address in X-Client
2032 backend www
2033 mode http
2034 option forwardfor header X-Client
2035
Willy Tarreauc27debf2008-01-06 08:57:02 +01002036 See also : "option httpclose"
2037
2038
2039option http_proxy
2040no option http_proxy
2041 Enable or disable plain HTTP proxy mode
2042 May be used in sections : defaults | frontend | listen | backend
2043 yes | yes | yes | yes
2044 Arguments : none
2045
2046 It sometimes happens that people need a pure HTTP proxy which understands
2047 basic proxy requests without caching nor any fancy feature. In this case,
2048 it may be worth setting up an HAProxy instance with the "option http_proxy"
2049 set. In this mode, no server is declared, and the connection is forwarded to
2050 the IP address and port found in the URL after the "http://" scheme.
2051
2052 No host address resolution is performed, so this only works when pure IP
2053 addresses are passed. Since this option's usage perimeter is rather limited,
2054 it will probably be used only by experts who know they need exactly it. Last,
2055 if the clients are susceptible of sending keep-alive requests, it will be
2056 needed to add "option http_close" to ensure that all requests will correctly
2057 be analyzed.
2058
2059 If this option has been enabled in a "defaults" section, it can be disabled
2060 in a specific instance by prepending the "no" keyword before it.
2061
2062 Example :
2063 # this backend understands HTTP proxy requests and forwards them directly.
2064 backend direct_forward
2065 option httpclose
2066 option http_proxy
2067
2068 See also : "option httpclose"
2069
2070
2071option httpchk
2072option httpchk <uri>
2073option httpchk <method> <uri>
2074option httpchk <method> <uri> <version>
2075 Enable HTTP protocol to check on the servers health
2076 May be used in sections : defaults | frontend | listen | backend
2077 yes | no | yes | yes
2078 Arguments :
2079 <method> is the optional HTTP method used with the requests. When not set,
2080 the "OPTIONS" method is used, as it generally requires low server
2081 processing and is easy to filter out from the logs. Any method
2082 may be used, though it is not recommended to invent non-standard
2083 ones.
2084
2085 <uri> is the URI referenced in the HTTP requests. It defaults to " / "
2086 which is accessible by default on almost any server, but may be
2087 changed to any other URI. Query strings are permitted.
2088
2089 <version> is the optional HTTP version string. It defaults to "HTTP/1.0"
2090 but some servers might behave incorrectly in HTTP 1.0, so turning
2091 it to HTTP/1.1 may sometimes help. Note that the Host field is
2092 mandatory in HTTP/1.1, and as a trick, it is possible to pass it
2093 after "\r\n" following the version string.
2094
2095 By default, server health checks only consist in trying to establish a TCP
2096 connection. When "option httpchk" is specified, a complete HTTP request is
2097 sent once the TCP connection is established, and responses 2xx and 3xx are
2098 considered valid, while all other ones indicate a server failure, including
2099 the lack of any response.
2100
2101 The port and interval are specified in the server configuration.
2102
2103 This option does not necessarily require an HTTP backend, it also works with
2104 plain TCP backends. This is particularly useful to check simple scripts bound
2105 to some dedicated ports using the inetd daemon.
2106
2107 Examples :
2108 # Relay HTTPS traffic to Apache instance and check service availability
2109 # using HTTP request "OPTIONS * HTTP/1.1" on port 80.
2110 backend https_relay
2111 mode tcp
Willy Tarreauebaf21a2008-03-21 20:17:14 +01002112 option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
Willy Tarreauc27debf2008-01-06 08:57:02 +01002113 server apache1 192.168.1.1:443 check port 80
2114
2115 See also : "option ssl-hello-chk", "option smtpchk", "http-check" and the
2116 "check", "port" and "interval" server options.
2117
2118
2119option httpclose
2120no option httpclose
2121 Enable or disable passive HTTP connection closing
2122 May be used in sections : defaults | frontend | listen | backend
2123 yes | yes | yes | yes
2124 Arguments : none
2125
2126 As stated in section 2.1, HAProxy does not yes support the HTTP keep-alive
2127 mode. So by default, if a client communicates with a server in this mode, it
2128 will only analyze, log, and process the first request of each connection. To
2129 workaround this limitation, it is possible to specify "option httpclose". It
2130 will check if a "Connection: close" header is already set in each direction,
2131 and will add one if missing. Each end should react to this by actively
2132 closing the TCP connection after each transfer, thus resulting in a switch to
2133 the HTTP close mode. Any "Connection" header different from "close" will also
2134 be removed.
2135
2136 It seldom happens that some servers incorrectly ignore this header and do not
2137 close the connection eventough they reply "Connection: close". For this
2138 reason, they are not compatible with older HTTP 1.0 browsers. If this
2139 happens it is possible to use the "option forceclose" which actively closes
2140 the request connection once the server responds.
2141
2142 This option may be set both in a frontend and in a backend. It is enabled if
2143 at least one of the frontend or backend holding a connection has it enabled.
2144 If "option forceclose" is specified too, it has precedence over "httpclose".
2145
2146 If this option has been enabled in a "defaults" section, it can be disabled
2147 in a specific instance by prepending the "no" keyword before it.
2148
2149 See also : "option forceclose"
2150
2151
2152option httplog
2153 Enable logging of HTTP request, session state and timers
2154 May be used in sections : defaults | frontend | listen | backend
2155 yes | yes | yes | yes
2156 Arguments : none
2157
2158 By default, the log output format is very poor, as it only contains the
2159 source and destination addresses, and the instance name. By specifying
2160 "option httplog", each log line turns into a much richer format including,
2161 but not limited to, the HTTP request, the connection timers, the session
2162 status, the connections numbers, the captured headers and cookies, the
2163 frontend, backend and server name, and of course the source address and
2164 ports.
2165
2166 This option may be set either in the frontend or the backend.
2167
Willy Tarreauced27012008-01-17 20:35:34 +01002168 See also : section 2.6 about logging.
Willy Tarreauc27debf2008-01-06 08:57:02 +01002169
Willy Tarreauc27debf2008-01-06 08:57:02 +01002170
2171option logasap
2172no option logasap
2173 Enable or disable early logging of HTTP requests
2174 May be used in sections : defaults | frontend | listen | backend
2175 yes | yes | yes | no
2176 Arguments : none
2177
2178 By default, HTTP requests are logged upon termination so that the total
2179 transfer time and the number of bytes appear in the logs. When large objects
2180 are being transferred, it may take a while before the request appears in the
2181 logs. Using "option logasap", the request gets logged as soon as the server
2182 sends the complete headers. The only missing information in the logs will be
2183 the total number of bytes which will indicate everything except the amount
2184 of data transferred, and the total time which will not take the transfer
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002185 time into account. In such a situation, it's a good practice to capture the
Willy Tarreauc27debf2008-01-06 08:57:02 +01002186 "Content-Length" response header so that the logs at least indicate how many
2187 bytes are expected to be transferred.
2188
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002189 Examples :
2190 listen http_proxy 0.0.0.0:80
2191 mode http
2192 option httplog
2193 option logasap
2194 log 192.168.2.200 local3
2195
2196 >>> Feb 6 12:14:14 localhost \
2197 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
2198 static/srv1 9/10/7/14/+30 200 +243 - - ---- 3/1/1/1/0 1/0 \
2199 "GET /image.iso HTTP/1.0"
2200
Willy Tarreauced27012008-01-17 20:35:34 +01002201 See also : "option httplog", "capture response header", and section 2.6 about
Willy Tarreauc27debf2008-01-06 08:57:02 +01002202 logging.
2203
2204
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002205option nolinger
2206no option nolinger
2207 Enable or disable immediate session ressource cleaning after close
2208 May be used in sections: defaults | frontend | listen | backend
2209 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002210 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002211
2212 When clients or servers abort connections in a dirty way (eg: they are
2213 physically disconnected), the session timeouts triggers and the session is
2214 closed. But it will remain in FIN_WAIT1 state for some time in the system,
2215 using some resources and possibly limiting the ability to establish newer
2216 connections.
2217
2218 When this happens, it is possible to activate "option nolinger" which forces
2219 the system to immediately remove any socket's pending data on close. Thus,
2220 the session is instantly purged from the system's tables. This usually has
2221 side effects such as increased number of TCP resets due to old retransmits
2222 getting immediately rejected. Some firewalls may sometimes complain about
2223 this too.
2224
2225 For this reason, it is not recommended to use this option when not absolutely
2226 needed. You know that you need it when you have thousands of FIN_WAIT1
2227 sessions on your system (TIME_WAIT ones do not count).
2228
2229 This option may be used both on frontends and backends, depending on the side
2230 where it is required. Use it on the frontend for clients, and on the backend
2231 for servers.
2232
2233 If this option has been enabled in a "defaults" section, it can be disabled
2234 in a specific instance by prepending the "no" keyword before it.
2235
2236
2237option persist
2238no option persist
2239 Enable or disable forced persistence on down servers
2240 May be used in sections: defaults | frontend | listen | backend
2241 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002242 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002243
2244 When an HTTP request reaches a backend with a cookie which references a dead
2245 server, by default it is redispatched to another server. It is possible to
2246 force the request to be sent to the dead server first using "option persist"
2247 if absolutely needed. A common use case is when servers are under extreme
2248 load and spend their time flapping. In this case, the users would still be
2249 directed to the server they opened the session on, in the hope they would be
2250 correctly served. It is recommended to use "option redispatch" in conjunction
2251 with this option so that in the event it would not be possible to connect to
2252 the server at all (server definitely dead), the client would finally be
2253 redirected to another valid server.
2254
2255 If this option has been enabled in a "defaults" section, it can be disabled
2256 in a specific instance by prepending the "no" keyword before it.
2257
2258 See also : "option redispatch", "retries"
2259
2260
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002261option redispatch
2262no option redispatch
2263 Enable or disable session redistribution in case of connection failure
2264 May be used in sections: defaults | frontend | listen | backend
2265 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002266 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002267
2268 In HTTP mode, if a server designated by a cookie is down, clients may
2269 definitely stick to it because they cannot flush the cookie, so they will not
2270 be able to access the service anymore.
2271
2272 Specifying "option redispatch" will allow the proxy to break their
2273 persistence and redistribute them to a working server.
2274
2275 It also allows to retry last connection to another server in case of multiple
2276 connection failures. Of course, it requires having "retries" set to a nonzero
2277 value.
2278
2279 This form is the preferred form, which replaces both the "redispatch" and
2280 "redisp" keywords.
2281
2282 If this option has been enabled in a "defaults" section, it can be disabled
2283 in a specific instance by prepending the "no" keyword before it.
2284
2285 See also : "redispatch", "retries"
2286
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002287
2288option smtpchk
2289option smtpchk <hello> <domain>
2290 Use SMTP health checks for server testing
2291 May be used in sections : defaults | frontend | listen | backend
2292 yes | no | yes | yes
2293 Arguments :
2294 <hello> is an optional argument. It is the "hello" command to use. It can
2295 be either "HELO" (for SMTP) or "EHLO" (for ESTMP). All other
2296 values will be turned into the default command ("HELO").
2297
2298 <domain> is the domain name to present to the server. It may only be
2299 specified (and is mandatory) if the hello command has been
2300 specified. By default, "localhost" is used.
2301
2302 When "option smtpchk" is set, the health checks will consist in TCP
2303 connections followed by an SMTP command. By default, this command is
2304 "HELO localhost". The server's return code is analyzed and only return codes
2305 starting with a "2" will be considered as valid. All other responses,
2306 including a lack of response will constitute an error and will indicate a
2307 dead server.
2308
2309 This test is meant to be used with SMTP servers or relays. Depending on the
2310 request, it is possible that some servers do not log each connection attempt,
2311 so you may want to experiment to improve the behaviour. Using telnet on port
2312 25 is often easier than adjusting the configuration.
2313
2314 Most often, an incoming SMTP server needs to see the client's IP address for
2315 various purposes, including spam filtering, anti-spoofing and logging. When
2316 possible, it is often wise to masquerade the client's IP address when
2317 connecting to the server using the "usesrc" argument of the "source" keyword,
2318 which requires the cttproxy feature to be compiled in.
2319
2320 Example :
2321 option smtpchk HELO mydomain.org
2322
2323 See also : "option httpchk", "source"
2324
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002325
Willy Tarreauff4f82d2009-02-06 11:28:13 +01002326option splice-auto
2327no option splice-auto
2328 Enable or disable automatic kernel acceleration on sockets in both directions
2329 May be used in sections : defaults | frontend | listen | backend
2330 yes | yes | yes | yes
2331 Arguments : none
2332
2333 When this option is enabled either on a frontend or on a backend, haproxy
2334 will automatically evaluate the opportunity to use kernel tcp splicing to
2335 forward data between the client and the server, in either direction. Haproxy
2336 uses heuristics to estimate if kernel splicing might improve performance or
2337 not. Both directions are handled independantly. Note that the heuristics used
2338 are not much aggressive in order to limit excessive use of splicing. This
2339 option requires splicing to be enabled at compile time, and may be globally
2340 disabled with the global option "nosplice". Since splice uses pipes, using it
2341 requires that there are enough spare pipes.
2342
2343 Important note: kernel-based TCP splicing is a Linux-specific feature which
2344 first appeared in kernel 2.6.25. It offers kernel-based acceleration to
2345 transfer data between sockets without copying these data to user-space, thus
2346 providing noticeable performance gains and CPU cycles savings. Since many
2347 early implementations are buggy, corrupt data and/or are inefficient, this
2348 feature is not enabled by default, and it should be used with extreme care.
2349 While it is not possible to detect the correctness of an implementation,
2350 2.6.29 is the first version offering a properly working implementation. In
2351 case of doubt, splicing may be globally disabled using the global "nosplice"
2352 keyword.
2353
2354 Example :
2355 option splice-auto
2356
2357 If this option has been enabled in a "defaults" section, it can be disabled
2358 in a specific instance by prepending the "no" keyword before it.
2359
2360 See also : "option splice-request", "option splice-response", and global
2361 options "nosplice" and "maxpipes"
2362
2363
2364option splice-request
2365no option splice-request
2366 Enable or disable automatic kernel acceleration on sockets for requests
2367 May be used in sections : defaults | frontend | listen | backend
2368 yes | yes | yes | yes
2369 Arguments : none
2370
2371 When this option is enabled either on a frontend or on a backend, haproxy
2372 will user kernel tcp splicing whenever possible to forward data going from
2373 the client to the server. It might still use the recv/send scheme if there
2374 are no spare pipes left. This option requires splicing to be enabled at
2375 compile time, and may be globally disabled with the global option "nosplice".
2376 Since splice uses pipes, using it requires that there are enough spare pipes.
2377
2378 Important note: see "option splice-auto" for usage limitations.
2379
2380 Example :
2381 option splice-request
2382
2383 If this option has been enabled in a "defaults" section, it can be disabled
2384 in a specific instance by prepending the "no" keyword before it.
2385
2386 See also : "option splice-auto", "option splice-response", and global options
2387 "nosplice" and "maxpipes"
2388
2389
2390option splice-response
2391no option splice-response
2392 Enable or disable automatic kernel acceleration on sockets for responses
2393 May be used in sections : defaults | frontend | listen | backend
2394 yes | yes | yes | yes
2395 Arguments : none
2396
2397 When this option is enabled either on a frontend or on a backend, haproxy
2398 will user kernel tcp splicing whenever possible to forward data going from
2399 the server to the client. It might still use the recv/send scheme if there
2400 are no spare pipes left. This option requires splicing to be enabled at
2401 compile time, and may be globally disabled with the global option "nosplice".
2402 Since splice uses pipes, using it requires that there are enough spare pipes.
2403
2404 Important note: see "option splice-auto" for usage limitations.
2405
2406 Example :
2407 option splice-response
2408
2409 If this option has been enabled in a "defaults" section, it can be disabled
2410 in a specific instance by prepending the "no" keyword before it.
2411
2412 See also : "option splice-auto", "option splice-request", and global options
2413 "nosplice" and "maxpipes"
2414
2415
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002416option srvtcpka
2417no option srvtcpka
2418 Enable or disable the sending of TCP keepalive packets on the server side
2419 May be used in sections : defaults | frontend | listen | backend
2420 yes | no | yes | yes
2421 Arguments : none
2422
2423 When there is a firewall or any session-aware component between a client and
2424 a server, and when the protocol involves very long sessions with long idle
2425 periods (eg: remote desktops), there is a risk that one of the intermediate
2426 components decides to expire a session which has remained idle for too long.
2427
2428 Enabling socket-level TCP keep-alives makes the system regularly send packets
2429 to the other end of the connection, leaving it active. The delay between
2430 keep-alive probes is controlled by the system only and depends both on the
2431 operating system and its tuning parameters.
2432
2433 It is important to understand that keep-alive packets are neither emitted nor
2434 received at the application level. It is only the network stacks which sees
2435 them. For this reason, even if one side of the proxy already uses keep-alives
2436 to maintain its connection alive, those keep-alive packets will not be
2437 forwarded to the other side of the proxy.
2438
2439 Please note that this has nothing to do with HTTP keep-alive.
2440
2441 Using option "srvtcpka" enables the emission of TCP keep-alive probes on the
2442 server side of a connection, which should help when session expirations are
2443 noticed between HAProxy and a server.
2444
2445 If this option has been enabled in a "defaults" section, it can be disabled
2446 in a specific instance by prepending the "no" keyword before it.
2447
2448 See also : "option clitcpka", "option tcpka"
2449
2450
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002451option ssl-hello-chk
2452 Use SSLv3 client hello health checks for server testing
2453 May be used in sections : defaults | frontend | listen | backend
2454 yes | no | yes | yes
2455 Arguments : none
2456
2457 When some SSL-based protocols are relayed in TCP mode through HAProxy, it is
2458 possible to test that the server correctly talks SSL instead of just testing
2459 that it accepts the TCP connection. When "option ssl-hello-chk" is set, pure
2460 SSLv3 client hello messages are sent once the connection is established to
2461 the server, and the response is analyzed to find an SSL server hello message.
2462 The server is considered valid only when the response contains this server
2463 hello message.
2464
2465 All servers tested till there correctly reply to SSLv3 client hello messages,
2466 and most servers tested do not even log the requests containing only hello
2467 messages, which is appreciable.
2468
2469 See also: "option httpchk"
2470
2471
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002472option tcpka
2473 Enable or disable the sending of TCP keepalive packets on both sides
2474 May be used in sections : defaults | frontend | listen | backend
2475 yes | yes | yes | yes
2476 Arguments : none
2477
2478 When there is a firewall or any session-aware component between a client and
2479 a server, and when the protocol involves very long sessions with long idle
2480 periods (eg: remote desktops), there is a risk that one of the intermediate
2481 components decides to expire a session which has remained idle for too long.
2482
2483 Enabling socket-level TCP keep-alives makes the system regularly send packets
2484 to the other end of the connection, leaving it active. The delay between
2485 keep-alive probes is controlled by the system only and depends both on the
2486 operating system and its tuning parameters.
2487
2488 It is important to understand that keep-alive packets are neither emitted nor
2489 received at the application level. It is only the network stacks which sees
2490 them. For this reason, even if one side of the proxy already uses keep-alives
2491 to maintain its connection alive, those keep-alive packets will not be
2492 forwarded to the other side of the proxy.
2493
2494 Please note that this has nothing to do with HTTP keep-alive.
2495
2496 Using option "tcpka" enables the emission of TCP keep-alive probes on both
2497 the client and server sides of a connection. Note that this is meaningful
2498 only in "defaults" or "listen" sections. If this option is used in a
2499 frontend, only the client side will get keep-alives, and if this option is
2500 used in a backend, only the server side will get keep-alives. For this
2501 reason, it is strongly recommended to explicitly use "option clitcpka" and
2502 "option srvtcpka" when the configuration is split between frontends and
2503 backends.
2504
2505 See also : "option clitcpka", "option srvtcpka"
2506
Willy Tarreau844e3c52008-01-11 16:28:18 +01002507
2508option tcplog
2509 Enable advanced logging of TCP connections with session state and timers
2510 May be used in sections : defaults | frontend | listen | backend
2511 yes | yes | yes | yes
2512 Arguments : none
2513
2514 By default, the log output format is very poor, as it only contains the
2515 source and destination addresses, and the instance name. By specifying
2516 "option tcplog", each log line turns into a much richer format including, but
2517 not limited to, the connection timers, the session status, the connections
2518 numbers, the frontend, backend and server name, and of course the source
2519 address and ports. This option is useful for pure TCP proxies in order to
2520 find which of the client or server disconnects or times out. For normal HTTP
2521 proxies, it's better to use "option httplog" which is even more complete.
2522
2523 This option may be set either in the frontend or the backend.
2524
Willy Tarreauced27012008-01-17 20:35:34 +01002525 See also : "option httplog", and section 2.6 about logging.
Willy Tarreau844e3c52008-01-11 16:28:18 +01002526
2527
2528option tcpsplice [ experimental ]
2529 Enable linux kernel-based acceleration of data relaying
2530 May be used in sections : defaults | frontend | listen | backend
2531 yes | yes | yes | yes
2532 Arguments : none
2533
2534 This option is only available when HAProxy has been built for use on Linux
2535 with USE_TCPSPLICE=1. This option requires a kernel patch which is available
2536 on http://www.linux-l7sw.org/.
2537
2538 When "option tcpsplice" is set, as soon as the server's response headers have
2539 been transferred, the session handling is transferred to the kernel which
2540 will forward all subsequent data from the server to the client untill the
2541 session closes. This leads to much faster data transfers between client and
2542 server since the data is not copied twice between kernel and user space, but
2543 there are some limitations such as the lack of information about the number
2544 of bytes transferred and the total transfer time.
2545
2546 This is an experimental feature. It happens to reliably work but issues
2547 caused by corner cases are to be expected.
2548
2549 Note that this option requires that the process permanently runs with
2550 CAP_NETADMIN privileges, which most often translates into running as root.
2551
2552
2553option transparent
2554no option transparent
2555 Enable client-side transparent proxying
2556 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +01002557 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +01002558 Arguments : none
2559
2560 This option was introduced in order to provide layer 7 persistence to layer 3
2561 load balancers. The idea is to use the OS's ability to redirect an incoming
2562 connection for a remote address to a local process (here HAProxy), and let
2563 this process know what address was initially requested. When this option is
2564 used, sessions without cookies will be forwarded to the original destination
2565 IP address of the incoming request (which should match that of another
2566 equipment), while requests with cookies will still be forwarded to the
2567 appropriate server.
2568
2569 Note that contrary to a common belief, this option does NOT make HAProxy
2570 present the client's IP to the server when establishing the connection.
2571
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002572 See also: the "usersrc" argument of the "source" keyword, and the
2573 "transparent" option of the "bind" keyword.
Willy Tarreau844e3c52008-01-11 16:28:18 +01002574
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002575
Willy Tarreau0140f252008-11-19 21:07:09 +01002576redirect location <to> [code <code>] <option> {if | unless} <condition>
2577redirect prefix <to> [code <code>] <option> {if | unless} <condition>
Willy Tarreaub463dfb2008-06-07 23:08:56 +02002578 Return an HTTP redirection if/unless a condition is matched
2579 May be used in sections : defaults | frontend | listen | backend
2580 no | yes | yes | yes
2581
2582 If/unless the condition is matched, the HTTP request will lead to a redirect
Willy Tarreau0140f252008-11-19 21:07:09 +01002583 response.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02002584
Willy Tarreau0140f252008-11-19 21:07:09 +01002585 Arguments :
2586 <to> With "redirect location", the exact value in <to> is placed into
2587 the HTTP "Location" header. In case of "redirect prefix", the
2588 "Location" header is built from the concatenation of <to> and the
2589 complete URI, including the query string, unless the "drop-query"
Willy Tarreaufe651a52008-11-19 21:15:17 +01002590 option is specified (see below). As a special case, if <to>
2591 equals exactly "/" in prefix mode, then nothing is inserted
2592 before the original URI. It allows one to redirect to the same
2593 URL.
Willy Tarreau0140f252008-11-19 21:07:09 +01002594
2595 <code> The code is optional. It indicates which type of HTTP redirection
2596 is desired. Only codes 301, 302 and 303 are supported, and 302 is
2597 used if no code is specified. 301 means "Moved permanently", and
2598 a browser may cache the Location. 302 means "Moved permanently"
2599 and means that the browser should not cache the redirection. 303
2600 is equivalent to 302 except that the browser will fetch the
2601 location with a GET method.
2602
2603 <option> There are several options which can be specified to adjust the
2604 expected behaviour of a redirection :
2605
2606 - "drop-query"
2607 When this keyword is used in a prefix-based redirection, then the
2608 location will be set without any possible query-string, which is useful
2609 for directing users to a non-secure page for instance. It has no effect
2610 with a location-type redirect.
2611
2612 - "set-cookie NAME[=value]"
2613 A "Set-Cookie" header will be added with NAME (and optionally "=value")
2614 to the response. This is sometimes used to indicate that a user has
2615 been seen, for instance to protect against some types of DoS. No other
2616 cookie option is added, so the cookie will be a session cookie. Note
2617 that for a browser, a sole cookie name without an equal sign is
2618 different from a cookie with an equal sign.
2619
2620 - "clear-cookie NAME[=]"
2621 A "Set-Cookie" header will be added with NAME (and optionally "="), but
2622 with the "Max-Age" attribute set to zero. This will tell the browser to
2623 delete this cookie. It is useful for instance on logout pages. It is
2624 important to note that clearing the cookie "NAME" will not remove a
2625 cookie set with "NAME=value". You have to clear the cookie "NAME=" for
2626 that, because the browser makes the difference.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02002627
2628 Example: move the login URL only to HTTPS.
2629 acl clear dst_port 80
2630 acl secure dst_port 8080
2631 acl login_page url_beg /login
Willy Tarreau0140f252008-11-19 21:07:09 +01002632 acl logout url_beg /logout
Willy Tarreau79da4692008-11-19 20:03:04 +01002633 acl uid_given url_reg /login?userid=[^&]+
Willy Tarreau0140f252008-11-19 21:07:09 +01002634 acl cookie_set hdr_sub(cookie) SEEN=1
2635
2636 redirect prefix https://mysite.com set-cookie SEEN=1 if !cookie_set
Willy Tarreau79da4692008-11-19 20:03:04 +01002637 redirect prefix https://mysite.com if login_page !secure
2638 redirect prefix http://mysite.com drop-query if login_page !uid_given
2639 redirect location http://mysite.com/ if !login_page secure
Willy Tarreau0140f252008-11-19 21:07:09 +01002640 redirect location / clear-cookie USERID= if logout
Willy Tarreaub463dfb2008-06-07 23:08:56 +02002641
2642 See section 2.3 about ACL usage.
2643
2644
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002645redisp (deprecated)
2646redispatch (deprecated)
2647 Enable or disable session redistribution in case of connection failure
2648 May be used in sections: defaults | frontend | listen | backend
2649 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002650 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002651
2652 In HTTP mode, if a server designated by a cookie is down, clients may
2653 definitely stick to it because they cannot flush the cookie, so they will not
2654 be able to access the service anymore.
2655
2656 Specifying "redispatch" will allow the proxy to break their persistence and
2657 redistribute them to a working server.
2658
2659 It also allows to retry last connection to another server in case of multiple
2660 connection failures. Of course, it requires having "retries" set to a nonzero
2661 value.
2662
2663 This form is deprecated, do not use it in any new configuration, use the new
2664 "option redispatch" instead.
2665
2666 See also : "option redispatch"
2667
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002668
Willy Tarreau303c0352008-01-17 19:01:39 +01002669reqadd <string>
2670 Add a header at the end of the HTTP request
2671 May be used in sections : defaults | frontend | listen | backend
2672 no | yes | yes | yes
2673 Arguments :
2674 <string> is the complete line to be added. Any space or known delimiter
2675 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002676 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002677
2678 A new line consisting in <string> followed by a line feed will be added after
2679 the last header of an HTTP request.
2680
2681 Header transformations only apply to traffic which passes through HAProxy,
2682 and not to traffic generated by HAProxy, such as health-checks or error
2683 responses.
2684
Willy Tarreauced27012008-01-17 20:35:34 +01002685 See also: "rspadd" and section 2.5 about HTTP header manipulation
Willy Tarreau303c0352008-01-17 19:01:39 +01002686
2687
2688reqallow <search>
2689reqiallow <search> (ignore case)
2690 Definitely allow an HTTP request if a line matches a regular expression
2691 May be used in sections : defaults | frontend | listen | backend
2692 no | yes | yes | yes
2693 Arguments :
2694 <search> is the regular expression applied to HTTP headers and to the
2695 request line. This is an extended regular expression. Parenthesis
2696 grouping is supported and no preliminary backslash is required.
2697 Any space or known delimiter must be escaped using a backslash
2698 ('\'). The pattern applies to a full line at a time. The
2699 "reqallow" keyword strictly matches case while "reqiallow"
2700 ignores case.
2701
2702 A request containing any line which matches extended regular expression
2703 <search> will mark the request as allowed, even if any later test would
2704 result in a deny. The test applies both to the request line and to request
2705 headers. Keep in mind that URLs in request line are case-sensitive while
2706 header names are not.
2707
2708 It is easier, faster and more powerful to use ACLs to write access policies.
2709 Reqdeny, reqallow and reqpass should be avoided in new designs.
2710
2711 Example :
2712 # allow www.* but refuse *.local
2713 reqiallow ^Host:\ www\.
2714 reqideny ^Host:\ .*\.local
2715
Willy Tarreauced27012008-01-17 20:35:34 +01002716 See also: "reqdeny", "acl", "block" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002717 manipulation
2718
2719
2720reqdel <search>
2721reqidel <search> (ignore case)
2722 Delete all headers matching a regular expression in an HTTP request
2723 May be used in sections : defaults | frontend | listen | backend
2724 no | yes | yes | yes
2725 Arguments :
2726 <search> is the regular expression applied to HTTP headers and to the
2727 request line. This is an extended regular expression. Parenthesis
2728 grouping is supported and no preliminary backslash is required.
2729 Any space or known delimiter must be escaped using a backslash
2730 ('\'). The pattern applies to a full line at a time. The "reqdel"
2731 keyword strictly matches case while "reqidel" ignores case.
2732
2733 Any header line matching extended regular expression <search> in the request
2734 will be completely deleted. Most common use of this is to remove unwanted
2735 and/or dangerous headers or cookies from a request before passing it to the
2736 next servers.
2737
2738 Header transformations only apply to traffic which passes through HAProxy,
2739 and not to traffic generated by HAProxy, such as health-checks or error
2740 responses. Keep in mind that header names are not case-sensitive.
2741
2742 Example :
2743 # remove X-Forwarded-For header and SERVER cookie
2744 reqidel ^X-Forwarded-For:.*
2745 reqidel ^Cookie:.*SERVER=
2746
Willy Tarreauced27012008-01-17 20:35:34 +01002747 See also: "reqadd", "reqrep", "rspdel" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002748 manipulation
2749
2750
2751reqdeny <search>
2752reqideny <search> (ignore case)
2753 Deny an HTTP request if a line matches a regular expression
2754 May be used in sections : defaults | frontend | listen | backend
2755 no | yes | yes | yes
2756 Arguments :
2757 <search> is the regular expression applied to HTTP headers and to the
2758 request line. This is an extended regular expression. Parenthesis
2759 grouping is supported and no preliminary backslash is required.
2760 Any space or known delimiter must be escaped using a backslash
2761 ('\'). The pattern applies to a full line at a time. The
2762 "reqdeny" keyword strictly matches case while "reqideny" ignores
2763 case.
2764
2765 A request containing any line which matches extended regular expression
2766 <search> will mark the request as denied, even if any later test would
2767 result in an allow. The test applies both to the request line and to request
2768 headers. Keep in mind that URLs in request line are case-sensitive while
2769 header names are not.
2770
Willy Tarreauced27012008-01-17 20:35:34 +01002771 A denied request will generate an "HTTP 403 forbidden" response once the
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002772 complete request has been parsed. This is consistent with what is practiced
Willy Tarreauced27012008-01-17 20:35:34 +01002773 using ACLs.
2774
Willy Tarreau303c0352008-01-17 19:01:39 +01002775 It is easier, faster and more powerful to use ACLs to write access policies.
2776 Reqdeny, reqallow and reqpass should be avoided in new designs.
2777
2778 Example :
2779 # refuse *.local, then allow www.*
2780 reqideny ^Host:\ .*\.local
2781 reqiallow ^Host:\ www\.
2782
Willy Tarreauced27012008-01-17 20:35:34 +01002783 See also: "reqallow", "rspdeny", "acl", "block" and section 2.5 about HTTP
Willy Tarreau303c0352008-01-17 19:01:39 +01002784 header manipulation
2785
2786
2787reqpass <search>
2788reqipass <search> (ignore case)
2789 Ignore any HTTP request line matching a regular expression in next rules
2790 May be used in sections : defaults | frontend | listen | backend
2791 no | yes | yes | yes
2792 Arguments :
2793 <search> is the regular expression applied to HTTP headers and to the
2794 request line. This is an extended regular expression. Parenthesis
2795 grouping is supported and no preliminary backslash is required.
2796 Any space or known delimiter must be escaped using a backslash
2797 ('\'). The pattern applies to a full line at a time. The
2798 "reqpass" keyword strictly matches case while "reqipass" ignores
2799 case.
2800
2801 A request containing any line which matches extended regular expression
2802 <search> will skip next rules, without assigning any deny or allow verdict.
2803 The test applies both to the request line and to request headers. Keep in
2804 mind that URLs in request line are case-sensitive while header names are not.
2805
2806 It is easier, faster and more powerful to use ACLs to write access policies.
2807 Reqdeny, reqallow and reqpass should be avoided in new designs.
2808
2809 Example :
2810 # refuse *.local, then allow www.*, but ignore "www.private.local"
2811 reqipass ^Host:\ www.private\.local
2812 reqideny ^Host:\ .*\.local
2813 reqiallow ^Host:\ www\.
2814
Willy Tarreauced27012008-01-17 20:35:34 +01002815 See also: "reqallow", "reqdeny", "acl", "block" and section 2.5 about HTTP
Willy Tarreau303c0352008-01-17 19:01:39 +01002816 header manipulation
2817
2818
2819reqrep <search> <string>
2820reqirep <search> <string> (ignore case)
2821 Replace a regular expression with a string in an HTTP request line
2822 May be used in sections : defaults | frontend | listen | backend
2823 no | yes | yes | yes
2824 Arguments :
2825 <search> is the regular expression applied to HTTP headers and to the
2826 request line. This is an extended regular expression. Parenthesis
2827 grouping is supported and no preliminary backslash is required.
2828 Any space or known delimiter must be escaped using a backslash
2829 ('\'). The pattern applies to a full line at a time. The "reqrep"
2830 keyword strictly matches case while "reqirep" ignores case.
2831
2832 <string> is the complete line to be added. Any space or known delimiter
2833 must be escaped using a backslash ('\'). References to matched
2834 pattern groups are possible using the common \N form, with N
2835 being a single digit between 0 and 9. Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002836 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002837
2838 Any line matching extended regular expression <search> in the request (both
2839 the request line and header lines) will be completely replaced with <string>.
2840 Most common use of this is to rewrite URLs or domain names in "Host" headers.
2841
2842 Header transformations only apply to traffic which passes through HAProxy,
2843 and not to traffic generated by HAProxy, such as health-checks or error
2844 responses. Note that for increased readability, it is suggested to add enough
2845 spaces between the request and the response. Keep in mind that URLs in
2846 request line are case-sensitive while header names are not.
2847
2848 Example :
2849 # replace "/static/" with "/" at the beginning of any request path.
2850 reqrep ^([^\ ]*)\ /static/(.*) \1\ /\2
2851 # replace "www.mydomain.com" with "www" in the host name.
2852 reqirep ^Host:\ www.mydomain.com Host:\ www
2853
Willy Tarreauced27012008-01-17 20:35:34 +01002854 See also: "reqadd", "reqdel", "rsprep" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002855 manipulation
2856
2857
2858reqtarpit <search>
2859reqitarpit <search> (ignore case)
2860 Tarpit an HTTP request containing a line matching a regular expression
2861 May be used in sections : defaults | frontend | listen | backend
2862 no | yes | yes | yes
2863 Arguments :
2864 <search> is the regular expression applied to HTTP headers and to the
2865 request line. This is an extended regular expression. Parenthesis
2866 grouping is supported and no preliminary backslash is required.
2867 Any space or known delimiter must be escaped using a backslash
2868 ('\'). The pattern applies to a full line at a time. The
2869 "reqtarpit" keyword strictly matches case while "reqitarpit"
2870 ignores case.
2871
2872 A request containing any line which matches extended regular expression
2873 <search> will be tarpitted, which means that it will connect to nowhere, will
Willy Tarreauced27012008-01-17 20:35:34 +01002874 be kept open for a pre-defined time, then will return an HTTP error 500 so
2875 that the attacker does not suspect it has been tarpitted. The status 500 will
2876 be reported in the logs, but the completion flags will indicate "PT". The
Willy Tarreau303c0352008-01-17 19:01:39 +01002877 delay is defined by "timeout tarpit", or "timeout connect" if the former is
2878 not set.
2879
2880 The goal of the tarpit is to slow down robots attacking servers with
2881 identifiable requests. Many robots limit their outgoing number of connections
2882 and stay connected waiting for a reply which can take several minutes to
2883 come. Depending on the environment and attack, it may be particularly
2884 efficient at reducing the load on the network and firewalls.
2885
2886 Example :
2887 # ignore user-agents reporting any flavour of "Mozilla" or "MSIE", but
2888 # block all others.
2889 reqipass ^User-Agent:\.*(Mozilla|MSIE)
2890 reqitarpit ^User-Agent:
2891
Willy Tarreauced27012008-01-17 20:35:34 +01002892 See also: "reqallow", "reqdeny", "reqpass", and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002893 manipulation
2894
2895
Willy Tarreaue5c5ce92008-06-20 17:27:19 +02002896retries <value>
2897 Set the number of retries to perform on a server after a connection failure
2898 May be used in sections: defaults | frontend | listen | backend
2899 yes | no | yes | yes
2900 Arguments :
2901 <value> is the number of times a connection attempt should be retried on
2902 a server when a connection either is refused or times out. The
2903 default value is 3.
2904
2905 It is important to understand that this value applies to the number of
2906 connection attempts, not full requests. When a connection has effectively
2907 been established to a server, there will be no more retry.
2908
2909 In order to avoid immediate reconnections to a server which is restarting,
2910 a turn-around timer of 1 second is applied before a retry occurs.
2911
2912 When "option redispatch" is set, the last retry may be performed on another
2913 server even if a cookie references a different server.
2914
2915 See also : "option redispatch"
2916
2917
Willy Tarreau303c0352008-01-17 19:01:39 +01002918rspadd <string>
2919 Add a header at the end of the HTTP response
2920 May be used in sections : defaults | frontend | listen | backend
2921 no | yes | yes | yes
2922 Arguments :
2923 <string> is the complete line to be added. Any space or known delimiter
2924 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002925 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002926
2927 A new line consisting in <string> followed by a line feed will be added after
2928 the last header of an HTTP response.
2929
2930 Header transformations only apply to traffic which passes through HAProxy,
2931 and not to traffic generated by HAProxy, such as health-checks or error
2932 responses.
2933
Willy Tarreauced27012008-01-17 20:35:34 +01002934 See also: "reqadd" and section 2.5 about HTTP header manipulation
Willy Tarreau303c0352008-01-17 19:01:39 +01002935
2936
2937rspdel <search>
2938rspidel <search> (ignore case)
2939 Delete all headers matching a regular expression in an HTTP response
2940 May be used in sections : defaults | frontend | listen | backend
2941 no | yes | yes | yes
2942 Arguments :
2943 <search> is the regular expression applied to HTTP headers and to the
2944 response line. This is an extended regular expression, so
2945 parenthesis grouping is supported and no preliminary backslash
2946 is required. Any space or known delimiter must be escaped using
2947 a backslash ('\'). The pattern applies to a full line at a time.
2948 The "rspdel" keyword strictly matches case while "rspidel"
2949 ignores case.
2950
2951 Any header line matching extended regular expression <search> in the response
2952 will be completely deleted. Most common use of this is to remove unwanted
2953 and/or sensible headers or cookies from a response before passing it to the
2954 client.
2955
2956 Header transformations only apply to traffic which passes through HAProxy,
2957 and not to traffic generated by HAProxy, such as health-checks or error
2958 responses. Keep in mind that header names are not case-sensitive.
2959
2960 Example :
2961 # remove the Server header from responses
2962 reqidel ^Server:.*
2963
Willy Tarreauced27012008-01-17 20:35:34 +01002964 See also: "rspadd", "rsprep", "reqdel" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002965 manipulation
2966
2967
2968rspdeny <search>
2969rspideny <search> (ignore case)
2970 Block an HTTP response if a line matches a regular expression
2971 May be used in sections : defaults | frontend | listen | backend
2972 no | yes | yes | yes
2973 Arguments :
2974 <search> is the regular expression applied to HTTP headers and to the
2975 response line. This is an extended regular expression, so
2976 parenthesis grouping is supported and no preliminary backslash
2977 is required. Any space or known delimiter must be escaped using
2978 a backslash ('\'). The pattern applies to a full line at a time.
2979 The "rspdeny" keyword strictly matches case while "rspideny"
2980 ignores case.
2981
2982 A response containing any line which matches extended regular expression
2983 <search> will mark the request as denied. The test applies both to the
2984 response line and to response headers. Keep in mind that header names are not
2985 case-sensitive.
2986
2987 Main use of this keyword is to prevent sensitive information leak and to
Willy Tarreauced27012008-01-17 20:35:34 +01002988 block the response before it reaches the client. If a response is denied, it
2989 will be replaced with an HTTP 502 error so that the client never retrieves
2990 any sensitive data.
Willy Tarreau303c0352008-01-17 19:01:39 +01002991
2992 It is easier, faster and more powerful to use ACLs to write access policies.
2993 Rspdeny should be avoided in new designs.
2994
2995 Example :
2996 # Ensure that no content type matching ms-word will leak
2997 rspideny ^Content-type:\.*/ms-word
2998
Willy Tarreauced27012008-01-17 20:35:34 +01002999 See also: "reqdeny", "acl", "block" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01003000 manipulation
3001
3002
3003rsprep <search> <string>
3004rspirep <search> <string> (ignore case)
3005 Replace a regular expression with a string in an HTTP response line
3006 May be used in sections : defaults | frontend | listen | backend
3007 no | yes | yes | yes
3008 Arguments :
3009 <search> is the regular expression applied to HTTP headers and to the
3010 response line. This is an extended regular expression, so
3011 parenthesis grouping is supported and no preliminary backslash
3012 is required. Any space or known delimiter must be escaped using
3013 a backslash ('\'). The pattern applies to a full line at a time.
3014 The "rsprep" keyword strictly matches case while "rspirep"
3015 ignores case.
3016
3017 <string> is the complete line to be added. Any space or known delimiter
3018 must be escaped using a backslash ('\'). References to matched
3019 pattern groups are possible using the common \N form, with N
3020 being a single digit between 0 and 9. Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01003021 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01003022
3023 Any line matching extended regular expression <search> in the response (both
3024 the response line and header lines) will be completely replaced with
3025 <string>. Most common use of this is to rewrite Location headers.
3026
3027 Header transformations only apply to traffic which passes through HAProxy,
3028 and not to traffic generated by HAProxy, such as health-checks or error
3029 responses. Note that for increased readability, it is suggested to add enough
3030 spaces between the request and the response. Keep in mind that header names
3031 are not case-sensitive.
3032
3033 Example :
3034 # replace "Location: 127.0.0.1:8080" with "Location: www.mydomain.com"
3035 rspirep ^Location:\ 127.0.0.1:8080 Location:\ www.mydomain.com
3036
Willy Tarreauced27012008-01-17 20:35:34 +01003037 See also: "rspadd", "rspdel", "reqrep" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01003038 manipulation
3039
3040
Willy Tarreaueabeafa2008-01-16 16:17:06 +01003041server <name> <address>[:port] [param*]
3042 Declare a server in a backend
3043 May be used in sections : defaults | frontend | listen | backend
3044 no | no | yes | yes
3045 Arguments :
3046 <name> is the internal name assigned to this server. This name will
3047 appear in logs and alerts.
3048
3049 <address> is the IPv4 address of the server. Alternatively, a resolvable
3050 hostname is supported, but this name will be resolved during
3051 start-up.
3052
3053 <ports> is an optional port specification. If set, all connections will
3054 be sent to this port. If unset, the same port the client
3055 connected to will be used. The port may also be prefixed by a "+"
3056 or a "-". In this case, the server's port will be determined by
3057 adding this value to the client's port.
3058
3059 <param*> is a list of parameters for this server. The "server" keywords
3060 accepts an important number of options and has a complete section
3061 dedicated to it. Please refer to section 2.4 for more details.
3062
3063 Examples :
3064 server first 10.1.1.1:1080 cookie first check inter 1000
3065 server second 10.1.1.2:1080 cookie second check inter 1000
3066
3067 See also : section 2.4 about server options
3068
3069
3070source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreaud53f96b2009-02-04 18:46:54 +01003071source <addr>[:<port>] [interface <name>]
Willy Tarreaueabeafa2008-01-16 16:17:06 +01003072 Set the source address for outgoing connections
3073 May be used in sections : defaults | frontend | listen | backend
3074 yes | no | yes | yes
3075 Arguments :
3076 <addr> is the IPv4 address HAProxy will bind to before connecting to a
3077 server. This address is also used as a source for health checks.
3078 The default value of 0.0.0.0 means that the system will select
3079 the most appropriate address to reach its destination.
3080
3081 <port> is an optional port. It is normally not needed but may be useful
3082 in some very specific contexts. The default value of zero means
3083 the system will select a free port.
3084
3085 <addr2> is the IP address to present to the server when connections are
3086 forwarded in full transparent proxy mode. This is currently only
3087 supported on some patched Linux kernels. When this address is
3088 specified, clients connecting to the server will be presented
3089 with this address, while health checks will still use the address
3090 <addr>.
3091
3092 <port2> is the optional port to present to the server when connections
3093 are forwarded in full transparent proxy mode (see <addr2> above).
3094 The default value of zero means the system will select a free
3095 port.
3096
Willy Tarreaud53f96b2009-02-04 18:46:54 +01003097 <name> is an optional interface name to which to bind to for outgoing
3098 traffic. On systems supporting this features (currently, only
3099 Linux), this allows one to bind all traffic to the server to
3100 this interface even if it is not the one the system would select
3101 based on routing tables. This should be used with extreme care.
3102 Note that using this option requires root privileges.
3103
Willy Tarreaueabeafa2008-01-16 16:17:06 +01003104 The "source" keyword is useful in complex environments where a specific
3105 address only is allowed to connect to the servers. It may be needed when a
3106 private address must be used through a public gateway for instance, and it is
3107 known that the system cannot determine the adequate source address by itself.
3108
3109 An extension which is available on certain patched Linux kernels may be used
3110 through the "usesrc" optional keyword. It makes it possible to connect to the
3111 servers with an IP address which does not belong to the system itself. This
3112 is called "full transparent proxy mode". For this to work, the destination
3113 servers have to route their traffic back to this address through the machine
3114 running HAProxy, and IP forwarding must generally be enabled on this machine.
3115
3116 In this "full transparent proxy" mode, it is possible to force a specific IP
3117 address to be presented to the servers. This is not much used in fact. A more
3118 common use is to tell HAProxy to present the client's IP address. For this,
3119 there are two methods :
3120
3121 - present the client's IP and port addresses. This is the most transparent
3122 mode, but it can cause problems when IP connection tracking is enabled on
3123 the machine, because a same connection may be seen twice with different
3124 states. However, this solution presents the huge advantage of not
3125 limiting the system to the 64k outgoing address+port couples, because all
3126 of the client ranges may be used.
3127
3128 - present only the client's IP address and select a spare port. This
3129 solution is still quite elegant but slightly less transparent (downstream
3130 firewalls logs will not match upstream's). It also presents the downside
3131 of limiting the number of concurrent connections to the usual 64k ports.
3132 However, since the upstream and downstream ports are different, local IP
3133 connection tracking on the machine will not be upset by the reuse of the
3134 same session.
3135
3136 Note that depending on the transparent proxy technology used, it may be
3137 required to force the source address. In fact, cttproxy version 2 requires an
3138 IP address in <addr> above, and does not support setting of "0.0.0.0" as the
3139 IP address because it creates NAT entries which much match the exact outgoing
3140 address. Tproxy version 4 and some other kernel patches which work in pure
3141 forwarding mode generally will not have this limitation.
3142
3143 This option sets the default source for all servers in the backend. It may
3144 also be specified in a "defaults" section. Finer source address specification
3145 is possible at the server level using the "source" server option. Refer to
3146 section 2.4 for more information.
3147
3148 Examples :
3149 backend private
3150 # Connect to the servers using our 192.168.1.200 source address
3151 source 192.168.1.200
3152
3153 backend transparent_ssl1
3154 # Connect to the SSL farm from the client's source address
3155 source 192.168.1.200 usesrc clientip
3156
3157 backend transparent_ssl2
3158 # Connect to the SSL farm from the client's source address and port
3159 # not recommended if IP conntrack is present on the local machine.
3160 source 192.168.1.200 usesrc client
3161
3162 backend transparent_ssl3
3163 # Connect to the SSL farm from the client's source address. It
3164 # is more conntrack-friendly.
3165 source 192.168.1.200 usesrc clientip
3166
3167 backend transparent_smtp
3168 # Connect to the SMTP farm from the client's source address/port
3169 # with Tproxy version 4.
3170 source 0.0.0.0 usesrc clientip
3171
3172 See also : the "source" server option in section 2.4, the Tproxy patches for
3173 the Linux kernel on www.balabit.com, the "bind" keyword.
3174
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01003175
Willy Tarreau844e3c52008-01-11 16:28:18 +01003176srvtimeout <timeout> (deprecated)
3177 Set the maximum inactivity time on the server side.
3178 May be used in sections : defaults | frontend | listen | backend
3179 yes | no | yes | yes
3180 Arguments :
3181 <timeout> is the timeout value specified in milliseconds by default, but
3182 can be in any other unit if the number is suffixed by the unit,
3183 as explained at the top of this document.
3184
3185 The inactivity timeout applies when the server is expected to acknowledge or
3186 send data. In HTTP mode, this timeout is particularly important to consider
3187 during the first phase of the server's response, when it has to send the
3188 headers, as it directly represents the server's processing time for the
3189 request. To find out what value to put there, it's often good to start with
3190 what would be considered as unacceptable response times, then check the logs
3191 to observe the response time distribution, and adjust the value accordingly.
3192
3193 The value is specified in milliseconds by default, but can be in any other
3194 unit if the number is suffixed by the unit, as specified at the top of this
3195 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
3196 recommended that the client timeout remains equal to the server timeout in
3197 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003198 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01003199 packet losses by specifying timeouts that are slightly above multiples of 3
3200 seconds (eg: 4 or 5 seconds minimum).
3201
3202 This parameter is specific to backends, but can be specified once for all in
3203 "defaults" sections. This is in fact one of the easiest solutions not to
3204 forget about it. An unspecified timeout results in an infinite timeout, which
3205 is not recommended. Such a usage is accepted and works but reports a warning
3206 during startup because it may results in accumulation of expired sessions in
3207 the system if the system's timeouts are not configured either.
3208
3209 This parameter is provided for compatibility but is currently deprecated.
3210 Please use "timeout server" instead.
3211
3212 See also : "timeout server", "timeout client" and "clitimeout".
3213
3214
Willy Tarreaueabeafa2008-01-16 16:17:06 +01003215stats auth <user>:<passwd>
3216 Enable statistics with authentication and grant access to an account
3217 May be used in sections : defaults | frontend | listen | backend
3218 yes | no | yes | yes
3219 Arguments :
3220 <user> is a user name to grant access to
3221
3222 <passwd> is the cleartext password associated to this user
3223
3224 This statement enables statistics with default settings, and restricts access
3225 to declared users only. It may be repeated as many times as necessary to
3226 allow as many users as desired. When a user tries to access the statistics
3227 without a valid account, a "401 Forbidden" response will be returned so that
3228 the browser asks the user to provide a valid user and password. The real
3229 which will be returned to the browser is configurable using "stats realm".
3230
3231 Since the authentication method is HTTP Basic Authentication, the passwords
3232 circulate in cleartext on the network. Thus, it was decided that the
3233 configuration file would also use cleartext passwords to remind the users
3234 that those ones should not be sensible and not shared with any other account.
3235
3236 It is also possible to reduce the scope of the proxies which appear in the
3237 report using "stats scope".
3238
3239 Though this statement alone is enough to enable statistics reporting, it is
3240 recommended to set all other settings in order to avoid relying on default
3241 unobvious parameters.
3242
3243 Example :
3244 # public access (limited to this backend only)
3245 backend public_www
3246 server srv1 192.168.0.1:80
3247 stats enable
3248 stats hide-version
3249 stats scope .
3250 stats uri /admin?stats
3251 stats realm Haproxy\ Statistics
3252 stats auth admin1:AdMiN123
3253 stats auth admin2:AdMiN321
3254
3255 # internal monitoring access (unlimited)
3256 backend private_monitoring
3257 stats enable
3258 stats uri /admin?stats
3259 stats refresh 5s
3260
3261 See also : "stats enable", "stats realm", "stats scope", "stats uri"
3262
3263
3264stats enable
3265 Enable statistics reporting with default settings
3266 May be used in sections : defaults | frontend | listen | backend
3267 yes | no | yes | yes
3268 Arguments : none
3269
3270 This statement enables statistics reporting with default settings defined
3271 at build time. Unless stated otherwise, these settings are used :
3272 - stats uri : /haproxy?stats
3273 - stats realm : "HAProxy Statistics"
3274 - stats auth : no authentication
3275 - stats scope : no restriction
3276
3277 Though this statement alone is enough to enable statistics reporting, it is
3278 recommended to set all other settings in order to avoid relying on default
3279 unobvious parameters.
3280
3281 Example :
3282 # public access (limited to this backend only)
3283 backend public_www
3284 server srv1 192.168.0.1:80
3285 stats enable
3286 stats hide-version
3287 stats scope .
3288 stats uri /admin?stats
3289 stats realm Haproxy\ Statistics
3290 stats auth admin1:AdMiN123
3291 stats auth admin2:AdMiN321
3292
3293 # internal monitoring access (unlimited)
3294 backend private_monitoring
3295 stats enable
3296 stats uri /admin?stats
3297 stats refresh 5s
3298
3299 See also : "stats auth", "stats realm", "stats uri"
3300
3301
3302stats realm <realm>
3303 Enable statistics and set authentication realm
3304 May be used in sections : defaults | frontend | listen | backend
3305 yes | no | yes | yes
3306 Arguments :
3307 <realm> is the name of the HTTP Basic Authentication realm reported to
3308 the browser. The browser uses it to display it in the pop-up
3309 inviting the user to enter a valid username and password.
3310
3311 The realm is read as a single word, so any spaces in it should be escaped
3312 using a backslash ('\').
3313
3314 This statement is useful only in conjunction with "stats auth" since it is
3315 only related to authentication.
3316
3317 Though this statement alone is enough to enable statistics reporting, it is
3318 recommended to set all other settings in order to avoid relying on default
3319 unobvious parameters.
3320
3321 Example :
3322 # public access (limited to this backend only)
3323 backend public_www
3324 server srv1 192.168.0.1:80
3325 stats enable
3326 stats hide-version
3327 stats scope .
3328 stats uri /admin?stats
3329 stats realm Haproxy\ Statistics
3330 stats auth admin1:AdMiN123
3331 stats auth admin2:AdMiN321
3332
3333 # internal monitoring access (unlimited)
3334 backend private_monitoring
3335 stats enable
3336 stats uri /admin?stats
3337 stats refresh 5s
3338
3339 See also : "stats auth", "stats enable", "stats uri"
3340
3341
3342stats refresh <delay>
3343 Enable statistics with automatic refresh
3344 May be used in sections : defaults | frontend | listen | backend
3345 yes | no | yes | yes
3346 Arguments :
3347 <delay> is the suggested refresh delay, specified in seconds, which will
3348 be returned to the browser consulting the report page. While the
3349 browser is free to apply any delay, it will generally respect it
3350 and refresh the page this every seconds. The refresh interval may
3351 be specified in any other non-default time unit, by suffixing the
3352 unit after the value, as explained at the top of this document.
3353
3354 This statement is useful on monitoring displays with a permanent page
3355 reporting the load balancer's activity. When set, the HTML report page will
3356 include a link "refresh"/"stop refresh" so that the user can select whether
3357 he wants automatic refresh of the page or not.
3358
3359 Though this statement alone is enough to enable statistics reporting, it is
3360 recommended to set all other settings in order to avoid relying on default
3361 unobvious parameters.
3362
3363 Example :
3364 # public access (limited to this backend only)
3365 backend public_www
3366 server srv1 192.168.0.1:80
3367 stats enable
3368 stats hide-version
3369 stats scope .
3370 stats uri /admin?stats
3371 stats realm Haproxy\ Statistics
3372 stats auth admin1:AdMiN123
3373 stats auth admin2:AdMiN321
3374
3375 # internal monitoring access (unlimited)
3376 backend private_monitoring
3377 stats enable
3378 stats uri /admin?stats
3379 stats refresh 5s
3380
3381 See also : "stats auth", "stats enable", "stats realm", "stats uri"
3382
3383
3384stats scope { <name> | "." }
3385 Enable statistics and limit access scope
3386 May be used in sections : defaults | frontend | listen | backend
3387 yes | no | yes | yes
3388 Arguments :
3389 <name> is the name of a listen, frontend or backend section to be
3390 reported. The special name "." (a single dot) designates the
3391 section in which the statement appears.
3392
3393 When this statement is specified, only the sections enumerated with this
3394 statement will appear in the report. All other ones will be hidden. This
3395 statement may appear as many times as needed if multiple sections need to be
3396 reported. Please note that the name checking is performed as simple string
3397 comparisons, and that it is never checked that a give section name really
3398 exists.
3399
3400 Though this statement alone is enough to enable statistics reporting, it is
3401 recommended to set all other settings in order to avoid relying on default
3402 unobvious parameters.
3403
3404 Example :
3405 # public access (limited to this backend only)
3406 backend public_www
3407 server srv1 192.168.0.1:80
3408 stats enable
3409 stats hide-version
3410 stats scope .
3411 stats uri /admin?stats
3412 stats realm Haproxy\ Statistics
3413 stats auth admin1:AdMiN123
3414 stats auth admin2:AdMiN321
3415
3416 # internal monitoring access (unlimited)
3417 backend private_monitoring
3418 stats enable
3419 stats uri /admin?stats
3420 stats refresh 5s
3421
3422 See also : "stats auth", "stats enable", "stats realm", "stats uri"
3423
3424
3425stats uri <prefix>
3426 Enable statistics and define the URI prefix to access them
3427 May be used in sections : defaults | frontend | listen | backend
3428 yes | no | yes | yes
3429 Arguments :
3430 <prefix> is the prefix of any URI which will be redirected to stats. This
3431 prefix may contain a question mark ('?') to indicate part of a
3432 query string.
3433
3434 The statistics URI is intercepted on the relayed traffic, so it appears as a
3435 page within the normal application. It is strongly advised to ensure that the
3436 selected URI will never appear in the application, otherwise it will never be
3437 possible to reach it in the application.
3438
3439 The default URI compiled in haproxy is "/haproxy?stats", but this may be
3440 changed at build time, so it's better to always explictly specify it here.
3441 It is generally a good idea to include a question mark in the URI so that
3442 intermediate proxies refrain from caching the results. Also, since any string
3443 beginning with the prefix will be accepted as a stats request, the question
3444 mark helps ensuring that no valid URI will begin with the same words.
3445
3446 It is sometimes very convenient to use "/" as the URI prefix, and put that
3447 statement in a "listen" instance of its own. That makes it easy to dedicate
3448 an address or a port to statistics only.
3449
3450 Though this statement alone is enough to enable statistics reporting, it is
3451 recommended to set all other settings in order to avoid relying on default
3452 unobvious parameters.
3453
3454 Example :
3455 # public access (limited to this backend only)
3456 backend public_www
3457 server srv1 192.168.0.1:80
3458 stats enable
3459 stats hide-version
3460 stats scope .
3461 stats uri /admin?stats
3462 stats realm Haproxy\ Statistics
3463 stats auth admin1:AdMiN123
3464 stats auth admin2:AdMiN321
3465
3466 # internal monitoring access (unlimited)
3467 backend private_monitoring
3468 stats enable
3469 stats uri /admin?stats
3470 stats refresh 5s
3471
3472 See also : "stats auth", "stats enable", "stats realm"
3473
3474
3475stats hide-version
3476 Enable statistics and hide HAProxy version reporting
3477 May be used in sections : defaults | frontend | listen | backend
3478 yes | no | yes | yes
3479 Arguments : none
3480
3481 By default, the stats page reports some useful status information along with
3482 the statistics. Among them is HAProxy's version. However, it is generally
3483 considered dangerous to report precise version to anyone, as it can help them
3484 target known weaknesses with specific attacks. The "stats hide-version"
3485 statement removes the version from the statistics report. This is recommended
3486 for public sites or any site with a weak login/password.
3487
3488 Though this statement alone is enough to enable statistics reporting, it is
3489 recommended to set all other settings in order to avoid relying on default
3490 unobvious parameters.
3491
3492 Example :
3493 # public access (limited to this backend only)
3494 backend public_www
3495 server srv1 192.168.0.1:80
3496 stats enable
3497 stats hide-version
3498 stats scope .
3499 stats uri /admin?stats
3500 stats realm Haproxy\ Statistics
3501 stats auth admin1:AdMiN123
3502 stats auth admin2:AdMiN321
3503
3504 # internal monitoring access (unlimited)
3505 backend private_monitoring
3506 stats enable
3507 stats uri /admin?stats
3508 stats refresh 5s
3509
3510 See also : "stats auth", "stats enable", "stats realm", "stats uri"
3511
3512
Willy Tarreau62644772008-07-16 18:36:06 +02003513tcp-request content accept [{if | unless} <condition>]
3514 Accept a connection if/unless a content inspection condition is matched
3515 May be used in sections : defaults | frontend | listen | backend
3516 no | yes | yes | no
3517
3518 During TCP content inspection, the connection is immediately validated if the
3519 condition is true (when used with "if") or false (when used with "unless").
3520 Most of the time during content inspection, a condition will be in an
3521 uncertain state which is neither true nor false. The evaluation immediately
3522 stops when such a condition is encountered. It is important to understand
3523 that "accept" and "reject" rules are evaluated in their exact declaration
3524 order, so that it is possible to build complex rules from them. There is no
3525 specific limit to the number of rules which may be inserted.
3526
3527 Note that the "if/unless" condition is optionnal. If no condition is set on
3528 the action, it is simply performed unconditionally.
3529
3530 If no "tcp-request content" rules are matched, the default action already is
3531 "accept". Thus, this statement alone does not bring anything without another
3532 "reject" statement.
3533
3534 See section 2.3 about ACL usage.
3535
3536 See also : "tcp-request content-reject", "tcp-request inspect-delay"
3537
3538
3539tcp-request content reject [{if | unless} <condition>]
3540 Reject a connection if/unless a content inspection condition is matched
3541 May be used in sections : defaults | frontend | listen | backend
3542 no | yes | yes | no
3543
3544 During TCP content inspection, the connection is immediately rejected if the
3545 condition is true (when used with "if") or false (when used with "unless").
3546 Most of the time during content inspection, a condition will be in an
3547 uncertain state which is neither true nor false. The evaluation immediately
3548 stops when such a condition is encountered. It is important to understand
3549 that "accept" and "reject" rules are evaluated in their exact declaration
3550 order, so that it is possible to build complex rules from them. There is no
3551 specific limit to the number of rules which may be inserted.
3552
3553 Note that the "if/unless" condition is optionnal. If no condition is set on
3554 the action, it is simply performed unconditionally.
3555
3556 If no "tcp-request content" rules are matched, the default action is set to
3557 "accept".
3558
3559 Example:
3560 # reject SMTP connection if client speaks first
3561 tcp-request inspect-delay 30s
3562 acl content_present req_len gt 0
3563 tcp-request reject if content_present
3564
3565 # Forward HTTPS connection only if client speaks
3566 tcp-request inspect-delay 30s
3567 acl content_present req_len gt 0
3568 tcp-request accept if content_present
3569 tcp-request reject
3570
3571 See section 2.3 about ACL usage.
3572
3573 See also : "tcp-request content-accept", "tcp-request inspect-delay"
3574
3575
3576tcp-request inspect-delay <timeout>
3577 Set the maximum allowed time to wait for data during content inspection
3578 May be used in sections : defaults | frontend | listen | backend
3579 no | yes | yes | no
3580 Arguments :
3581 <timeout> is the timeout value specified in milliseconds by default, but
3582 can be in any other unit if the number is suffixed by the unit,
3583 as explained at the top of this document.
3584
3585 People using haproxy primarily as a TCP relay are often worried about the
3586 risk of passing any type of protocol to a server without any analysis. In
3587 order to be able to analyze the request contents, we must first withhold
3588 the data then analyze them. This statement simply enables withholding of
3589 data for at most the specified amount of time.
3590
3591 Note that when performing content inspection, haproxy will evaluate the whole
3592 rules for every new chunk which gets in, taking into account the fact that
3593 those data are partial. If no rule matches before the aforementionned delay,
3594 a last check is performed upon expiration, this time considering that the
3595 contents are definitive.
3596
3597 As soon as a rule matches, the request is released and continues as usual. If
3598 the timeout is reached and no rule matches, the default policy will be to let
3599 it pass through unaffected.
3600
3601 For most protocols, it is enough to set it to a few seconds, as most clients
3602 send the full request immediately upon connection. Add 3 or more seconds to
3603 cover TCP retransmits but that's all. For some protocols, it may make sense
3604 to use large values, for instance to ensure that the client never talks
3605 before the server (eg: SMTP), or to wait for a client to talk before passing
3606 data to the server (eg: SSL). Note that the client timeout must cover at
3607 least the inspection delay, otherwise it will expire first.
3608
3609 See also : "tcp-request content accept", "tcp-request content-reject",
3610 "timeout client".
3611
3612
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003613timeout check <timeout>
3614 Set additional check timeout, but only after a connection has been already
3615 established.
3616
3617 May be used in sections: defaults | frontend | listen | backend
3618 yes | no | yes | yes
3619 Arguments:
3620 <timeout> is the timeout value specified in milliseconds by default, but
3621 can be in any other unit if the number is suffixed by the unit,
3622 as explained at the top of this document.
3623
3624 If set, haproxy uses min("timeout connect", "inter") as a connect timeout
3625 for check and "timeout check" as an additional read timeout. The "min" is
3626 used so that people running with *very* long "timeout connect" (eg. those
3627 who needed this due to the queue or tarpit) do not slow down their checks.
3628 Of course it is better to use "check queue" and "check tarpit" instead of
3629 long "timeout connect".
3630
3631 If "timeout check" is not set haproxy uses "inter" for complete check
3632 timeout (connect + read) exactly like all <1.3.15 version.
3633
3634 In most cases check request is much simpler and faster to handle than normal
3635 requests and people may want to kick out laggy servers so this timeout should
Willy Tarreau41a340d2008-01-22 12:25:31 +01003636 be smaller than "timeout server".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003637
3638 This parameter is specific to backends, but can be specified once for all in
3639 "defaults" sections. This is in fact one of the easiest solutions not to
3640 forget about it.
3641
Willy Tarreau41a340d2008-01-22 12:25:31 +01003642 See also: "timeout connect", "timeout queue", "timeout server",
3643 "timeout tarpit".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003644
3645
Willy Tarreau0ba27502007-12-24 16:55:16 +01003646timeout client <timeout>
3647timeout clitimeout <timeout> (deprecated)
3648 Set the maximum inactivity time on the client side.
3649 May be used in sections : defaults | frontend | listen | backend
3650 yes | yes | yes | no
3651 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003652 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01003653 can be in any other unit if the number is suffixed by the unit,
3654 as explained at the top of this document.
3655
3656 The inactivity timeout applies when the client is expected to acknowledge or
3657 send data. In HTTP mode, this timeout is particularly important to consider
3658 during the first phase, when the client sends the request, and during the
3659 response while it is reading data sent by the server. The value is specified
3660 in milliseconds by default, but can be in any other unit if the number is
3661 suffixed by the unit, as specified at the top of this document. In TCP mode
3662 (and to a lesser extent, in HTTP mode), it is highly recommended that the
3663 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003664 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01003665 losses by specifying timeouts that are slightly above multiples of 3 seconds
3666 (eg: 4 or 5 seconds).
3667
3668 This parameter is specific to frontends, but can be specified once for all in
3669 "defaults" sections. This is in fact one of the easiest solutions not to
3670 forget about it. An unspecified timeout results in an infinite timeout, which
3671 is not recommended. Such a usage is accepted and works but reports a warning
3672 during startup because it may results in accumulation of expired sessions in
3673 the system if the system's timeouts are not configured either.
3674
3675 This parameter replaces the old, deprecated "clitimeout". It is recommended
3676 to use it to write new configurations. The form "timeout clitimeout" is
3677 provided only by backwards compatibility but its use is strongly discouraged.
3678
3679 See also : "clitimeout", "timeout server".
3680
3681
3682timeout connect <timeout>
3683timeout contimeout <timeout> (deprecated)
3684 Set the maximum time to wait for a connection attempt to a server to succeed.
3685 May be used in sections : defaults | frontend | listen | backend
3686 yes | no | yes | yes
3687 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003688 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01003689 can be in any other unit if the number is suffixed by the unit,
3690 as explained at the top of this document.
3691
3692 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003693 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreau0ba27502007-12-24 16:55:16 +01003694 cover one or several TCP packet losses by specifying timeouts that are
3695 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003696 connect timeout also presets both queue and tarpit timeouts to the same value
3697 if these have not been specified.
Willy Tarreau0ba27502007-12-24 16:55:16 +01003698
3699 This parameter is specific to backends, but can be specified once for all in
3700 "defaults" sections. This is in fact one of the easiest solutions not to
3701 forget about it. An unspecified timeout results in an infinite timeout, which
3702 is not recommended. Such a usage is accepted and works but reports a warning
3703 during startup because it may results in accumulation of failed sessions in
3704 the system if the system's timeouts are not configured either.
3705
3706 This parameter replaces the old, deprecated "contimeout". It is recommended
3707 to use it to write new configurations. The form "timeout contimeout" is
3708 provided only by backwards compatibility but its use is strongly discouraged.
3709
Willy Tarreau41a340d2008-01-22 12:25:31 +01003710 See also: "timeout check", "timeout queue", "timeout server", "contimeout",
3711 "timeout tarpit".
Willy Tarreau0ba27502007-12-24 16:55:16 +01003712
3713
Willy Tarreau036fae02008-01-06 13:24:40 +01003714timeout http-request <timeout>
3715 Set the maximum allowed time to wait for a complete HTTP request
3716 May be used in sections : defaults | frontend | listen | backend
3717 yes | yes | yes | no
3718 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003719 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau036fae02008-01-06 13:24:40 +01003720 can be in any other unit if the number is suffixed by the unit,
3721 as explained at the top of this document.
3722
3723 In order to offer DoS protection, it may be required to lower the maximum
3724 accepted time to receive a complete HTTP request without affecting the client
3725 timeout. This helps protecting against established connections on which
3726 nothing is sent. The client timeout cannot offer a good protection against
3727 this abuse because it is an inactivity timeout, which means that if the
3728 attacker sends one character every now and then, the timeout will not
3729 trigger. With the HTTP request timeout, no matter what speed the client
3730 types, the request will be aborted if it does not complete in time.
3731
3732 Note that this timeout only applies to the header part of the request, and
3733 not to any data. As soon as the empty line is received, this timeout is not
3734 used anymore.
3735
3736 Generally it is enough to set it to a few seconds, as most clients send the
3737 full request immediately upon connection. Add 3 or more seconds to cover TCP
3738 retransmits but that's all. Setting it to very low values (eg: 50 ms) will
3739 generally work on local networks as long as there are no packet losses. This
3740 will prevent people from sending bare HTTP requests using telnet.
3741
3742 If this parameter is not set, the client timeout still applies between each
3743 chunk of the incoming request.
3744
3745 See also : "timeout client".
3746
Willy Tarreau844e3c52008-01-11 16:28:18 +01003747
3748timeout queue <timeout>
3749 Set the maximum time to wait in the queue for a connection slot to be free
3750 May be used in sections : defaults | frontend | listen | backend
3751 yes | no | yes | yes
3752 Arguments :
3753 <timeout> is the timeout value specified in milliseconds by default, but
3754 can be in any other unit if the number is suffixed by the unit,
3755 as explained at the top of this document.
3756
3757 When a server's maxconn is reached, connections are left pending in a queue
3758 which may be server-specific or global to the backend. In order not to wait
3759 indefinitely, a timeout is applied to requests pending in the queue. If the
3760 timeout is reached, it is considered that the request will almost never be
3761 served, so it is dropped and a 503 error is returned to the client.
3762
3763 The "timeout queue" statement allows to fix the maximum time for a request to
3764 be left pending in a queue. If unspecified, the same value as the backend's
3765 connection timeout ("timeout connect") is used, for backwards compatibility
3766 with older versions with no "timeout queue" parameter.
3767
3768 See also : "timeout connect", "contimeout".
3769
3770
3771timeout server <timeout>
3772timeout srvtimeout <timeout> (deprecated)
3773 Set the maximum inactivity time on the server side.
3774 May be used in sections : defaults | frontend | listen | backend
3775 yes | no | yes | yes
3776 Arguments :
3777 <timeout> is the timeout value specified in milliseconds by default, but
3778 can be in any other unit if the number is suffixed by the unit,
3779 as explained at the top of this document.
3780
3781 The inactivity timeout applies when the server is expected to acknowledge or
3782 send data. In HTTP mode, this timeout is particularly important to consider
3783 during the first phase of the server's response, when it has to send the
3784 headers, as it directly represents the server's processing time for the
3785 request. To find out what value to put there, it's often good to start with
3786 what would be considered as unacceptable response times, then check the logs
3787 to observe the response time distribution, and adjust the value accordingly.
3788
3789 The value is specified in milliseconds by default, but can be in any other
3790 unit if the number is suffixed by the unit, as specified at the top of this
3791 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
3792 recommended that the client timeout remains equal to the server timeout in
3793 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003794 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01003795 packet losses by specifying timeouts that are slightly above multiples of 3
3796 seconds (eg: 4 or 5 seconds minimum).
3797
3798 This parameter is specific to backends, but can be specified once for all in
3799 "defaults" sections. This is in fact one of the easiest solutions not to
3800 forget about it. An unspecified timeout results in an infinite timeout, which
3801 is not recommended. Such a usage is accepted and works but reports a warning
3802 during startup because it may results in accumulation of expired sessions in
3803 the system if the system's timeouts are not configured either.
3804
3805 This parameter replaces the old, deprecated "srvtimeout". It is recommended
3806 to use it to write new configurations. The form "timeout srvtimeout" is
3807 provided only by backwards compatibility but its use is strongly discouraged.
3808
3809 See also : "srvtimeout", "timeout client".
3810
3811
3812timeout tarpit <timeout>
3813 Set the duration for which tapitted connections will be maintained
3814 May be used in sections : defaults | frontend | listen | backend
3815 yes | yes | yes | yes
3816 Arguments :
3817 <timeout> is the tarpit duration specified in milliseconds by default, but
3818 can be in any other unit if the number is suffixed by the unit,
3819 as explained at the top of this document.
3820
3821 When a connection is tarpitted using "reqtarpit", it is maintained open with
3822 no activity for a certain amount of time, then closed. "timeout tarpit"
3823 defines how long it will be maintained open.
3824
3825 The value is specified in milliseconds by default, but can be in any other
3826 unit if the number is suffixed by the unit, as specified at the top of this
3827 document. If unspecified, the same value as the backend's connection timeout
3828 ("timeout connect") is used, for backwards compatibility with older versions
3829 with no "timeout tapit" parameter.
3830
3831 See also : "timeout connect", "contimeout".
3832
3833
3834transparent (deprecated)
3835 Enable client-side transparent proxying
3836 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +01003837 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +01003838 Arguments : none
3839
3840 This keyword was introduced in order to provide layer 7 persistence to layer
3841 3 load balancers. The idea is to use the OS's ability to redirect an incoming
3842 connection for a remote address to a local process (here HAProxy), and let
3843 this process know what address was initially requested. When this option is
3844 used, sessions without cookies will be forwarded to the original destination
3845 IP address of the incoming request (which should match that of another
3846 equipment), while requests with cookies will still be forwarded to the
3847 appropriate server.
3848
3849 The "transparent" keyword is deprecated, use "option transparent" instead.
3850
3851 Note that contrary to a common belief, this option does NOT make HAProxy
3852 present the client's IP to the server when establishing the connection.
3853
Willy Tarreau844e3c52008-01-11 16:28:18 +01003854 See also: "option transparent"
3855
3856
3857use_backend <backend> if <condition>
3858use_backend <backend> unless <condition>
3859 Switch to a specific backend if/unless a Layer 7 condition is matched.
3860 May be used in sections : defaults | frontend | listen | backend
3861 no | yes | yes | no
3862 Arguments :
3863 <backend> is the name of a valid backend or "listen" section.
3864
3865 <condition> is a condition composed of ACLs, as described in section 2.3.
3866
3867 When doing content-switching, connections arrive on a frontend and are then
3868 dispatched to various backends depending on a number of conditions. The
3869 relation between the conditions and the backends is described with the
3870 "use_backend" keyword. This is supported only in HTTP mode.
3871
3872 There may be as many "use_backend" rules as desired. All of these rules are
3873 evaluated in their declaration order, and the first one which matches will
3874 assign the backend.
3875
3876 In the first form, the backend will be used if the condition is met. In the
3877 second form, the backend will be used if the condition is not met. If no
3878 condition is valid, the backend defined with "default_backend" will be used.
3879 If no default backend is defined, either the servers in the same section are
3880 used (in case of a "listen" section) or, in case of a frontend, no server is
3881 used and a 503 service unavailable response is returned.
3882
3883 See also: "default_backend" and section 2.3 about ACLs.
3884
Willy Tarreau036fae02008-01-06 13:24:40 +01003885
Willy Tarreau0ba27502007-12-24 16:55:16 +010038862.3) Using ACLs
Willy Tarreau6a06a402007-07-15 20:15:28 +02003887---------------
3888
3889The use of Access Control Lists (ACL) provides a flexible solution to perform
Willy Tarreau0ba27502007-12-24 16:55:16 +01003890content switching and generally to take decisions based on content extracted
3891from the request, the response or any environmental status. The principle is
3892simple :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003893
3894 - define test criteria with sets of values
3895 - perform actions only if a set of tests is valid
3896
3897The actions generally consist in blocking the request, or selecting a backend.
3898
3899In order to define a test, the "acl" keyword is used. The syntax is :
3900
3901 acl <aclname> <criterion> [flags] [operator] <value> ...
3902
Willy Tarreau0ba27502007-12-24 16:55:16 +01003903This creates a new ACL <aclname> or completes an existing one with new tests.
3904Those tests apply to the portion of request/response specified in <criterion>
Willy Tarreau6a06a402007-07-15 20:15:28 +02003905and may be adjusted with optional flags [flags]. Some criteria also support
3906an operator which may be specified before the set of values. The values are
3907of the type supported by the criterion, and are separated by spaces.
3908
Willy Tarreau0ba27502007-12-24 16:55:16 +01003909ACL names must be formed from upper and lower case letters, digits, '-' (dash),
3910'_' (underscore) , '.' (dot) and ':' (colon). ACL names are case-sensitive,
3911which means that "my_acl" and "My_Acl" are two different ACLs.
3912
3913There is no enforced limit to the number of ACLs. The unused ones do not affect
Willy Tarreau6a06a402007-07-15 20:15:28 +02003914performance, they just consume a small amount of memory.
3915
Willy Tarreau0ba27502007-12-24 16:55:16 +01003916The following ACL flags are currently supported :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003917
3918 -i : ignore case during matching.
3919 -- : force end of flags. Useful when a string looks like one of the flags.
3920
3921Supported types of values are :
Willy Tarreau0ba27502007-12-24 16:55:16 +01003922
Willy Tarreau6a06a402007-07-15 20:15:28 +02003923 - integers or integer ranges
3924 - strings
3925 - regular expressions
3926 - IP addresses and networks
3927
3928
Willy Tarreau0ba27502007-12-24 16:55:16 +010039292.3.1) Matching integers
Willy Tarreau6a06a402007-07-15 20:15:28 +02003930------------------------
3931
3932Matching integers is special in that ranges and operators are permitted. Note
3933that integer matching only applies to positive values. A range is a value
3934expressed with a lower and an upper bound separated with a colon, both of which
3935may be omitted.
3936
3937For instance, "1024:65535" is a valid range to represent a range of
3938unprivileged ports, and "1024:" would also work. "0:1023" is a valid
3939representation of privileged ports, and ":1023" would also work.
3940
Willy Tarreau62644772008-07-16 18:36:06 +02003941As a special case, some ACL functions support decimal numbers which are in fact
3942two integers separated by a dot. This is used with some version checks for
3943instance. All integer properties apply to those decimal numbers, including
3944ranges and operators.
3945
Willy Tarreau6a06a402007-07-15 20:15:28 +02003946For an easier usage, comparison operators are also supported. Note that using
Willy Tarreau0ba27502007-12-24 16:55:16 +01003947operators with ranges does not make much sense and is strongly discouraged.
3948Similarly, it does not make much sense to perform order comparisons with a set
3949of values.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003950
Willy Tarreau0ba27502007-12-24 16:55:16 +01003951Available operators for integer matching are :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003952
3953 eq : true if the tested value equals at least one value
3954 ge : true if the tested value is greater than or equal to at least one value
3955 gt : true if the tested value is greater than at least one value
3956 le : true if the tested value is less than or equal to at least one value
3957 lt : true if the tested value is less than at least one value
3958
Willy Tarreau0ba27502007-12-24 16:55:16 +01003959For instance, the following ACL matches any negative Content-Length header :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003960
3961 acl negative-length hdr_val(content-length) lt 0
3962
Willy Tarreau62644772008-07-16 18:36:06 +02003963This one matches SSL versions between 3.0 and 3.1 (inclusive) :
3964
3965 acl sslv3 req_ssl_ver 3:3.1
3966
Willy Tarreau6a06a402007-07-15 20:15:28 +02003967
Willy Tarreau0ba27502007-12-24 16:55:16 +010039682.3.2) Matching strings
Willy Tarreau6a06a402007-07-15 20:15:28 +02003969-----------------------
3970
3971String matching applies to verbatim strings as they are passed, with the
3972exception of the backslash ("\") which makes it possible to escape some
3973characters such as the space. If the "-i" flag is passed before the first
3974string, then the matching will be performed ignoring the case. In order
3975to match the string "-i", either set it second, or pass the "--" flag
Willy Tarreau0ba27502007-12-24 16:55:16 +01003976before the first string. Same applies of course to match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02003977
3978
Willy Tarreau0ba27502007-12-24 16:55:16 +010039792.3.3) Matching regular expressions (regexes)
Willy Tarreau6a06a402007-07-15 20:15:28 +02003980---------------------------------------------
3981
3982Just like with string matching, regex matching applies to verbatim strings as
3983they are passed, with the exception of the backslash ("\") which makes it
3984possible to escape some characters such as the space. If the "-i" flag is
3985passed before the first regex, then the matching will be performed ignoring
3986the case. In order to match the string "-i", either set it second, or pass
Willy Tarreau0ba27502007-12-24 16:55:16 +01003987the "--" flag before the first string. Same principle applies of course to
3988match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02003989
3990
Willy Tarreau0ba27502007-12-24 16:55:16 +010039912.3.4) Matching IPv4 addresses
3992------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02003993
3994IPv4 addresses values can be specified either as plain addresses or with a
3995netmask appended, in which case the IPv4 address matches whenever it is
3996within the network. Plain addresses may also be replaced with a resolvable
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003997host name, but this practice is generally discouraged as it makes it more
Willy Tarreau0ba27502007-12-24 16:55:16 +01003998difficult to read and debug configurations. If hostnames are used, you should
3999at least ensure that they are present in /etc/hosts so that the configuration
4000does not depend on any random DNS match at the moment the configuration is
4001parsed.
Willy Tarreau6a06a402007-07-15 20:15:28 +02004002
4003
Willy Tarreau0ba27502007-12-24 16:55:16 +010040042.3.5) Available matching criteria
Willy Tarreau6a06a402007-07-15 20:15:28 +02004005----------------------------------
4006
Willy Tarreau0ba27502007-12-24 16:55:16 +010040072.3.5.1) Matching at Layer 4 and below
4008--------------------------------------
4009
4010A first set of criteria applies to information which does not require any
4011analysis of the request or response contents. Those generally include TCP/IP
4012addresses and ports, as well as internal values independant on the stream.
4013
Willy Tarreau6a06a402007-07-15 20:15:28 +02004014always_false
4015 This one never matches. All values and flags are ignored. It may be used as
4016 a temporary replacement for another one when adjusting configurations.
4017
4018always_true
4019 This one always matches. All values and flags are ignored. It may be used as
4020 a temporary replacement for another one when adjusting configurations.
4021
4022src <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01004023 Applies to the client's IPv4 address. It is usually used to limit access to
Willy Tarreau6a06a402007-07-15 20:15:28 +02004024 certain resources such as statistics. Note that it is the TCP-level source
4025 address which is used, and not the address of a client behind a proxy.
4026
4027src_port <integer>
4028 Applies to the client's TCP source port. This has a very limited usage.
4029
4030dst <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01004031 Applies to the local IPv4 address the client connected to. It can be used to
Willy Tarreau6a06a402007-07-15 20:15:28 +02004032 switch to a different backend for some alternative addresses.
4033
4034dst_port <integer>
4035 Applies to the local port the client connected to. It can be used to switch
4036 to a different backend for some alternative ports.
4037
4038dst_conn <integer>
4039 Applies to the number of currently established connections on the frontend,
4040 including the one being evaluated. It can be used to either return a sorry
Willy Tarreau0ba27502007-12-24 16:55:16 +01004041 page before hard-blocking, or to use a specific backend to drain new requests
Willy Tarreau6a06a402007-07-15 20:15:28 +02004042 when the farm is considered saturated.
4043
Willy Tarreau0ba27502007-12-24 16:55:16 +01004044nbsrv <integer>
4045nbsrv(backend) <integer>
4046 Returns true when the number of usable servers of either the current backend
4047 or the named backend matches the values or ranges specified. This is used to
4048 switch to an alternate backend when the number of servers is too low to
4049 to handle some load. It is useful to report a failure when combined with
4050 "monitor fail".
4051
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +08004052connslots <integer>
4053connslots(backend) <integer>
4054 The basic idea here is to be able to measure the number of connection "slots"
4055 still available (connection, + queue) - so that anything beyond that (intended
4056 usage; see "use_backend" keyword) can be redirected to a different backend.
4057
4058 'connslots' = number of available server connection slots, + number of available
4059 server queue slots.
4060
4061 *Note that while "dst_conn" may be used, "connslots" comes in especially useful
4062 when you have a case of traffic going to one single ip, splitting into multiple
4063 backends (perhaps using acls to do name-based load balancing) - and you want to
4064 be able to differentiate between different backends, and their "connslots"
4065 available. Also, whereas "nbsrv" only measures servers that are actually *down*,
4066 this acl is more fine-grained - and looks into the number of conn slots available
4067 as well.
4068
4069 *OTHER CAVEATS AND NOTES: at this point in time, the code does not take care of
4070 dynamic connections. Also, if any of the server maxconn, or maxqueue is 0, then
4071 this acl clearly does not make sense - in which case the value returned will be -1.
4072
Willy Tarreau0ba27502007-12-24 16:55:16 +01004073
Willy Tarreau62644772008-07-16 18:36:06 +020040742.3.5.2) Matching contents at Layer 4
4075-------------------------------------
4076
4077A second set of criteria depends on data found in buffers, but which can change
4078during analysis. This requires that some data has been buffered, for instance
4079through TCP request content inspection. Please see the "tcp-request" keyword
4080for more detailed information on the subject.
4081
4082req_len <integer>
4083 Returns true when the lenght of the data in the request buffer matches the
4084 specified range. It is important to understand that this test does not
4085 return false as long as the buffer is changing. This means that a check with
4086 equality to zero will almost always immediately match at the beginning of the
4087 session, while a test for more data will wait for that data to come in and
4088 return false only when haproxy is certain that no more data will come in.
4089 This test was designed to be used with TCP request content inspection.
4090
4091req_ssl_ver <decimal>
4092 Returns true when data in the request buffer look like SSL, with a protocol
4093 version matching the specified range. Both SSLv2 hello messages and SSLv3
4094 messages are supported. The test tries to be strict enough to avoid being
4095 easily fooled. In particular, it waits for as many bytes as announced in the
4096 message header if this header looks valid (bound to the buffer size). Note
4097 that TLSv1 is announced as SSL version 3.1. This test was designed to be used
4098 with TCP request content inspection.
4099
Willy Tarreaub6fb4202008-07-20 11:18:28 +02004100wait_end
4101 Waits for the end of the analysis period to return true. This may be used in
4102 conjunction with content analysis to avoid returning a wrong verdict early.
4103 It may also be used to delay some actions, such as a delayed reject for some
4104 special addresses. Since it either stops the rules evaluation or immediately
4105 returns true, it is recommended to use this acl as the last one in a rule.
4106 Please note that the default ACL "WAIT_END" is always usable without prior
4107 declaration. This test was designed to be used with TCP request content
4108 inspection.
4109
4110 Examples :
4111 # delay every incoming request by 2 seconds
4112 tcp-request inspect-delay 2s
4113 tcp-request content accept if WAIT_END
4114
4115 # don't immediately tell bad guys they are rejected
4116 tcp-request inspect-delay 10s
4117 acl goodguys src 10.0.0.0/24
4118 acl badguys src 10.0.1.0/24
4119 tcp-request content accept if goodguys
4120 tcp-request content reject if badguys WAIT_END
4121 tcp-request content reject
4122
Willy Tarreau62644772008-07-16 18:36:06 +02004123
41242.3.5.3) Matching at Layer 7
Willy Tarreau0ba27502007-12-24 16:55:16 +01004125----------------------------
4126
Willy Tarreau62644772008-07-16 18:36:06 +02004127A third set of criteria applies to information which can be found at the
Willy Tarreau0ba27502007-12-24 16:55:16 +01004128application layer (layer 7). Those require that a full HTTP request has been
4129read, and are only evaluated then. They may require slightly more CPU resources
4130than the layer 4 ones, but not much since the request and response are indexed.
4131
Willy Tarreau6a06a402007-07-15 20:15:28 +02004132method <string>
4133 Applies to the method in the HTTP request, eg: "GET". Some predefined ACL
4134 already check for most common methods.
4135
4136req_ver <string>
4137 Applies to the version string in the HTTP request, eg: "1.0". Some predefined
4138 ACL already check for versions 1.0 and 1.1.
4139
4140path <string>
4141 Returns true when the path part of the request, which starts at the first
4142 slash and ends before the question mark, equals one of the strings. It may be
4143 used to match known files, such as /favicon.ico.
4144
4145path_beg <string>
Willy Tarreau0ba27502007-12-24 16:55:16 +01004146 Returns true when the path begins with one of the strings. This can be used
4147 to send certain directory names to alternative backends.
Willy Tarreau6a06a402007-07-15 20:15:28 +02004148
4149path_end <string>
4150 Returns true when the path ends with one of the strings. This may be used to
4151 control file name extension.
4152
4153path_sub <string>
4154 Returns true when the path contains one of the strings. It can be used to
4155 detect particular patterns in paths, such as "../" for example. See also
4156 "path_dir".
4157
4158path_dir <string>
4159 Returns true when one of the strings is found isolated or delimited with
4160 slashes in the path. This is used to perform filename or directory name
4161 matching without the risk of wrong match due to colliding prefixes. See also
4162 "url_dir" and "path_sub".
4163
4164path_dom <string>
4165 Returns true when one of the strings is found isolated or delimited with dots
4166 in the path. This may be used to perform domain name matching in proxy
4167 requests. See also "path_sub" and "url_dom".
4168
4169path_reg <regex>
4170 Returns true when the path matches one of the regular expressions. It can be
4171 used any time, but it is important to remember that regex matching is slower
4172 than other methods. See also "url_reg" and all "path_" criteria.
4173
4174url <string>
4175 Applies to the whole URL passed in the request. The only real use is to match
4176 "*", for which there already is a predefined ACL.
4177
4178url_beg <string>
4179 Returns true when the URL begins with one of the strings. This can be used to
4180 check whether a URL begins with a slash or with a protocol scheme.
4181
4182url_end <string>
4183 Returns true when the URL ends with one of the strings. It has very limited
4184 use. "path_end" should be used instead for filename matching.
4185
4186url_sub <string>
4187 Returns true when the URL contains one of the strings. It can be used to
4188 detect particular patterns in query strings for example. See also "path_sub".
4189
4190url_dir <string>
4191 Returns true when one of the strings is found isolated or delimited with
4192 slashes in the URL. This is used to perform filename or directory name
4193 matching without the risk of wrong match due to colliding prefixes. See also
4194 "path_dir" and "url_sub".
4195
4196url_dom <string>
4197 Returns true when one of the strings is found isolated or delimited with dots
4198 in the URL. This is used to perform domain name matching without the risk of
4199 wrong match due to colliding prefixes. See also "url_sub".
4200
4201url_reg <regex>
4202 Returns true when the URL matches one of the regular expressions. It can be
4203 used any time, but it is important to remember that regex matching is slower
4204 than other methods. See also "path_reg" and all "url_" criteria.
4205
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01004206url_ip <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01004207 Applies to the IP address specified in the absolute URI in an HTTP request.
4208 It can be used to prevent access to certain resources such as local network.
Willy Tarreau198a7442008-01-17 12:05:32 +01004209 It is useful with option "http_proxy".
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01004210
4211url_port <integer>
Willy Tarreau0ba27502007-12-24 16:55:16 +01004212 Applies to the port specified in the absolute URI in an HTTP request. It can
4213 be used to prevent access to certain resources. It is useful with option
Willy Tarreau198a7442008-01-17 12:05:32 +01004214 "http_proxy". Note that if the port is not specified in the request, port 80
Willy Tarreau0ba27502007-12-24 16:55:16 +01004215 is assumed.
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01004216
Willy Tarreau6a06a402007-07-15 20:15:28 +02004217hdr <string>
4218hdr(header) <string>
4219 Note: all the "hdr*" matching criteria either apply to all headers, or to a
4220 particular header whose name is passed between parenthesis and without any
Willy Tarreau0ba27502007-12-24 16:55:16 +01004221 space. The header name is not case-sensitive. The header matching complies
4222 with RFC2616, and treats as separate headers all values delimited by commas.
Willy Tarreau6a06a402007-07-15 20:15:28 +02004223
4224 The "hdr" criteria returns true if any of the headers matching the criteria
Willy Tarreau0ba27502007-12-24 16:55:16 +01004225 match any of the strings. This can be used to check exact for values. For
Willy Tarreau6a06a402007-07-15 20:15:28 +02004226 instance, checking that "connection: close" is set :
4227
4228 hdr(Connection) -i close
4229
4230hdr_beg <string>
4231hdr_beg(header) <string>
4232 Returns true when one of the headers begins with one of the strings. See
4233 "hdr" for more information on header matching.
4234
4235hdr_end <string>
4236hdr_end(header) <string>
4237 Returns true when one of the headers ends with one of the strings. See "hdr"
4238 for more information on header matching.
4239
4240hdr_sub <string>
4241hdr_sub(header) <string>
4242 Returns true when one of the headers contains one of the strings. See "hdr"
4243 for more information on header matching.
4244
4245hdr_dir <string>
4246hdr_dir(header) <string>
4247 Returns true when one of the headers contains one of the strings either
4248 isolated or delimited by slashes. This is used to perform filename or
4249 directory name matching, and may be used with Referer. See "hdr" for more
4250 information on header matching.
4251
4252hdr_dom <string>
4253hdr_dom(header) <string>
4254 Returns true when one of the headers contains one of the strings either
4255 isolated or delimited by dots. This is used to perform domain name matching,
4256 and may be used with the Host header. See "hdr" for more information on
4257 header matching.
4258
4259hdr_reg <regex>
4260hdr_reg(header) <regex>
4261 Returns true when one of the headers matches of the regular expressions. It
4262 can be used at any time, but it is important to remember that regex matching
4263 is slower than other methods. See also other "hdr_" criteria, as well as
4264 "hdr" for more information on header matching.
4265
4266hdr_val <integer>
4267hdr_val(header) <integer>
4268 Returns true when one of the headers starts with a number which matches the
4269 values or ranges specified. This may be used to limit content-length to
4270 acceptable values for example. See "hdr" for more information on header
4271 matching.
4272
4273hdr_cnt <integer>
4274hdr_cnt(header) <integer>
Willy Tarreau0ba27502007-12-24 16:55:16 +01004275 Returns true when the number of occurrence of the specified header matches
4276 the values or ranges specified. It is important to remember that one header
4277 line may count as several headers if it has several values. This is used to
4278 detect presence, absence or abuse of a specific header, as well as to block
4279 request smugling attacks by rejecting requests which contain more than one
4280 of certain headers. See "hdr" for more information on header matching.
Willy Tarreau6a06a402007-07-15 20:15:28 +02004281
4282
Willy Tarreau0ba27502007-12-24 16:55:16 +010042832.3.6) Pre-defined ACLs
Willy Tarreau6a06a402007-07-15 20:15:28 +02004284-----------------------
4285
4286Some predefined ACLs are hard-coded so that they do not have to be declared in
4287every frontend which needs them. They all have their names in upper case in
Willy Tarreau0ba27502007-12-24 16:55:16 +01004288order to avoid confusion. Their equivalence is provided below. Please note that
4289only the first three ones are not layer 7 based.
Willy Tarreau6a06a402007-07-15 20:15:28 +02004290
4291ACL name Equivalent to Usage
4292---------------+-----------------------------+---------------------------------
Willy Tarreau58393e12008-07-20 10:39:22 +02004293TRUE always_true always match
4294FALSE always_false never match
Willy Tarreau6a06a402007-07-15 20:15:28 +02004295LOCALHOST src 127.0.0.1/8 match connection from local host
4296HTTP_1.0 req_ver 1.0 match HTTP version 1.0
4297HTTP_1.1 req_ver 1.1 match HTTP version 1.1
4298METH_CONNECT method CONNECT match HTTP CONNECT method
4299METH_GET method GET HEAD match HTTP GET or HEAD method
4300METH_HEAD method HEAD match HTTP HEAD method
4301METH_OPTIONS method OPTIONS match HTTP OPTIONS method
4302METH_POST method POST match HTTP POST method
4303METH_TRACE method TRACE match HTTP TRACE method
4304HTTP_URL_ABS url_reg ^[^/:]*:// match absolute URL with scheme
4305HTTP_URL_SLASH url_beg / match URL begining with "/"
4306HTTP_URL_STAR url * match URL equal to "*"
4307HTTP_CONTENT hdr_val(content-length) gt 0 match an existing content-length
Willy Tarreauc6317702008-07-20 09:29:50 +02004308REQ_CONTENT req_len gt 0 match data in the request buffer
Willy Tarreaub6fb4202008-07-20 11:18:28 +02004309WAIT_END wait_end wait for end of content analysis
Willy Tarreau6a06a402007-07-15 20:15:28 +02004310---------------+-----------------------------+---------------------------------
4311
4312
Willy Tarreau0ba27502007-12-24 16:55:16 +010043132.3.7) Using ACLs to form conditions
Willy Tarreau6a06a402007-07-15 20:15:28 +02004314------------------------------------
4315
4316Some actions are only performed upon a valid condition. A condition is a
4317combination of ACLs with operators. 3 operators are supported :
4318
4319 - AND (implicit)
4320 - OR (explicit with the "or" keyword or the "||" operator)
4321 - Negation with the exclamation mark ("!")
4322
4323A condition is formed as a disjonctive form :
4324
4325 [!]acl1 [!]acl2 ... [!]acln { or [!]acl1 [!]acl2 ... [!]acln } ...
4326
4327Such conditions are generally used after an "if" or "unless" statement,
4328indicating when the condition will trigger the action.
4329
4330For instance, to block HTTP requests to the "*" URL with methods other than
Willy Tarreau0ba27502007-12-24 16:55:16 +01004331"OPTIONS", as well as POST requests without content-length, and GET or HEAD
4332requests with a content-length greater than 0, and finally every request which
4333is not either GET/HEAD/POST/OPTIONS !
Willy Tarreau6a06a402007-07-15 20:15:28 +02004334
4335 acl missing_cl hdr_cnt(Content-length) eq 0
4336 block if HTTP_URL_STAR !METH_OPTIONS || METH_POST missing_cl
4337 block if METH_GET HTTP_CONTENT
4338 block unless METH_GET or METH_POST or METH_OPTIONS
4339
4340To select a different backend for requests to static contents on the "www" site
4341and to every request on the "img", "video", "download" and "ftp" hosts :
4342
4343 acl url_static path_beg /static /images /img /css
4344 acl url_static path_end .gif .png .jpg .css .js
4345 acl host_www hdr_beg(host) -i www
4346 acl host_static hdr_beg(host) -i img. video. download. ftp.
4347
4348 # now use backend "static" for all static-only hosts, and for static urls
4349 # of host "www". Use backend "www" for the rest.
4350 use_backend static if host_static or host_www url_static
4351 use_backend www if host_www
4352
Willy Tarreau844e3c52008-01-11 16:28:18 +01004353See section 2.2 for detailed help on the "block" and "use_backend" keywords.
Willy Tarreaudbc36f62007-11-30 12:29:11 +01004354
4355
Willy Tarreauc7246fc2007-12-02 17:31:20 +010043562.4) Server options
Willy Tarreau5764b382007-11-30 17:46:49 +01004357-------------------
4358
Willy Tarreau198a7442008-01-17 12:05:32 +01004359The "server" keyword supports a certain number of settings which are all passed
4360as arguments on the server line. The order in which those arguments appear does
4361not count, and they are all optional. Some of those settings are single words
4362(booleans) while others expect one or several values after them. In this case,
4363the values must immediately follow the setting name. All those settings must be
4364specified after the server's address if they are used :
4365
4366 server <name> <address>[:port] [settings ...]
4367
4368The currently supported settings are the following ones.
4369
4370addr <ipv4>
4371 Using the "addr" parameter, it becomes possible to use a different IP address
4372 to send health-checks. On some servers, it may be desirable to dedicate an IP
4373 address to specific component able to perform complex tests which are more
4374 suitable to health-checks than the application. This parameter is ignored if
4375 the "check" parameter is not set. See also the "port" parameter.
4376
4377backup
4378 When "backup" is present on a server line, the server is only used in load
4379 balancing when all other non-backup servers are unavailable. Requests coming
4380 with a persistence cookie referencing the server will always be served
4381 though. By default, only the first operational backup server is used, unless
Willy Tarreauaf85d942008-01-30 10:47:10 +01004382 the "allbackups" option is set in the backend. See also the "allbackups"
Willy Tarreau198a7442008-01-17 12:05:32 +01004383 option.
4384
4385check
4386 This option enables health checks on the server. By default, a server is
4387 always considered available. If "check" is set, the server will receive
4388 periodic health checks to ensure that it is really able to serve requests.
4389 The default address and port to send the tests to are those of the server,
4390 and the default source is the same as the one defined in the backend. It is
4391 possible to change the address using the "addr" parameter, the port using the
4392 "port" parameter, the source address using the "source" address, and the
4393 interval and timers using the "inter", "rise" and "fall" parameters. The
4394 request method is define in the backend using the "httpchk", "smtpchk",
4395 and "ssl-hello-chk" options. Please refer to those options and parameters for
4396 more information.
4397
4398cookie <value>
4399 The "cookie" parameter sets the cookie value assigned to the server to
4400 <value>. This value will be checked in incoming requests, and the first
4401 operational server possessing the same value will be selected. In return, in
4402 cookie insertion or rewrite modes, this value will be assigned to the cookie
4403 sent to the client. There is nothing wrong in having several servers sharing
4404 the same cookie value, and it is in fact somewhat common between normal and
4405 backup servers. See also the "cookie" keyword in backend section.
4406
4407fall <count>
4408 The "fall" parameter states that a server will be considered as dead after
4409 <count> consecutive unsuccessful health checks. This value defaults to 3 if
4410 unspecified. See also the "check", "inter" and "rise" parameters.
4411
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01004412id <value>
4413 Set a persistent value for server ID. Must be unique and larger than 1000, as
4414 smaller values are reserved for auto-assigned ids.
4415
Willy Tarreau198a7442008-01-17 12:05:32 +01004416inter <delay>
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01004417fastinter <delay>
4418downinter <delay>
Willy Tarreau198a7442008-01-17 12:05:32 +01004419 The "inter" parameter sets the interval between two consecutive health checks
4420 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01004421 It is also possible to use "fastinter" and "downinter" to optimize delays
Willy Tarreau41a340d2008-01-22 12:25:31 +01004422 between checks depending on the server state :
4423
4424 Server state | Interval used
4425 ---------------------------------+-----------------------------------------
4426 UP 100% (non-transitional) | "inter"
4427 ---------------------------------+-----------------------------------------
4428 Transitionally UP (going down), |
4429 Transitionally DOWN (going up), | "fastinter" if set, "inter" otherwise.
4430 or yet unchecked. |
4431 ---------------------------------+-----------------------------------------
4432 DOWN 100% (non-transitional) | "downinter" if set, "inter" otherwise.
4433 ---------------------------------+-----------------------------------------
4434
4435 Just as with every other time-based parameter, they can be entered in any
4436 other explicit unit among { us, ms, s, m, h, d }. The "inter" parameter also
4437 serves as a timeout for health checks sent to servers if "timeout check" is
4438 not set. In order to reduce "resonance" effects when multiple servers are
4439 hosted on the same hardware, the health-checks of all servers are started
4440 with a small time offset between them. It is also possible to add some random
4441 noise in the health checks interval using the global "spread-checks"
4442 keyword. This makes sense for instance when a lot of backends use the same
4443 servers.
Willy Tarreau198a7442008-01-17 12:05:32 +01004444
4445maxconn <maxconn>
4446 The "maxconn" parameter specifies the maximal number of concurrent
4447 connections that will be sent to this server. If the number of incoming
4448 concurrent requests goes higher than this value, they will be queued, waiting
4449 for a connection to be released. This parameter is very important as it can
4450 save fragile servers from going down under extreme loads. If a "minconn"
4451 parameter is specified, the limit becomes dynamic. The default value is "0"
4452 which means unlimited. See also the "minconn" and "maxqueue" parameters, and
4453 the backend's "fullconn" keyword.
4454
4455maxqueue <maxqueue>
4456 The "maxqueue" parameter specifies the maximal number of connections which
4457 will wait in the queue for this server. If this limit is reached, next
4458 requests will be redispatched to other servers instead of indefinitely
4459 waiting to be served. This will break persistence but may allow people to
4460 quickly re-log in when the server they try to connect to is dying. The
4461 default value is "0" which means the queue is unlimited. See also the
4462 "maxconn" and "minconn" parameters.
4463
4464minconn <minconn>
4465 When the "minconn" parameter is set, the maxconn limit becomes a dynamic
4466 limit following the backend's load. The server will always accept at least
4467 <minconn> connections, never more than <maxconn>, and the limit will be on
4468 the ramp between both values when the backend has less than <fullconn>
4469 concurrent connections. This makes it possible to limit the load on the
4470 server during normal loads, but push it further for important loads without
4471 overloading the server during exceptionnal loads. See also the "maxconn"
4472 and "maxqueue" parameters, as well as the "fullconn" backend keyword.
4473
4474port <port>
4475 Using the "port" parameter, it becomes possible to use a different port to
4476 send health-checks. On some servers, it may be desirable to dedicate a port
4477 to a specific component able to perform complex tests which are more suitable
4478 to health-checks than the application. It is common to run a simple script in
4479 inetd for instance. This parameter is ignored if the "check" parameter is not
4480 set. See also the "addr" parameter.
4481
Willy Tarreau21d2af32008-02-14 20:25:24 +01004482redir <prefix>
4483 The "redir" parameter enables the redirection mode for all GET and HEAD
4484 requests addressing this server. This means that instead of having HAProxy
4485 forward the request to the server, it will send an "HTTP 302" response with
4486 the "Location" header composed of this prefix immediately followed by the
4487 requested URI beginning at the leading '/' of the path component. That means
4488 that no trailing slash should be used after <prefix>. All invalid requests
4489 will be rejected, and all non-GET or HEAD requests will be normally served by
4490 the server. Note that since the response is completely forged, no header
4491 mangling nor cookie insertion is possible in the respose. However, cookies in
4492 requests are still analysed, making this solution completely usable to direct
4493 users to a remote location in case of local disaster. Main use consists in
4494 increasing bandwidth for static servers by having the clients directly
4495 connect to them. Note: never use a relative location here, it would cause a
4496 loop between the client and HAProxy!
4497
4498 Example : server srv1 192.168.1.1:80 redir http://image1.mydomain.com check
4499
Willy Tarreau198a7442008-01-17 12:05:32 +01004500rise <count>
4501 The "rise" parameter states that a server will be considered as operational
4502 after <count> consecutive successful health checks. This value defaults to 2
4503 if unspecified. See also the "check", "inter" and "fall" parameters.
4504
Willy Tarreau5764b382007-11-30 17:46:49 +01004505slowstart <start_time_in_ms>
Willy Tarreau198a7442008-01-17 12:05:32 +01004506 The "slowstart" parameter for a server accepts a value in milliseconds which
Willy Tarreau5764b382007-11-30 17:46:49 +01004507 indicates after how long a server which has just come back up will run at
Willy Tarreaubefdff12007-12-02 22:27:38 +01004508 full speed. Just as with every other time-based parameter, it can be entered
4509 in any other explicit unit among { us, ms, s, m, h, d }. The speed grows
4510 linearly from 0 to 100% during this time. The limitation applies to two
4511 parameters :
Willy Tarreau5764b382007-11-30 17:46:49 +01004512
4513 - maxconn: the number of connections accepted by the server will grow from 1
4514 to 100% of the usual dynamic limit defined by (minconn,maxconn,fullconn).
4515
4516 - weight: when the backend uses a dynamic weighted algorithm, the weight
4517 grows linearly from 1 to 100%. In this case, the weight is updated at every
Willy Tarreau198a7442008-01-17 12:05:32 +01004518 health-check. For this reason, it is important that the "inter" parameter
4519 is smaller than the "slowstart", in order to maximize the number of steps.
Willy Tarreau5764b382007-11-30 17:46:49 +01004520
4521 The slowstart never applies when haproxy starts, otherwise it would cause
4522 trouble to running servers. It only applies when a server has been previously
4523 seen as failed.
4524
Willy Tarreau198a7442008-01-17 12:05:32 +01004525source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreauc76721d2009-02-04 20:20:58 +01004526source <addr>[:<port>] [interface <name>] ...
Willy Tarreau198a7442008-01-17 12:05:32 +01004527 The "source" parameter sets the source address which will be used when
4528 connecting to the server. It follows the exact same parameters and principle
4529 as the backend "source" keyword, except that it only applies to the server
4530 referencing it. Please consult the "source" keyword for details.
4531
Krzysztof Piotr Oledzkic8b16fc2008-02-18 01:26:35 +01004532track [<proxy>/]<server>
4533 This option enables ability to set the current state of the server by
4534 tracking another one. Only a server with checks enabled can be tracked
4535 so it is not possible for example to track a server that tracks another
4536 one. If <proxy> is omitted the current one is used. If disable-on-404 is
4537 used, it has to be enabled on both proxies.
4538
Willy Tarreau198a7442008-01-17 12:05:32 +01004539weight <weight>
4540 The "weight" parameter is used to adjust the server's weight relative to
4541 other servers. All servers will receive a load proportional to their weight
4542 relative to the sum of all weights, so the higher the weight, the higher the
4543 load. The default weight is 1, and the maximal value is 255. If this
4544 parameter is used to distribute the load according to server's capacity, it
4545 is recommended to start with values which can both grow and shrink, for
4546 instance between 10 and 100 to leave enough room above and below for later
4547 adjustments.
4548
Willy Tarreauced27012008-01-17 20:35:34 +01004549
45502.5) HTTP header manipulation
4551-----------------------------
4552
4553In HTTP mode, it is possible to rewrite, add or delete some of the request and
4554response headers based on regular expressions. It is also possible to block a
4555request or a response if a particular header matches a regular expression,
4556which is enough to stop most elementary protocol attacks, and to protect
4557against information leak from the internal network. But there is a limitation
4558to this : since HAProxy's HTTP engine does not support keep-alive, only headers
4559passed during the first request of a TCP session will be seen. All subsequent
4560headers will be considered data only and not analyzed. Furthermore, HAProxy
4561never touches data contents, it stops analysis at the end of headers.
4562
4563This section covers common usage of the following keywords, described in detail
4564in section 2.2.1 :
4565
4566 - reqadd <string>
4567 - reqallow <search>
4568 - reqiallow <search>
4569 - reqdel <search>
4570 - reqidel <search>
4571 - reqdeny <search>
4572 - reqideny <search>
4573 - reqpass <search>
4574 - reqipass <search>
4575 - reqrep <search> <replace>
4576 - reqirep <search> <replace>
4577 - reqtarpit <search>
4578 - reqitarpit <search>
4579 - rspadd <string>
4580 - rspdel <search>
4581 - rspidel <search>
4582 - rspdeny <search>
4583 - rspideny <search>
4584 - rsprep <search> <replace>
4585 - rspirep <search> <replace>
4586
4587With all these keywords, the same conventions are used. The <search> parameter
4588is a POSIX extended regular expression (regex) which supports grouping through
4589parenthesis (without the backslash). Spaces and other delimiters must be
4590prefixed with a backslash ('\') to avoid confusion with a field delimiter.
4591Other characters may be prefixed with a backslash to change their meaning :
4592
4593 \t for a tab
4594 \r for a carriage return (CR)
4595 \n for a new line (LF)
4596 \ to mark a space and differentiate it from a delimiter
4597 \# to mark a sharp and differentiate it from a comment
4598 \\ to use a backslash in a regex
4599 \\\\ to use a backslash in the text (*2 for regex, *2 for haproxy)
4600 \xXX to write the ASCII hex code XX as in the C language
4601
4602The <replace> parameter contains the string to be used to replace the largest
4603portion of text matching the regex. It can make use of the special characters
4604above, and can reference a substring which is delimited by parenthesis in the
4605regex, by writing a backslash ('\') immediately followed by one digit from 0 to
Willy Tarreaud2a4aa22008-01-31 15:28:22 +010046069 indicating the group position (0 designating the entire line). This practice
Willy Tarreauced27012008-01-17 20:35:34 +01004607is very common to users of the "sed" program.
4608
4609The <string> parameter represents the string which will systematically be added
4610after the last header line. It can also use special character sequences above.
4611
4612Notes related to these keywords :
4613---------------------------------
4614 - these keywords are not always convenient to allow/deny based on header
4615 contents. It is strongly recommended to use ACLs with the "block" keyword
4616 instead, resulting in far more flexible and manageable rules.
4617
4618 - lines are always considered as a whole. It is not possible to reference
4619 a header name only or a value only. This is important because of the way
4620 headers are written (notably the number of spaces after the colon).
4621
4622 - the first line is always considered as a header, which makes it possible to
4623 rewrite or filter HTTP requests URIs or response codes, but in turn makes
4624 it harder to distinguish between headers and request line. The regex prefix
4625 ^[^\ \t]*[\ \t] matches any HTTP method followed by a space, and the prefix
4626 ^[^ \t:]*: matches any header name followed by a colon.
4627
4628 - for performances reasons, the number of characters added to a request or to
4629 a response is limited at build time to values between 1 and 4 kB. This
4630 should normally be far more than enough for most usages. If it is too short
4631 on occasional usages, it is possible to gain some space by removing some
4632 useless headers before adding new ones.
4633
4634 - keywords beginning with "reqi" and "rspi" are the same as their couterpart
4635 without the 'i' letter except that they ignore case when matching patterns.
4636
4637 - when a request passes through a frontend then a backend, all req* rules
4638 from the frontend will be evaluated, then all req* rules from the backend
4639 will be evaluated. The reverse path is applied to responses.
4640
4641 - req* statements are applied after "block" statements, so that "block" is
4642 always the first one, but before "use_backend" in order to permit rewriting
4643 before switching.
4644
Willy Tarreau5764b382007-11-30 17:46:49 +01004645
Willy Tarreauced27012008-01-17 20:35:34 +010046462.6) Logging
Willy Tarreau844e3c52008-01-11 16:28:18 +01004647------------
4648
Willy Tarreaucc6c8912009-02-22 10:53:55 +01004649One of HAProxy's strong points certainly lies is its precise logs. It probably
4650provides the finest level of information available for such a product, which is
4651very important for troubleshooting complex environments. Standard information
4652provided in logs include client ports, TCP/HTTP state timers, precise session
4653state at termination and precise termination cause, information about decisions
4654to direct trafic to a server, and of course the ability to capture arbitrary
4655headers.
4656
4657In order to improve administrators reactivity, it offers a great transparency
4658about encountered problems, both internal and external, and it is possible to
4659send logs to different sources at the same time with different level filters :
4660
4661 - global process-level logs (system errors, start/stop, etc..)
4662 - per-instance system and internal errors (lack of resource, bugs, ...)
4663 - per-instance external troubles (servers up/down, max connections)
4664 - per-instance activity (client connections), either at the establishment or
4665 at the termination.
4666
4667The ability to distribute different levels of logs to different log servers
4668allow several production teams to interact and to fix their problems as soon
4669as possible. For example, the system team might monitor system-wide errors,
4670while the application team might be monitoring the up/down for their servers in
4671real time, and the security team might analyze the activity logs with one hour
4672delay.
4673
4674
46752.6.1) Log levels
4676-----------------
4677
4678TCP and HTTP connections can be logged with informations such as date, time,
4679source IP address, destination address, connection duration, response times,
4680HTTP request, the HTTP return code, number of bytes transmitted, the conditions
4681in which the session ended, and even exchanged cookies values, to track a
4682particular user's problems for example. All messages are sent to up to two
4683syslog servers. Check the "log" keyword in section 2.2 for more info about log
4684facilities.
4685
4686
46872.6.2) Log formats
4688------------------
4689
4690HAProxy supports 3 log formats. Several fields are common between these formats
4691and will be detailed in the next sections. A few of them may slightly vary with
4692the configuration, due to indicators specific to certain options. The supported
4693formats are the following ones :
4694
4695 - the default format, which is very basic and very rarely used. It only
4696 provides very basic information about the incoming connection at the moment
4697 it is accepted : source IP:port, destination IP:port, and frontend-name.
4698 This mode will eventually disappear so it will not be described to great
4699 extents.
4700
4701 - the TCP format, which is more advanced. This format is enabled when "option
4702 tcplog" is set on the frontend. HAProxy will then usually wait for the
4703 connection to terminate before logging. This format provides much richer
4704 information, such as timers, connection counts, queue size, etc... This
4705 format is recommended for pure TCP proxies.
4706
4707 - the HTTP format, which is the most advanced for HTTP proxying. This format
4708 is enabled when "option httplog" is set on the frontend. It provides the
4709 same information as the TCP format with some HTTP-specific fields such as
4710 the request, the status code, and captures of headers and cookies. This
4711 format is recommended for HTTP proxies.
4712
4713Next sections will go deeper into details for each of these formats. Format
4714specification will be performed on a "field" basis. Unless stated otherwise, a
4715field is a portion of text delimited by any number of spaces. Since syslog
4716servers are susceptible of inserting fields at the beginning of a line, it is
4717always assumed that the first field is the one containing the process name and
4718identifier.
4719
4720Note : Since log lines may be quite long, the log examples in sections below
4721 might be broken into multiple lines. The example log lines will be
4722 prefixed with 3 closing angle brackets ('>>>') and each time a log is
4723 broken into multiple lines, each non-final line will end with a
4724 backslash ('\') and the next line will start indented by two characters.
4725
4726
47272.6.2.1) Default log format
4728---------------------------
4729
4730This format is used when no specific option is set. The log is emitted as soon
4731as the connection is accepted. One should note that this currently is the only
4732format which logs the request's destination IP and ports.
4733
4734 Example :
4735 listen www
4736 mode http
4737 log global
4738 server srv1 127.0.0.1:8000
4739
4740 >>> Feb 6 12:12:09 localhost \
4741 haproxy[14385]: Connect from 10.0.1.2:33312 to 10.0.3.31:8012 \
4742 (www/HTTP)
4743
4744 Field Format Extract from the example above
4745 1 process_name '[' pid ']:' haproxy[14385]:
4746 2 'Connect from' Connect from
4747 3 source_ip ':' source_port 10.0.1.2:33312
4748 4 'to' to
4749 5 destination_ip ':' destination_port 10.0.3.31:8012
4750 6 '(' frontend_name '/' mode ')' (www/HTTP)
4751
4752Detailed fields description :
4753 - "source_ip" is the IP address of the client which initiated the connection.
4754 - "source_port" is the TCP port of the client which initiated the connection.
4755 - "destination_ip" is the IP address the client connected to.
4756 - "destination_port" is the TCP port the client connected to.
4757 - "frontend_name" is the name of the frontend (or listener) which received
4758 and processed the connection.
4759 - "mode is the mode the frontend is operating (TCP or HTTP).
4760
4761It is advised not to use this deprecated format for newer installations as it
4762will eventually disappear.
4763
4764
47652.6.2.2) TCP log format
4766-----------------------
4767
4768The TCP format is used when "option tcplog" is specified in the frontend, and
4769is the recommended format for pure TCP proxies. It provides a lot of precious
4770information for troubleshooting. Since this format includes timers and byte
4771counts, the log is normally emitted at the end of the session. It can be
4772emitted earlier if "option logasap" is specified, which makes sense in most
4773environments with long sessions such as remote terminals. Sessions which match
4774the "monitor" rules are never logged. It is also possible not to emit logs for
4775sessions for which no data were exchanged between the client and the server, by
4776specifying "option dontlognull" in the frontend. A few fields may slightly vary
4777depending on some configuration options, those are marked with a star ('*')
4778after the field name below.
4779
4780 Example :
4781 frontend fnt
4782 mode tcp
4783 option tcplog
4784 log global
4785 default_backend bck
4786
4787 backend bck
4788 server srv1 127.0.0.1:8000
4789
4790 >>> Feb 6 12:12:56 localhost \
4791 haproxy[14387]: 10.0.1.2:33313 [06/Feb/2009:12:12:51.443] fnt \
4792 bck/srv1 0/0/5007 212 -- 0/0/0/0/3 0/0
4793
4794 Field Format Extract from the example above
4795 1 process_name '[' pid ']:' haproxy[14387]:
4796 2 client_ip ':' client_port 10.0.1.2:33313
4797 3 '[' accept_date ']' [06/Feb/2009:12:12:51.443]
4798 4 frontend_name fnt
4799 5 backend_name '/' server_name bck/srv1
4800 6 Tw '/' Tc '/' Tt* 0/0/5007
4801 7 bytes_read* 212
4802 8 termination_state --
4803 9 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 0/0/0/0/3
4804 10 srv_queue '/' backend_queue 0/0
4805
4806Detailed fields description :
4807 - "client_ip" is the IP address of the client which initiated the TCP
4808 connection to haproxy.
4809
4810 - "client_port" is the TCP port of the client which initiated the connection.
4811
4812 - "accept_date" is the exact date when the connection was received by haproxy
4813 (which might be very slightly different from the date observed on the
4814 network if there was some queuing in the system's backlog). This is usually
4815 the same date which may appear in any upstream firewall's log.
4816
4817 - "frontend_name" is the name of the frontend (or listener) which received
4818 and processed the connection.
4819
4820 - "backend_name" is the name of the backend (or listener) which was selected
4821 to manage the connection to the server. This will be the same as the
4822 frontend if no switching rule has been applied, which is common for TCP
4823 applications.
4824
4825 - "server_name" is the name of the last server to which the connection was
4826 sent, which might differ from the first one if there were connection errors
4827 and a redispatch occurred. Note that this server belongs to the backend
4828 which processed the request. If the connection was aborted before reaching
4829 a server, "<NOSRV>" is indicated instead of a server name.
4830
4831 - "Tw" is the total time in milliseconds spent waiting in the various queues.
4832 It can be "-1" if the connection was aborted before reaching the queue.
4833 See "Timers" below for more details.
4834
4835 - "Tc" is the total time in milliseconds spent waiting for the connection to
4836 establish to the final server, including retries. It can be "-1" if the
4837 connection was aborted before a connection could be established. See
4838 "Timers" below for more details.
4839
4840 - "Tt" is the total time in milliseconds elapsed between the accept and the
4841 last close. It covers all possible processings. There is one exception, if
4842 "option logasap" was specified, then the time counting stops at the moment
4843 the log is emitted. In this case, a '+' sign is prepended before the value,
4844 indicating that the final one will be larger. See "Timers" below for more
4845 details.
4846
4847 - "bytes_read" is the total number of bytes transmitted from the server to
4848 the client when the log is emitted. If "option logasap" is specified, the
4849 this value will be prefixed with a '+' sign indicating that the final one
4850 may be larger. Please note that this value is a 64-bit counter, so log
4851 analysis tools must be able to handle it without overflowing.
4852
4853 - "termination_state" is the condition the session was in when the session
4854 ended. This indicates the session state, which side caused the end of
4855 session to happen, and for what reason (timeout, error, ...). The normal
4856 flags should be "--", indicating the session was closed by either end with
4857 no data remaining in buffers. See below "Session state at disconnection"
4858 for more details.
4859
4860 - "actconn" is the total number of concurrent connections on the process when
4861 the session was logged. It it useful to detect when some per-process system
4862 limits have been reached. For instance, if actconn is close to 512 when
4863 multiple connection errors occur, chances are high that the system limits
4864 the process to use a maximum of 1024 file descriptors and that all of them
4865 are used. See section 1 "Global parameters" to find how to tune the system.
4866
4867 - "feconn" is the total number of concurrent connections on the frontend when
4868 the session was logged. It is useful to estimate the amount of resource
4869 required to sustain high loads, and to detect when the frontend's "maxconn"
4870 has been reached. Most often when this value increases by huge jumps, it is
4871 because there is congestion on the backend servers, but sometimes it can be
4872 caused by a denial of service attack.
4873
4874 - "beconn" is the total number of concurrent connections handled by the
4875 backend when the session was logged. It includes the total number of
4876 concurrent connections active on servers as well as the number of
4877 connections pending in queues. It is useful to estimate the amount of
4878 additional servers needed to support high loads for a given application.
4879 Most often when this value increases by huge jumps, it is because there is
4880 congestion on the backend servers, but sometimes it can be caused by a
4881 denial of service attack.
4882
4883 - "srv_conn" is the total number of concurrent connections still active on
4884 the server when the session was logged. It can never exceed the server's
4885 configured "maxconn" parameter. If this value is very often close or equal
4886 to the server's "maxconn", it means that traffic regulation is involved a
4887 lot, meaning that either the server's maxconn value is too low, or that
4888 there aren't enough servers to process the load with an optimal response
4889 time. When only one of the server's "srv_conn" is high, it usually means
4890 that this server has some trouble causing the connections to take longer to
4891 be processed than on other servers.
4892
4893 - "retries" is the number of connection retries experienced by this session
4894 when trying to connect to the server. It must normally be zero, unless a
4895 server is being stopped at the same moment the connection was attempted.
4896 Frequent retries generally indicate either a network problem between
4897 haproxy and the server, or a misconfigured system backlog on the server
4898 preventing new connections from being queued. This field may optionally be
4899 prefixed with a '+' sign, indicating that the session has experienced a
4900 redispatch after the maximal retry count has been reached on the initial
4901 server. In this case, the server name appearing in the log is the one the
4902 connection was redispatched to, and not the first one, though both may
4903 sometimes be the same in case of hashing for instance. So as a general rule
4904 of thumb, when a '+' is present in front of the retry count, this count
4905 should not be attributed to the logged server.
4906
4907 - "srv_queue" is the total number of requests which were processed before
4908 this one in the server queue. It is zero when the request has not gone
4909 through the server queue. It makes it possible to estimate the approximate
4910 server's response time by dividing the time spent in queue by the number of
4911 requests in the queue. It is worth noting that if a session experiences a
4912 redispatch and passes through two server queues, their positions will be
4913 cumulated. A request should not pass through both the server queue and the
4914 backend queue unless a redispatch occurs.
4915
4916 - "backend_queue" is the total number of requests which were processed before
4917 this one in the backend's global queue. It is zero when the request has not
4918 gone through the global queue. It makes it possible to estimate the average
4919 queue length, which easily translates into a number of missing servers when
4920 divided by a server's "maxconn" parameter. It is worth noting that if a
4921 session experiences a redispatch, it may pass twice in the backend's queue,
4922 and then both positions will be cumulated. A request should not pass
4923 through both the server queue and the backend queue unless a redispatch
4924 occurs.
4925
4926
49272.6.2.3) HTTP log format
4928------------------------
4929
4930The HTTP format is the most complete and the best suited for HTTP proxies. It
4931is enabled by when "option httplog" is specified in the frontend. It provides
4932the same level of information as the TCP format with additional features which
4933are specific to the HTTP protocol. Just like the TCP format, the log is usually
4934emitted at the end of the session, unless "option logasap" is specified, which
4935generally only makes sense for download sites. A session which matches the
4936"monitor" rules will never logged. It is also possible not to log sessions for
4937which no data were sent by the client by specifying "option dontlognull" in the
4938frontend.
4939
4940Most fields are shared with the TCP log, some being different. A few fields may
4941slightly vary depending on some configuration options. Those ones are marked
4942with a star ('*') after the field name below.
4943
4944 Example :
4945 frontend http-in
4946 mode http
4947 option httplog
4948 log global
4949 default_backend bck
4950
4951 backend static
4952 server srv1 127.0.0.1:8000
4953
4954 >>> Feb 6 12:14:14 localhost \
4955 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
4956 static/srv1 10/0/30/69/109 200 2750 - - ---- 1/1/1/1/0 0/0 {1wt.eu} \
4957 {} "GET /index.html HTTP/1.1"
4958
4959 Field Format Extract from the example above
4960 1 process_name '[' pid ']:' haproxy[14389]:
4961 2 client_ip ':' client_port 10.0.1.2:33317
4962 3 '[' accept_date ']' [06/Feb/2009:12:14:14.655]
4963 4 frontend_name http-in
4964 5 backend_name '/' server_name static/srv1
4965 6 Tq '/' Tw '/' Tc '/' Tr '/' Tt* 10/0/30/69/109
4966 7 status_code 200
4967 8 bytes_read* 2750
4968 9 captured_request_cookie -
4969 10 captured_response_cookie -
4970 11 termination_state ----
4971 12 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 1/1/1/1/0
4972 13 srv_queue '/' backend_queue 0/0
4973 14 '{' captured_request_headers* '}' {haproxy.1wt.eu}
4974 15 '{' captured_response_headers* '}' {}
4975 16 '"' http_request '"' "GET /index.html HTTP/1.1"
4976
4977
4978Detailed fields description :
4979 - "client_ip" is the IP address of the client which initiated the TCP
4980 connection to haproxy.
4981
4982 - "client_port" is the TCP port of the client which initiated the connection.
4983
4984 - "accept_date" is the exact date when the TCP connection was received by
4985 haproxy (which might be very slightly different from the date observed on
4986 the network if there was some queuing in the system's backlog). This is
4987 usually the same date which may appear in any upstream firewall's log. This
4988 does not depend on the fact that the client has sent the request or not.
4989
4990 - "frontend_name" is the name of the frontend (or listener) which received
4991 and processed the connection.
4992
4993 - "backend_name" is the name of the backend (or listener) which was selected
4994 to manage the connection to the server. This will be the same as the
4995 frontend if no switching rule has been applied.
4996
4997 - "server_name" is the name of the last server to which the connection was
4998 sent, which might differ from the first one if there were connection errors
4999 and a redispatch occurred. Note that this server belongs to the backend
5000 which processed the request. If the request was aborted before reaching a
5001 server, "<NOSRV>" is indicated instead of a server name. If the request was
5002 intercepted by the stats subsystem, "<STATS>" is indicated instead.
5003
5004 - "Tq" is the total time in milliseconds spent waiting for the client to send
5005 a full HTTP request, not counting data. It can be "-1" if the connection
5006 was aborted before a complete request could be received. It should always
5007 be very small because a request generally fits in one single packet. Large
5008 times here generally indicate network trouble between the client and
5009 haproxy. See "Timers" below for more details.
5010
5011 - "Tw" is the total time in milliseconds spent waiting in the various queues.
5012 It can be "-1" if the connection was aborted before reaching the queue.
5013 See "Timers" below for more details.
5014
5015 - "Tc" is the total time in milliseconds spent waiting for the connection to
5016 establish to the final server, including retries. It can be "-1" if the
5017 request was aborted before a connection could be established. See "Timers"
5018 below for more details.
5019
5020 - "Tr" is the total time in milliseconds spent waiting for the server to send
5021 a full HTTP response, not counting data. It can be "-1" if the request was
5022 aborted before a complete response could be received. It generally matches
5023 the server's processing time for the request, though it may be altered by
5024 the amount of data sent by the client to the server. Large times here on
5025 "GET" requests generally indicate an overloaded server. See "Timers" below
5026 for more details.
5027
5028 - "Tt" is the total time in milliseconds elapsed between the accept and the
5029 last close. It covers all possible processings. There is one exception, if
5030 "option logasap" was specified, then the time counting stops at the moment
5031 the log is emitted. In this case, a '+' sign is prepended before the value,
5032 indicating that the final one will be larger. See "Timers" below for more
5033 details.
5034
5035 - "status_code" is the HTTP status code returned to the client. This status
5036 is generally set by the server, but it might also be set by haproxy when
5037 the server cannot be reached or when its response is blocked by haproxy.
5038
5039 - "bytes_read" is the total number of bytes transmitted to the client when
5040 the log is emitted. This does include HTTP headers. If "option logasap" is
5041 specified, the this value will be prefixed with a '+' sign indicating that
5042 the final one may be larger. Please note that this value is a 64-bit
5043 counter, so log analysis tools must be able to handle it without
5044 overflowing.
5045
5046 - "captured_request_cookie" is an optional "name=value" entry indicating that
5047 the client had this cookie in the request. The cookie name and its maximum
5048 length are defined by the "capture cookie" statement in the frontend
5049 configuration. The field is a single dash ('-') when the option is not
5050 set. Only one cookie may be captured, it is generally used to track session
5051 ID exchanges between a client and a server to detect session crossing
5052 between clients due to application bugs. For more details, please consult
5053 the section "Capturing HTTP headers and cookies" below.
5054
5055 - "captured_response_cookie" is an optional "name=value" entry indicating
5056 that the server has returned a cookie with its response. The cookie name
5057 and its maximum length are defined by the "capture cookie" statement in the
5058 frontend configuration. The field is a single dash ('-') when the option is
5059 not set. Only one cookie may be captured, it is generally used to track
5060 session ID exchanges between a client and a server to detect session
5061 crossing between clients due to application bugs. For more details, please
5062 consult the section "Capturing HTTP headers and cookies" below.
5063
5064 - "termination_state" is the condition the session was in when the session
5065 ended. This indicates the session state, which side caused the end of
5066 session to happen, for what reason (timeout, error, ...), just like in TCP
5067 logs, and information about persistence operations on cookies in the last
5068 two characters. The normal flags should begin with "--", indicating the
5069 session was closed by either end with no data remaining in buffers. See
5070 below "Session state at disconnection" for more details.
5071
5072 - "actconn" is the total number of concurrent connections on the process when
5073 the session was logged. It it useful to detect when some per-process system
5074 limits have been reached. For instance, if actconn is close to 512 or 1024
5075 when multiple connection errors occur, chances are high that the system
5076 limits the process to use a maximum of 1024 file descriptors and that all
5077 of them are used. See section 1 "Global parameters" to find how to tune the
5078 system.
5079
5080 - "feconn" is the total number of concurrent connections on the frontend when
5081 the session was logged. It is useful to estimate the amount of resource
5082 required to sustain high loads, and to detect when the frontend's "maxconn"
5083 has been reached. Most often when this value increases by huge jumps, it is
5084 because there is congestion on the backend servers, but sometimes it can be
5085 caused by a denial of service attack.
5086
5087 - "beconn" is the total number of concurrent connections handled by the
5088 backend when the session was logged. It includes the total number of
5089 concurrent connections active on servers as well as the number of
5090 connections pending in queues. It is useful to estimate the amount of
5091 additional servers needed to support high loads for a given application.
5092 Most often when this value increases by huge jumps, it is because there is
5093 congestion on the backend servers, but sometimes it can be caused by a
5094 denial of service attack.
5095
5096 - "srv_conn" is the total number of concurrent connections still active on
5097 the server when the session was logged. It can never exceed the server's
5098 configured "maxconn" parameter. If this value is very often close or equal
5099 to the server's "maxconn", it means that traffic regulation is involved a
5100 lot, meaning that either the server's maxconn value is too low, or that
5101 there aren't enough servers to process the load with an optimal response
5102 time. When only one of the server's "srv_conn" is high, it usually means
5103 that this server has some trouble causing the requests to take longer to be
5104 processed than on other servers.
5105
5106 - "retries" is the number of connection retries experienced by this session
5107 when trying to connect to the server. It must normally be zero, unless a
5108 server is being stopped at the same moment the connection was attempted.
5109 Frequent retries generally indicate either a network problem between
5110 haproxy and the server, or a misconfigured system backlog on the server
5111 preventing new connections from being queued. This field may optionally be
5112 prefixed with a '+' sign, indicating that the session has experienced a
5113 redispatch after the maximal retry count has been reached on the initial
5114 server. In this case, the server name appearing in the log is the one the
5115 connection was redispatched to, and not the first one, though both may
5116 sometimes be the same in case of hashing for instance. So as a general rule
5117 of thumb, when a '+' is present in front of the retry count, this count
5118 should not be attributed to the logged server.
5119
5120 - "srv_queue" is the total number of requests which were processed before
5121 this one in the server queue. It is zero when the request has not gone
5122 through the server queue. It makes it possible to estimate the approximate
5123 server's response time by dividing the time spent in queue by the number of
5124 requests in the queue. It is worth noting that if a session experiences a
5125 redispatch and passes through two server queues, their positions will be
5126 cumulated. A request should not pass through both the server queue and the
5127 backend queue unless a redispatch occurs.
5128
5129 - "backend_queue" is the total number of requests which were processed before
5130 this one in the backend's global queue. It is zero when the request has not
5131 gone through the global queue. It makes it possible to estimate the average
5132 queue length, which easily translates into a number of missing servers when
5133 divided by a server's "maxconn" parameter. It is worth noting that if a
5134 session experiences a redispatch, it may pass twice in the backend's queue,
5135 and then both positions will be cumulated. A request should not pass
5136 through both the server queue and the backend queue unless a redispatch
5137 occurs.
5138
5139 - "captured_request_headers" is a list of headers captured in the request due
5140 to the presence of the "capture request header" statement in the frontend.
5141 Multiple headers can be captured, they will be delimited by a vertical bar
5142 ('|'). When no capture is enabled, the braces do not appear, causing a
5143 shift of remaining fields. It is important to note that this field may
5144 contain spaces, and that using it requires a smarter log parser than when
5145 it's not used. Please consult the section "Capturing HTTP headers and
5146 cookies" below for more details.
5147
5148 - "captured_response_headers" is a list of headers captured in the response
5149 due to the presence of the "capture response header" statement in the
5150 frontend. Multiple headers can be captured, they will be delimited by a
5151 vertical bar ('|'). When no capture is enabled, the braces do not appear,
5152 causing a shift of remaining fields. It is important to note that this
5153 field may contain spaces, and that using it requires a smarter log parser
5154 than when it's not used. Please consult the section "Capturing HTTP headers
5155 and cookies" below for more details.
5156
5157 - "http_request" is the complete HTTP request line, including the method,
5158 request and HTTP version string. Non-printable characters are encoded (see
5159 below the section "Non-printable characters"). This is always the last
5160 field, and it is always delimited by quotes and is the only one which can
5161 contain quotes. If new fields are added to the log format, they will be
5162 added before this field. This field might be truncated if the request is
5163 huge and does not fit in the standard syslog buffer (1024 characters). This
5164 is the reason why this field must always remain the last one.
5165
5166
51672.6.3) Advanced logging options
5168-------------------------------
5169
5170Some advanced logging options are often looked for but are not easy to find out
5171just by looking at the various options. Here is an entry point for the few
5172options which can enable better logging. Please refer to the keywords reference
5173for more information about their usage.
5174
5175
51762.6.3.1) Disabling logging of external tests
5177--------------------------------------------
5178
5179It is quite common to have some monitoring tools perform health checks on
5180haproxy. Sometimes it will be a layer 3 load-balancer such as LVS or any
5181commercial load-balancer, and sometimes it will simply be a more complete
5182monitoring system such as Nagios. When the tests are very frequent, users often
5183ask how to disable logging for those checks. There are three possibilities :
5184
5185 - if connections come from everywhere and are just TCP probes, it is often
5186 desired to simply disable logging of connections without data exchange, by
5187 setting "option dontlognull" in the frontend. It also disables logging of
5188 port scans, which may or may not be desired.
5189
5190 - if the connection come from a known source network, use "monitor-net" to
5191 declare this network as monitoring only. Any host in this network will then
5192 only be able to perform health checks, and their requests will not be
5193 logged. This is generally appropriate to designate a list of equipments
5194 such as other load-balancers.
5195
5196 - if the tests are performed on a known URI, use "monitor-uri" to declare
5197 this URI as dedicated to monitoring. Any host sending this request will
5198 only get the result of a health-check, and the request will not be logged.
5199
5200
52012.6.3.2) Logging before waiting for the session to terminate
5202------------------------------------------------------------
5203
5204The problem with logging at end of connection is that you have no clue about
5205what is happening during very long sessions, such as remote terminal sessions
5206or large file downloads. This problem can be worked around by specifying
5207"option logasap" in the frontend. Haproxy will then log as soon as possible,
5208just before data transfer begins. This means that in case of TCP, it will still
5209log the connection status to the server, and in case of HTTP, it will log just
5210after processing the server headers. In this case, the number of bytes reported
5211is the number of header bytes sent to the client. In order to avoid confusion
5212with normal logs, the total time field and the number of bytes are prefixed
5213with a '+' sign which means that real numbers are certainly larger.
5214
5215
52162.6.4) Timing events
5217--------------------
5218
5219Timers provide a great help in troubleshooting network problems. All values are
5220reported in milliseconds (ms). These timers should be used in conjunction with
5221the session termination flags. In TCP mode with "option tcplog" set on the
5222frontend, 3 control points are reported under the form "Tw/Tc/Tt", and in HTTP
5223mode, 5 control points are reported under the form "Tq/Tw/Tc/Tr/Tt" :
5224
5225 - Tq: total time to get the client request (HTTP mode only). It's the time
5226 elapsed between the moment the client connection was accepted and the
5227 moment the proxy received the last HTTP header. The value "-1" indicates
5228 that the end of headers (empty line) has never been seen. This happens when
5229 the client closes prematurely or times out.
5230
5231 - Tw: total time spent in the queues waiting for a connection slot. It
5232 accounts for backend queue as well as the server queues, and depends on the
5233 queue size, and the time needed for the server to complete previous
5234 requests. The value "-1" means that the request was killed before reaching
5235 the queue, which is generally what happens with invalid or denied requests.
5236
5237 - Tc: total time to establish the TCP connection to the server. It's the time
5238 elapsed between the moment the proxy sent the connection request, and the
5239 moment it was acknowledged by the server, or between the TCP SYN packet and
5240 the matching SYN/ACK packet in return. The value "-1" means that the
5241 connection never established.
5242
5243 - Tr: server response time (HTTP mode only). It's the time elapsed between
5244 the moment the TCP connection was established to the server and the moment
5245 the server sent its complete response headers. It purely shows its request
5246 processing time, without the network overhead due to the data transmission.
5247 It is worth noting that when the client has data to send to the server, for
5248 instance during a POST request, the time already runs, and this can distort
5249 apparent response time. For this reason, it's generally wise not to trust
5250 too much this field for POST requests initiated from clients behind an
5251 untrusted network. A value of "-1" here means that the last the response
5252 header (empty line) was never seen, most likely because the server timeout
5253 stroke before the server managed to process the request.
5254
5255 - Tt: total session duration time, between the moment the proxy accepted it
5256 and the moment both ends were closed. The exception is when the "logasap"
5257 option is specified. In this case, it only equals (Tq+Tw+Tc+Tr), and is
5258 prefixed with a '+' sign. From this field, we can deduce "Td", the data
5259 transmission time, by substracting other timers when valid :
5260
5261 Td = Tt - (Tq + Tw + Tc + Tr)
5262
5263 Timers with "-1" values have to be excluded from this equation. In TCP
5264 mode, "Tq" and "Tr" have to be excluded too. Note that "Tt" can never be
5265 negative.
5266
5267These timers provide precious indications on trouble causes. Since the TCP
5268protocol defines retransmit delays of 3, 6, 12... seconds, we know for sure
5269that timers close to multiples of 3s are nearly always related to lost packets
5270due to network problems (wires, negociation, congestion). Moreover, if "Tt" is
5271close to a timeout value specified in the configuration, it often means that a
5272session has been aborted on timeout.
5273
5274Most common cases :
5275
5276 - If "Tq" is close to 3000, a packet has probably been lost between the
5277 client and the proxy. This is very rare on local networks but might happen
5278 when clients are on far remote networks and send large requests. It may
5279 happen that values larger than usual appear here without any network cause.
5280 Sometimes, during an attack or just after a resource starvation has ended,
5281 haproxy may accept thousands of connections in a few milliseconds. The time
5282 spent accepting these connections will inevitably slightly delay processing
5283 of other connections, and it can happen that request times in the order of
5284 a few tens of milliseconds are measured after a few thousands of new
5285 connections have been accepted at once.
5286
5287 - If "Tc" is close to 3000, a packet has probably been lost between the
5288 server and the proxy during the server connection phase. This value should
5289 always be very low, such as 1 ms on local networks and less than a few tens
5290 of ms on remote networks.
5291
5292 - If "Tr" is nearly always lower than 3000 except some rare values which seem to
5293 be the average majored by 3000, there are probably some packets lost between
5294 the proxy and the server.
5295
5296 - If "Tt" is large even for small byte counts, it generally is because
5297 neither the client nor the server decides to close the connection, for
5298 instance because both have agreed on a keep-alive connection mode. In order
5299 to solve this issue, it will be needed to specify "option httpclose" on
5300 either the frontend or the backend. If the problem persists, it means that
5301 the server ignores the "close" connection mode and expects the client to
5302 close. Then it will be required to use "option forceclose". Having the
5303 smallest possible 'Tt' is important when connection regulation is used with
5304 the "maxconn" option on the servers, since no new connection will be sent
5305 to the server until another one is released.
5306
5307Other noticeable HTTP log cases ('xx' means any value to be ignored) :
5308
5309 Tq/Tw/Tc/Tr/+Tt The "option logasap" is present on the frontend and the log
5310 was emitted before the data phase. All the timers are valid
5311 except "Tt" which is shorter than reality.
5312
5313 -1/xx/xx/xx/Tt The client was not able to send a complete request in time
5314 or it aborted too early. Check the session termination flags
5315 then "timeout http-request" and "timeout client" settings.
5316
5317 Tq/-1/xx/xx/Tt It was not possible to process the request, maybe because
5318 servers were out of order, because the request was invalid
5319 or forbidden by ACL rules. Check the session termination
5320 flags.
5321
5322 Tq/Tw/-1/xx/Tt The connection could not establish on the server. Either it
5323 actively refused it or it timed out after Tt-(Tq+Tw) ms.
5324 Check the session termination flags, then check the
5325 "timeout connect" setting. Note that the tarpit action might
5326 return similar-looking patterns, with "Tw" equal to the time
5327 the client connection was maintained open.
5328
5329 Tq/Tw/Tc/-1/Tt The server has accepted the connection but did not return
5330 a complete response in time, or it closed its connexion
5331 unexpectedly after Tt-(Tq+Tw+Tc) ms. Check the session
5332 termination flags, then check the "timeout server" setting.
5333
5334
53352.6.5) Session state at disconnection
5336-------------------------------------
5337
5338TCP and HTTP logs provide a session termination indicator in the
5339"termination_state" field, just before the number of active connections. It is
53402-characters long in TCP mode, and is extended to 4 characters in HTTP mode,
5341each of which has a special meaning :
5342
5343 - On the first character, a code reporting the first event which caused the
5344 session to terminate :
5345
5346 C : the TCP session was unexpectedly aborted by the client.
5347
5348 S : the TCP session was unexpectedly aborted by the server, or the
5349 server explicitly refused it.
5350
5351 P : the session was prematurely aborted by the proxy, because of a
5352 connection limit enforcement, because a DENY filter was matched,
5353 because of a security check which detected and blocked a dangerous
5354 error in server response which might have caused information leak
5355 (eg: cacheable cookie), or because the response was processed by
5356 the proxy (redirect, stats, etc...).
5357
5358 R : a resource on the proxy has been exhausted (memory, sockets, source
5359 ports, ...). Usually, this appears during the connection phase, and
5360 system logs should contain a copy of the precise error. If this
5361 happens, it must be considered as a very serious anomaly which
5362 should be fixed as soon as possible by any means.
5363
5364 I : an internal error was identified by the proxy during a self-check.
5365 This should NEVER happen, and you are encouraged to report any log
5366 containing this, because this would almost certainly be a bug. It
5367 would be wise to preventively restart the process after such an
5368 event too, in case it would be caused by memory corruption.
5369
5370 c : the client-side timeout expired while waiting for the client to
5371 send or receive data.
5372
5373 s : the server-side timeout expired while waiting for the server to
5374 send or receive data.
5375
5376 - : normal session completion, both the client and the server closed
5377 with nothing left in the buffers.
5378
5379 - on the second character, the TCP or HTTP session state when it was closed :
5380
5381 R : th proxy was waiting for a complete, valid REQUEST from the client
5382 (HTTP mode only). Nothing was sent to any server.
5383
5384 Q : the proxy was waiting in the QUEUE for a connection slot. This can
5385 only happen when servers have a 'maxconn' parameter set. It can
5386 also happen in the global queue after a redispatch consecutive to
5387 a failed attempt to connect to a dying server. If no redispatch is
5388 reported, then no connection attempt was made to any server.
5389
5390 C : the proxy was waiting for the CONNECTION to establish on the
5391 server. The server might at most have noticed a connection attempt.
5392
5393 H : the proxy was waiting for complete, valid response HEADERS from the
5394 server (HTTP only).
5395
5396 D : the session was in the DATA phase.
5397
5398 L : the proxy was still transmitting LAST data to the client while the
5399 server had already finished. This one is very rare as it can only
5400 happen when the client dies while receiving the last packets.
5401
5402 T : the request was tarpitted. It has been held open with the client
5403 during the whole "timeout tarpit" duration or until the client
5404 closed, both of which will be reported in the "Tw" timer.
5405
5406 - : normal session completion after end of data transfer.
5407
5408 - the third character tells whether the persistence cookie was provided by
5409 the client (only in HTTP mode) :
5410
5411 N : the client provided NO cookie. This is usually the case for new
5412 visitors, so counting the number of occurrences of this flag in the
5413 logs generally indicate a valid trend for the site frequentation.
5414
5415 I : the client provided an INVALID cookie matching no known server.
5416 This might be caused by a recent configuration change, mixed
5417 cookies between HTTP/HTTPS sites, or an attack.
5418
5419 D : the client provided a cookie designating a server which was DOWN,
5420 so either "option persist" was used and the client was sent to
5421 this server, or it was not set and the client was redispatched to
5422 another server.
5423
5424 V : the client provided a valid cookie, and was sent to the associated
5425 server.
5426
5427 - : does not apply (no cookie set in configuration).
5428
5429 - the last character reports what operations were performed on the persistence
5430 cookie returned by the server (only in HTTP mode) :
5431
5432 N : NO cookie was provided by the server, and none was inserted either.
5433
5434 I : no cookie was provided by the server, and the proxy INSERTED one.
5435 Note that in "cookie insert" mode, if the server provides a cookie,
5436 it will still be overwritten and reported as "I" here.
5437
5438 P : a cookie was PROVIDED by the server and transmitted as-is.
5439
5440 R : the cookie provided by the server was REWRITTEN by the proxy, which
5441 happens in "cookie rewrite" or "cookie prefix" modes.
5442
5443 D : the cookie provided by the server was DELETED by the proxy.
5444
5445 - : does not apply (no cookie set in configuration).
5446
5447The combination of the two first flags give a lot of information about what was
5448happening when the session terminated, and why it did terminate. It can be
5449helpful to detect server saturation, network troubles, local system resource
5450starvation, attacks, etc...
5451
5452The most common termination flags combinations are indicated below. They are
5453alphabetically sorted, with the lowercase set just after the upper case for
5454easier finding and understanding.
5455
5456 Flags Reason
5457
5458 -- Normal termination.
5459
5460 CC The client aborted before the connection could be established to the
5461 server. This can happen when haproxy tries to connect to a recently
5462 dead (or unchecked) server, and the client aborts while haproxy is
5463 waiting for the server to respond or for "timeout connect" to expire.
5464
5465 CD The client unexpectedly aborted during data transfer. This can be
5466 caused by a browser crash, by an intermediate equipment between the
5467 client and haproxy which decided to actively break the connection,
5468 by network routing issues between the client and haproxy, or by a
5469 keep-alive session between the server and the client terminated first
5470 by the client.
5471
5472 cD The client did not send nor acknowledge any data for as long as the
5473 "timeout client" delay. This is often caused by network failures on
5474 the client side, or the client simply leaving the net uncleanly.
5475
5476 CH The client aborted while waiting for the server to start responding.
5477 It might be the server taking too long to respond or the client
5478 clicking the 'Stop' button too fast.
5479
5480 cH The "timeout client" stroke while waiting for client data during a
5481 POST request. This is sometimes caused by too large TCP MSS values
5482 for PPPoE networks which cannot transport full-sized packets. It can
5483 also happen when client timeout is smaller than server timeout and
5484 the server takes too long to respond.
5485
5486 CQ The client aborted while its session was queued, waiting for a server
5487 with enough empty slots to accept it. It might be that either all the
5488 servers were saturated or that the assigned server was taking too
5489 long a time to respond.
5490
5491 CR The client aborted before sending a full HTTP request. Most likely
5492 the request was typed by hand using a telnet client, and aborted
5493 too early. The HTTP status code is likely a 400 here. Sometimes this
5494 might also be caused by an IDS killing the connection between haproxy
5495 and the client.
5496
5497 cR The "timeout http-request" stroke before the client sent a full HTTP
5498 request. This is sometimes caused by too large TCP MSS values on the
5499 client side for PPPoE networks which cannot transport full-sized
5500 packets, or by clients sending requests by hand and not typing fast
5501 enough, or forgetting to enter the empty line at the end of the
5502 request. The HTTP status code is likely a 408 here.
5503
5504 CT The client aborted while its session was tarpitted. It is important to
5505 check if this happens on valid requests, in order to be sure that no
5506 wrong tarpit rules have been written. If a lot of them happen, it might
5507 make sense to lower the "timeout tarpit" value to something closer to
5508 the average reported "Tw" timer, in order not to consume resources for
5509 just a few attackers.
5510
5511 SC The server or an equipement between it and haproxy explicitly refused
5512 the TCP connection (the proxy received a TCP RST or an ICMP message
5513 in return). Under some circumstances, it can also be the network
5514 stack telling the proxy that the server is unreachable (eg: no route,
5515 or no ARP response on local network). When this happens in HTTP mode,
5516 the status code is likely a 502 or 503 here.
5517
5518 sC The "timeout connect" stroke before a connection to the server could
5519 complete. When this happens in HTTP mode, the status code is likely a
5520 503 or 504 here.
5521
5522 SD The connection to the server died with an error during the data
5523 transfer. This usually means that haproxy has received an RST from
5524 the server or an ICMP message from an intermediate equipment while
5525 exchanging data with the server. This can be caused by a server crash
5526 or by a network issue on an intermediate equipment.
5527
5528 sD The server did not send nor acknowledge any data for as long as the
5529 "timeout server" setting during the data phase. This is often caused
5530 by too short timeouts on L4 equipements before the server (firewalls,
5531 load-balancers, ...), as well as keep-alive sessions maintained
5532 between the client and the server expiring first on haproxy.
5533
5534 SH The server aborted before sending its full HTTP response headers, or
5535 it crashed while processing the request. Since a server aborting at
5536 this moment is very rare, it would be wise to inspect its logs to
5537 control whether it crashed and why. The logged request may indicate a
5538 small set of faulty requests, demonstrating bugs in the application.
5539 Sometimes this might also be caused by an IDS killing the connection
5540 between haproxy and the server.
5541
5542 sH The "timeout server" stroke before the server could return its
5543 response headers. This is the most common anomaly, indicating too
5544 long transactions, probably caused by server or database saturation.
5545 The immediate workaround consists in increasing the "timeout server"
5546 setting, but it is important to keep in mind that the user experience
5547 will suffer from these long response times. The only long term
5548 solution is to fix the application.
5549
5550 sQ The session spent too much time in queue and has been expired. See
5551 the "timeout queue" and "timeout connect" settings to find out how to
5552 fix this if it happens too often. If it often happens massively in
5553 short periods, it may indicate general problems on the affected
5554 servers due to I/O or database congestion, or saturation caused by
5555 external attacks.
5556
5557 PC The proxy refused to establish a connection to the server because the
5558 process' socket limit has been reached while attempting to connect.
5559 The global "maxconn" parameter may be increased in the configuration
5560 so that it does not happen anymore. This status is very rare and
5561 might happen when the global "ulimit-n" parameter is forced by hand.
5562
5563 PH The proxy blocked the server's response, because it was invalid,
5564 incomplete, dangerous (cache control), or matched a security filter.
5565 In any case, an HTTP 502 error is sent to the client. One possible
5566 cause for this error is an invalid syntax in an HTTP header name
5567 containing unauthorized characters.
5568
5569 PR The proxy blocked the client's HTTP request, either because of an
5570 invalid HTTP syntax, in which case it returned an HTTP 400 error to
5571 the client, or because a deny filter matched, in which case it
5572 returned an HTTP 403 error.
5573
5574 PT The proxy blocked the client's request and has tarpitted its
5575 connection before returning it a 500 server error. Nothing was sent
5576 to the server. The connection was maintained open for as long as
5577 reported by the "Tw" timer field.
5578
5579 RC A local resource has been exhausted (memory, sockets, source ports)
5580 preventing the connection to the server from establishing. The error
5581 logs will tell precisely what was missing. This is very rare and can
5582 only be solved by proper system tuning.
5583
5584
55852.6.6) Non-printable characters
5586-------------------------------
5587
5588In order not to cause trouble to log analysis tools or terminals during log
5589consulting, non-printable characters are not sent as-is into log files, but are
5590converted to the two-digits hexadecimal representation of their ASCII code,
5591prefixed by the character '#'. The only characters that can be logged without
5592being escaped are comprised between 32 and 126 (inclusive). Obviously, the
5593escape character '#' itself is also encoded to avoid any ambiguity ("#23"). It
5594is the same for the character '"' which becomes "#22", as well as '{', '|' and
5595'}' when logging headers.
5596
5597Note that the space character (' ') is not encoded in headers, which can cause
5598issues for tools relying on space count to locate fields. A typical header
5599containing spaces is "User-Agent".
5600
5601Last, it has been observed that some syslog daemons such as syslog-ng escape
5602the quote ('"') with a backslash ('\'). The reverse operation can safely be
5603performed since no quote may appear anywhere else in the logs.
5604
5605
56062.6.7) Capturing HTTP cookies
5607-----------------------------
5608
5609Cookie capture simplifies the tracking a complete user session. This can be
5610achieved using the "capture cookie" statement in the frontend. Please refer to
5611section 2.2 for more details. Only one cookie can be captured, and the same
5612cookie will simultaneously be checked in the request ("Cookie:" header) and in
5613the response ("Set-Cookie:" header). The respective values will be reported in
5614the HTTP logs at the "captured_request_cookie" and "captured_response_cookie"
5615locations (see section 2.6.2.3 about HTTP log format). When either cookie is
5616not seen, a dash ('-') replaces the value. This way, it's easy to detect when a
5617user switches to a new session for example, because the server will reassign it
5618a new cookie. It is also possible to detect if a server unexpectedly sets a
5619wrong cookie to a client, leading to session crossing.
5620
5621 Examples :
5622 # capture the first cookie whose name starts with "ASPSESSION"
5623 capture cookie ASPSESSION len 32
5624
5625 # capture the first cookie whose name is exactly "vgnvisitor"
5626 capture cookie vgnvisitor= len 32
5627
5628
56292.6.8) Capturing HTTP headers
5630-----------------------------
5631
5632Header captures are useful to track unique request identifiers set by an upper
5633proxy, virtual host names, user-agents, POST content-length, referrers, etc. In
5634the response, one can search for information about the response length, how the
5635server asked the cache to behave, or an object location during a redirection.
5636
5637Header captures are performed using the "capture request header" and "capture
5638response header" statements in the frontend. Please consult their definition in
5639section 2.2 for more details.
5640
5641It is possible to include both request headers and response headers at the same
5642time. Non-existant headers are logged as empty strings, and if one header
5643appears more than once, only its last occurence will be logged. Request headers
5644are grouped within braces '{' and '}' in the same order as they were declared,
5645and delimited with a vertical bar '|' without any space. Response headers
5646follow the same representation, but are displayed after a space following the
5647request headers block. These blocks are displayed just before the HTTP request
5648in the logs.
5649
5650 Example :
5651 # This instance chains to the outgoing proxy
5652 listen proxy-out
5653 mode http
5654 option httplog
5655 option logasap
5656 log global
5657 server cache1 192.168.1.1:3128
5658
5659 # log the name of the virtual server
5660 capture request header Host len 20
5661
5662 # log the amount of data uploaded during a POST
5663 capture request header Content-Length len 10
5664
5665 # log the beginning of the referrer
5666 capture request header Referer len 20
5667
5668 # server name (useful for outgoing proxies only)
5669 capture response header Server len 20
5670
5671 # logging the content-length is useful with "option logasap"
5672 capture response header Content-Length len 10
5673
5674 # log the expected cache behaviour on the response
5675 capture response header Cache-Control len 8
5676
5677 # the Via header will report the next proxy's name
5678 capture response header Via len 20
5679
5680 # log the URL location during a redirection
5681 capture response header Location len 20
5682
5683 >>> Aug 9 20:26:09 localhost \
5684 haproxy[2022]: 127.0.0.1:34014 [09/Aug/2004:20:26:09] proxy-out \
5685 proxy-out/cache1 0/0/0/162/+162 200 +350 - - ---- 0/0/0/0/0 0/0 \
5686 {fr.adserver.yahoo.co||http://fr.f416.mail.} {|864|private||} \
5687 "GET http://fr.adserver.yahoo.com/"
5688
5689 >>> Aug 9 20:30:46 localhost \
5690 haproxy[2022]: 127.0.0.1:34020 [09/Aug/2004:20:30:46] proxy-out \
5691 proxy-out/cache1 0/0/0/182/+182 200 +279 - - ---- 0/0/0/0/0 0/0 \
5692 {w.ods.org||} {Formilux/0.1.8|3495|||} \
5693 "GET http://trafic.1wt.eu/ HTTP/1.1"
5694
5695 >>> Aug 9 20:30:46 localhost \
5696 haproxy[2022]: 127.0.0.1:34028 [09/Aug/2004:20:30:46] proxy-out \
5697 proxy-out/cache1 0/0/2/126/+128 301 +223 - - ---- 0/0/0/0/0 0/0 \
5698 {www.sytadin.equipement.gouv.fr||http://trafic.1wt.eu/} \
5699 {Apache|230|||http://www.sytadin.} \
5700 "GET http://www.sytadin.equipement.gouv.fr/ HTTP/1.1"
5701
5702
57032.6.9) Examples of logs
5704-----------------------
5705
5706These are real-world examples of logs accompanied with an explanation. Some of
5707them have been made up by hand. The syslog part has been removed for better
5708reading. Their sole purpose is to explain how to decipher them.
5709
5710 >>> haproxy[674]: 127.0.0.1:33318 [15/Oct/2003:08:31:57.130] px-http \
5711 px-http/srv1 6559/0/7/147/6723 200 243 - - ---- 5/3/3/1/0 0/0 \
5712 "HEAD / HTTP/1.0"
5713
5714 => long request (6.5s) entered by hand through 'telnet'. The server replied
5715 in 147 ms, and the session ended normally ('----')
5716
5717 >>> haproxy[674]: 127.0.0.1:33319 [15/Oct/2003:08:31:57.149] px-http \
5718 px-http/srv1 6559/1230/7/147/6870 200 243 - - ---- 324/239/239/99/0 \
5719 0/9 "HEAD / HTTP/1.0"
5720
5721 => Idem, but the request was queued in the global queue behind 9 other
5722 requests, and waited there for 1230 ms.
5723
5724 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.654] px-http \
5725 px-http/srv1 9/0/7/14/+30 200 +243 - - ---- 3/3/3/1/0 0/0 \
5726 "GET /image.iso HTTP/1.0"
5727
5728 => request for a long data transfer. The "logasap" option was specified, so
5729 the log was produced just before transfering data. The server replied in
5730 14 ms, 243 bytes of headers were sent to the client, and total time from
5731 accept to first data byte is 30 ms.
5732
5733 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.925] px-http \
5734 px-http/srv1 9/0/7/14/30 502 243 - - PH-- 3/2/2/0/0 0/0 \
5735 "GET /cgi-bin/bug.cgi? HTTP/1.0"
5736
5737 => the proxy blocked a server response either because of an "rspdeny" or
5738 "rspideny" filter, or because the response was improperly formatted and
5739 not HTTP-compliant, or because it blocked sensible information which
5740 risked being cached. In this case, the response is replaced with a "502
5741 bad gateway". The flags ("PH--") tell us that it was haproxy who decided
5742 to return the 502 and not the server.
5743
5744 >>> haproxy[18113]: 127.0.0.1:34548 [15/Oct/2003:15:18:55.798] px-http \
5745 px-http/<NOSRV> -1/-1/-1/-1/8490 -1 0 - - CR-- 2/2/2/0/0 0/0 ""
5746
5747 => the client never completed its request and aborted itself ("C---") after
5748 8.5s, while the proxy was waiting for the request headers ("-R--").
5749 Nothing was sent to any server.
5750
5751 >>> haproxy[18113]: 127.0.0.1:34549 [15/Oct/2003:15:19:06.103] px-http \
5752 px-http/<NOSRV> -1/-1/-1/-1/50001 408 0 - - cR-- 2/2/2/0/0 0/0 ""
5753
5754 => The client never completed its request, which was aborted by the
5755 time-out ("c---") after 50s, while the proxy was waiting for the request
5756 headers ("-R--"). Nothing was sent to any server, but the proxy could
5757 send a 408 return code to the client.
5758
5759 >>> haproxy[18989]: 127.0.0.1:34550 [15/Oct/2003:15:24:28.312] px-tcp \
5760 px-tcp/srv1 0/0/5007 0 cD 0/0/0/0/0 0/0
5761
5762 => This log was produced with "option tcplog". The client timed out after
5763 5 seconds ("c----").
5764
5765 >>> haproxy[18989]: 10.0.0.1:34552 [15/Oct/2003:15:26:31.462] px-http \
5766 px-http/srv1 3183/-1/-1/-1/11215 503 0 - - SC-- 205/202/202/115/3 \
5767 0/0 "HEAD / HTTP/1.0"
5768
5769 => The request took 3s to complete (probably a network problem), and the
5770 connection to the server failed ('SC--') after 4 attemps of 2 seconds
5771 (config says 'retries 3'), and no redispatch (otherwise we would have
5772 seen "/+3"). Status code 503 was returned to the client. There were 115
5773 connections on this server, 202 connections on this proxy, and 205 on
5774 the global process. It is possible that the server refused the
5775 connection because of too many already established.
Willy Tarreau844e3c52008-01-11 16:28:18 +01005776
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +01005777
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +010057782.7) CSV format
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +01005779---------------
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01005780
5781 0. pxname: proxy name
5782 1. svname: service name (FRONTEND for frontend, BACKEND for backend, any name
5783 for server)
5784 2. qcur: current queued requests
5785 3. qmax: max queued requests
5786 4. scur: current sessions
5787 5. smax: max sessions
5788 6. slim: sessions limit
5789 7. stot: total sessions
5790 8. bin: bytes in
5791 9. bout: bytes out
5792 10. dreq: denied requests
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +01005793 11. dresp: denied responses
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01005794 12. ereq: request errors
5795 13. econ: connection errors
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +01005796 14. eresp: response errors
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01005797 15. wretr: retries (warning)
5798 16. wredis: redispatches (warning)
5799 17. status: status (UP/DOWN/...)
5800 18. weight: server weight (server), total weight (backend)
5801 19. act: server is active (server), number of active servers (backend)
5802 20. bck: server is backup (server), number of backup servers (backend)
5803 21. chkfail: number of failed checks
5804 22. chkdown: number of UP->DOWN transitions
5805 23. lastchg: last status change (in seconds)
5806 24. downtime: total downtime (in seconds)
5807 25. qlimit: queue limit
5808 26. pid: process id (0 for first instance, 1 for second, ...)
5809 27. iid: unique proxy id
5810 28. sid: service id (unique inside a proxy)
5811 29. throttle: warm up status
5812 30. lbtot: total number of times a server was selected
5813 31. tracked: id of proxy/server if tracking is enabled
5814 32. type (0=frontend, 1=backend, 2=server)
Willy Tarreau844e3c52008-01-11 16:28:18 +01005815
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +01005816
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +010058172.8) Unix Socket commands
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +01005818-------------------------
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +01005819
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +01005820The following commands are supported on the UNIX stats socket ; all of them
5821must be terminated by a line feed. It is important to understand that when
5822multiple haproxy processes are started on the same sockets, any process may
5823pick up the request and will output its own stats.
5824
5825show stat [<iid> <type> <sid>]
5826 Dump statistics in the CSV format. By passing <id>, <type> and <sid>, it is
5827 possible to dump only selected items :
5828 - <iid> is a proxy ID, -1 to dump everything
5829 - <type> selects the type of dumpable objects : 1 for frontends, 2 for
5830 backends, 4 for servers, -1 for everything. These values can be ORed,
5831 for example:
5832 1 + 2 = 3 -> frontend + backend.
5833 1 + 2 + 4 = 7 -> frontend + backend + server.
5834 - <sid> is a server ID, -1 to dump everything from the selected proxy.
5835
5836show info
5837 Dump info about haproxy status on current process.
5838
5839show sess
5840 Dump all known sessions. Avoid doing this on slow connections as this can
5841 be huge.
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +01005842
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +01005843
Willy Tarreau0ba27502007-12-24 16:55:16 +01005844/*
5845 * Local variables:
5846 * fill-column: 79
5847 * End:
5848 */