blob: 7073a0266e4308edc24eacbf329524e6567f58ec [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 Tarreau41a340d2008-01-22 12:25:31 +01007 2008/01/22
Willy Tarreau6a06a402007-07-15 20:15:28 +02008
9
10This document covers the configuration language as implemented in the version
11specified above. It does not provide any hint, example or advice. For such
Willy Tarreau0ba27502007-12-24 16:55:16 +010012documentation, please refer to the Reference Manual or the Architecture Manual.
Willy 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
71 - noepoll
72 - nokqueue
73 - nopoll
74 - nosepoll
Willy Tarreaufe255b72007-10-14 23:09:26 +020075 - spread-checks
Willy Tarreaua0250ba2008-01-06 11:22:57 +010076 - tune.maxaccept
77 - tune.maxpollevents
Willy Tarreau6a06a402007-07-15 20:15:28 +020078
79 * Debugging
80 - debug
81 - quiet
Willy Tarreau6a06a402007-07-15 20:15:28 +020082
83
841.1) Process management and security
85------------------------------------
86
87chroot <jail dir>
88 Changes current directory to <jail dir> and performs a chroot() there before
89 dropping privileges. This increases the security level in case an unknown
90 vulnerability would be exploited, since it would make it very hard for the
91 attacker to exploit the system. This only works when the process is started
92 with superuser privileges. It is important to ensure that <jail_dir> is both
93 empty and unwritable to anyone.
94
95daemon
96 Makes the process fork into background. This is the recommended mode of
97 operation. It is equivalent to the command line "-D" argument. It can be
98 disabled by the command line "-db" argument.
99
100gid <number>
101 Changes the process' group ID to <number>. It is recommended that the group
102 ID is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
103 be started with a user belonging to this group, or with superuser privileges.
104 See also "group" and "uid".
105
106group <group name>
107 Similar to "gid" but uses the GID of group name <group name> from /etc/group.
108 See also "gid" and "user".
109
110log <address> <facility> [max level]
111 Adds a global syslog server. Up to two global servers can be defined. They
112 will receive logs for startups and exits, as well as all logs from proxies
Robert Tsai81ae1952007-12-05 10:47:29 +0100113 configured with "log global".
114
115 <address> can be one of:
116
Willy Tarreau2769aa02007-12-27 18:26:09 +0100117 - An IPv4 address optionally followed by a colon and a UDP port. If
Robert Tsai81ae1952007-12-05 10:47:29 +0100118 no port is specified, 514 is used by default (the standard syslog
119 port).
120
121 - A filesystem path to a UNIX domain socket, keeping in mind
122 considerations for chroot (be sure the path is accessible inside
123 the chroot) and uid/gid (be sure the path is appropriately
124 writeable).
125
126 <facility> must be one of the 24 standard syslog facilities :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200127
128 kern user mail daemon auth syslog lpr news
129 uucp cron auth2 ftp ntp audit alert cron2
130 local0 local1 local2 local3 local4 local5 local6 local7
131
132 An optional level can be specified to filter outgoing messages. By default,
133 all messages are sent. If a level is specified, only messages with a severity
134 at least as important as this level will be sent. 8 levels are known :
135
136 emerg alert crit err warning notice info debug
137
138nbproc <number>
139 Creates <number> processes when going daemon. This requires the "daemon"
140 mode. By default, only one process is created, which is the recommended mode
141 of operation. For systems limited to small sets of file descriptors per
142 process, it may be needed to fork multiple daemons. USING MULTIPLE PROCESSES
143 IS HARDER TO DEBUG AND IS REALLY DISCOURAGED. See also "daemon".
144
145pidfile <pidfile>
146 Writes pids of all daemons into file <pidfile>. This option is equivalent to
147 the "-p" command line argument. The file must be accessible to the user
148 starting the process. See also "daemon".
149
Willy Tarreaufbee7132007-10-18 13:53:22 +0200150stats socket <path> [{uid | user} <uid>] [{gid | group} <gid>] [mode <mode>]
151 Creates a UNIX socket in stream mode at location <path>. Any previously
152 existing socket will be backed up then replaced. Connections to this socket
153 will get a CSV-formated output of the process statistics in response to the
Willy Tarreaua8efd362008-01-03 10:19:15 +0100154 "show stat" command followed by a line feed, and more general process
155 information in response to the "show info" command followed by a line feed.
156
157 On platforms which support it, it is possible to restrict access to this
158 socket by specifying numerical IDs after "uid" and "gid", or valid user and
159 group names after the "user" and "group" keywords. It is also possible to
160 restrict permissions on the socket by passing an octal value after the "mode"
161 keyword (same syntax as chmod). Depending on the platform, the permissions on
162 the socket will be inherited from the directory which hosts it, or from the
163 user the process is started with.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200164
165stats timeout <timeout, in milliseconds>
166 The default timeout on the stats socket is set to 10 seconds. It is possible
167 to change this value with "stats timeout". The value must be passed in
Willy Tarreaubefdff12007-12-02 22:27:38 +0100168 milliseconds, or be suffixed by a time unit among { us, ms, s, m, h, d }.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200169
170stats maxconn <connections>
171 By default, the stats socket is limited to 10 concurrent connections. It is
172 possible to change this value with "stats maxconn".
173
Willy Tarreau6a06a402007-07-15 20:15:28 +0200174uid <number>
175 Changes the process' user ID to <number>. It is recommended that the user ID
176 is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
177 be started with superuser privileges in order to be able to switch to another
178 one. See also "gid" and "user".
179
180ulimit-n <number>
181 Sets the maximum number of per-process file-descriptors to <number>. By
182 default, it is automatically computed, so it is recommended not to use this
183 option.
184
185user <user name>
186 Similar to "uid" but uses the UID of user name <user name> from /etc/passwd.
187 See also "uid" and "group".
188
189
1901.2) Performance tuning
191-----------------------
192
193maxconn <number>
194 Sets the maximum per-process number of concurrent connections to <number>. It
195 is equivalent to the command-line argument "-n". Proxies will stop accepting
196 connections when this limit is reached. The "ulimit-n" parameter is
197 automatically adjusted according to this value. See also "ulimit-n".
198
199noepoll
200 Disables the use of the "epoll" event polling system on Linux. It is
201 equivalent to the command-line argument "-de". The next polling system
202 used will generally be "poll". See also "nosepoll", and "nopoll".
203
204nokqueue
205 Disables the use of the "kqueue" event polling system on BSD. It is
206 equivalent to the command-line argument "-dk". The next polling system
207 used will generally be "poll". See also "nopoll".
208
209nopoll
210 Disables the use of the "poll" event polling system. It is equivalent to the
211 command-line argument "-dp". The next polling system used will be "select".
Willy Tarreau0ba27502007-12-24 16:55:16 +0100212 It should never be needed to disable "poll" since it's available on all
Willy Tarreau6a06a402007-07-15 20:15:28 +0200213 platforms supported by HAProxy. See also "nosepoll", and "nopoll" and
214 "nokqueue".
215
216nosepoll
217 Disables the use of the "speculative epoll" event polling system on Linux. It
218 is equivalent to the command-line argument "-ds". The next polling system
219 used will generally be "epoll". See also "nosepoll", and "nopoll".
220
Willy Tarreaufe255b72007-10-14 23:09:26 +0200221spread-checks <0..50, in percent>
222 Sometimes it is desirable to avoid sending health checks to servers at exact
223 intervals, for instance when many logical servers are located on the same
224 physical server. With the help of this parameter, it becomes possible to add
225 some randomness in the check interval between 0 and +/- 50%. A value between
226 2 and 5 seems to show good results. The default value remains at 0.
227
Willy Tarreaua0250ba2008-01-06 11:22:57 +0100228tune.maxaccept <number>
229 Sets the maximum number of consecutive accepts that a process may perform on
230 a single wake up. High values give higher priority to high connection rates,
231 while lower values give higher priority to already established connections.
232 This value is unlimited by default in single process mode. However, in
233 multi-process mode (nbproc > 1), it defaults to 8 so that when one process
234 wakes up, it does not take all incoming connections for itself and leaves a
235 part of them to other processes. Setting this value to zero or less disables
236 the limitation. It should normally not be needed to tweak this value.
237
238tune.maxpollevents <number>
239 Sets the maximum amount of events that can be processed at once in a call to
240 the polling system. The default value is adapted to the operating system. It
241 has been noticed that reducing it below 200 tends to slightly decrease
242 latency at the expense of network bandwidth, and increasing it above 200
243 tends to trade latency for slightly increased bandwidth.
244
Willy Tarreau6a06a402007-07-15 20:15:28 +0200245
2461.3) Debugging
247---------------
248
249debug
250 Enables debug mode which dumps to stdout all exchanges, and disables forking
251 into background. It is the equivalent of the command-line argument "-d". It
252 should never be used in a production configuration since it may prevent full
253 system startup.
254
255quiet
256 Do not display any message during startup. It is equivalent to the command-
257 line argument "-q".
258
Willy Tarreau6a06a402007-07-15 20:15:28 +0200259
2602) Proxies
261----------
Willy Tarreau0ba27502007-12-24 16:55:16 +0100262
Willy Tarreau6a06a402007-07-15 20:15:28 +0200263Proxy configuration can be located in a set of sections :
264 - defaults <name>
265 - frontend <name>
266 - backend <name>
267 - listen <name>
268
269A "defaults" section sets default parameters for all other sections following
270its declaration. Those default parameters are reset by the next "defaults"
271section. See below for the list of parameters which can be set in a "defaults"
Willy Tarreau0ba27502007-12-24 16:55:16 +0100272section. The name is optional but its use is encouraged for better readability.
Willy Tarreau6a06a402007-07-15 20:15:28 +0200273
274A "frontend" section describes a set of listening sockets accepting client
275connections.
276
277A "backend" section describes a set of servers to which the proxy will connect
278to forward incoming connections.
279
280A "listen" section defines a complete proxy with its frontend and backend
281parts combined in one section. It is generally useful for TCP-only traffic.
282
Willy Tarreau0ba27502007-12-24 16:55:16 +0100283All proxy names must be formed from upper and lower case letters, digits,
284'-' (dash), '_' (underscore) , '.' (dot) and ':' (colon). ACL names are
285case-sensitive, which means that "www" and "WWW" are two different proxies.
286
287Historically, all proxy names could overlap, it just caused troubles in the
288logs. Since the introduction of content switching, it is mandatory that two
289proxies with overlapping capabilities (frontend/backend) have different names.
290However, it is still permitted that a frontend and a backend share the same
291name, as this configuration seems to be commonly encountered.
292
293Right now, two major proxy modes are supported : "tcp", also known as layer 4,
294and "http", also known as layer 7. In layer 4 mode, HAProxy simply forwards
295bidirectionnal traffic between two sides. In layer 7 mode, HAProxy analyzes the
296protocol, and can interact with it by allowing, blocking, switching, adding,
297modifying, or removing arbitrary contents in requests or responses, based on
298arbitrary criteria.
299
300
3012.1) Quick reminder about HTTP
302------------------------------
303
304When a proxy is running in HTTP mode, both the request and the response are
305fully analyzed and indexed, thus it becomes possible to build matching criteria
306on almost anything found in the contents.
307
308However, it is important to understand how HTTP requests and responses are
309formed, and how HAProxy decomposes them. It will then become easier to write
310correct rules and to debug existing configurations.
311
312
3132.1.1) The HTTP transaction model
314---------------------------------
315
316The HTTP protocol is transaction-driven. This means that each request will lead
317to one and only one response. Traditionnally, a TCP connection is established
318from the client to the server, a request is sent by the client on the
319connection, the server responds and the connection is closed. A new request
320will involve a new connection :
321
322 [CON1] [REQ1] ... [RESP1] [CLO1] [CON2] [REQ2] ... [RESP2] [CLO2] ...
323
324In this mode, called the "HTTP close" mode, there are as many connection
325establishments as there are HTTP transactions. Since the connection is closed
326by the server after the response, the client does not need to know the content
327length.
328
329Due to the transactional nature of the protocol, it was possible to improve it
330to avoid closing a connection between two subsequent transactions. In this mode
331however, it is mandatory that the server indicates the content length for each
332response so that the client does not wait indefinitely. For this, a special
333header is used: "Content-length". This mode is called the "keep-alive" mode :
334
335 [CON] [REQ1] ... [RESP1] [REQ2] ... [RESP2] [CLO] ...
336
337Its advantages are a reduced latency between transactions, and less processing
338power required on the server side. It is generally better than the close mode,
339but not always because the clients often limit their concurrent connections to
340a smaller value. HAProxy currently does not support the HTTP keep-alive mode,
341but knows how to transform it to the close mode.
342
343A last improvement in the communications is the pipelining mode. It still uses
344keep-alive, but the client does not wait for the first response to send the
345second request. This is useful for fetching large number of images composing a
346page :
347
348 [CON] [REQ1] [REQ2] ... [RESP1] [RESP2] [CLO] ...
349
350This can obviously have a tremendous benefit on performance because the network
351latency is eliminated between subsequent requests. Many HTTP agents do not
352correctly support pipelining since there is no way to associate a response with
353the corresponding request in HTTP. For this reason, it is mandatory for the
354server to reply in the exact same order as the requests were received.
355
356Right now, HAProxy only supports the first mode (HTTP close) if it needs to
357process the request. This means that for each request, there will be one TCP
358connection. If keep-alive or pipelining are required, HAProxy will still
359support them, but will only see the first request and the first response of
360each transaction. While this is generally problematic with regards to logs,
361content switching or filtering, it most often causes no problem for persistence
362with cookie insertion.
363
364
3652.1.2) HTTP request
366-------------------
367
368First, let's consider this HTTP request :
369
370 Line Contents
371 number
372 1 GET /serv/login.php?lang=en&profile=2 HTTP/1.1
373 2 Host: www.mydomain.com
374 3 User-agent: my small browser
375 4 Accept: image/jpeg, image/gif
376 5 Accept: image/png
377
378
3792.1.2.1) The Request line
380-------------------------
381
382Line 1 is the "request line". It is always composed of 3 fields :
383
384 - a METHOD : GET
385 - a URI : /serv/login.php?lang=en&profile=2
386 - a version tag : HTTP/1.1
387
388All of them are delimited by what the standard calls LWS (linear white spaces),
389which are commonly spaces, but can also be tabs or line feeds/carriage returns
390followed by spaces/tabs. The method itself cannot contain any colon (':') and
391is limited to alphabetic letters. All those various combinations make it
392desirable that HAProxy performs the splitting itself rather than leaving it to
393the user to write a complex or inaccurate regular expression.
394
395The URI itself can have several forms :
396
397 - A "relative URI" :
398
399 /serv/login.php?lang=en&profile=2
400
401 It is a complete URL without the host part. This is generally what is
402 received by servers, reverse proxies and transparent proxies.
403
404 - An "absolute URI", also called a "URL" :
405
406 http://192.168.0.12:8080/serv/login.php?lang=en&profile=2
407
408 It is composed of a "scheme" (the protocol name followed by '://'), a host
409 name or address, optionally a colon (':') followed by a port number, then
410 a relative URI beginning at the first slash ('/') after the address part.
411 This is generally what proxies receive, but a server supporting HTTP/1.1
412 must accept this form too.
413
414 - a star ('*') : this form is only accepted in association with the OPTIONS
415 method and is not relayable. It is used to inquiry a next hop's
416 capabilities.
417
418 - an address:port combination : 192.168.0.12:80
419 This is used with the CONNECT method, which is used to establish TCP
420 tunnels through HTTP proxies, generally for HTTPS, but sometimes for
421 other protocols too.
422
423In a relative URI, two sub-parts are identified. The part before the question
424mark is called the "path". It is typically the relative path to static objects
425on the server. The part after the question mark is called the "query string".
426It is mostly used with GET requests sent to dynamic scripts and is very
427specific to the language, framework or application in use.
428
429
4302.1.2.2) The request headers
431----------------------------
432
433The headers start at the second line. They are composed of a name at the
434beginning of the line, immediately followed by a colon (':'). Traditionally,
435an LWS is added after the colon but that's not required. Then come the values.
436Multiple identical headers may be folded into one single line, delimiting the
437values with commas, provided that their order is respected. This is commonly
Willy Tarreau198a7442008-01-17 12:05:32 +0100438encountered in the "Cookie:" field. A header may span over multiple lines if
Willy Tarreau0ba27502007-12-24 16:55:16 +0100439the subsequent lines begin with an LWS. In the example in 2.1.2, lines 4 and 5
Willy Tarreau198a7442008-01-17 12:05:32 +0100440define a total of 3 values for the "Accept:" header.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100441
442Contrary to a common mis-conception, header names are not case-sensitive, and
443their values are not either if they refer to other header names (such as the
Willy Tarreau198a7442008-01-17 12:05:32 +0100444"Connection:" header).
Willy Tarreau0ba27502007-12-24 16:55:16 +0100445
446The end of the headers is indicated by the first empty line. People often say
447that it's a double line feed, which is not exact, even if a double line feed
448is one valid form of empty line.
449
450Fortunately, HAProxy takes care of all these complex combinations when indexing
451headers, checking values and counting them, so there is no reason to worry
Willy Tarreaud2a4aa22008-01-31 15:28:22 +0100452about the way they could be written, but it is important not to accuse an
Willy Tarreau0ba27502007-12-24 16:55:16 +0100453application of being buggy if it does unusual, valid things.
454
455Important note:
456 As suggested by RFC2616, HAProxy normalizes headers by replacing line breaks
457 in the middle of headers by LWS in order to join multi-line headers. This
458 is necessary for proper analysis and helps less capable HTTP parsers to work
459 correctly and not to be fooled by such complex constructs.
460
461
4622.1.3) HTTP response
463--------------------
464
465An HTTP response looks very much like an HTTP request. Both are called HTTP
466messages. Let's consider this HTTP response :
467
468 Line Contents
469 number
470 1 HTTP/1.1 200 OK
471 2 Content-length: 350
472 3 Content-Type: text/html
473
474
4752.1.3.1) The Response line
476--------------------------
477
478Line 1 is the "response line". It is always composed of 3 fields :
479
480 - a version tag : HTTP/1.1
481 - a status code : 200
482 - a reason : OK
483
484The status code is always 3-digit. The first digit indicates a general status :
485 - 2xx = OK, content is following (eg: 200, 206)
486 - 3xx = OK, no content following (eg: 302, 304)
487 - 4xx = error caused by the client (eg: 401, 403, 404)
488 - 5xx = error caused by the server (eg: 500, 502, 503)
489
490Please refer to RFC2616 for the detailed meaning of all such codes. The
491"reason" field is just a hint, but is not parsed by clients. Anything can be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +0100492found there, but it's a common practice to respect the well-established
Willy Tarreau0ba27502007-12-24 16:55:16 +0100493messages. It can be composed of one or multiple words, such as "OK", "Found",
494or "Authentication Required".
495
496
4972.1.3.2) The response headers
498-----------------------------
499
500Response headers work exactly like request headers, and as such, HAProxy uses
501the same parsing function for both. Please refer to paragraph 2.1.2.2 for more
502details.
503
504
5052.2) Proxy keywords matrix
506----------------------------
507
Willy Tarreau6a06a402007-07-15 20:15:28 +0200508The following list of keywords is supported. Most of them may only be used in a
Willy Tarreau0ba27502007-12-24 16:55:16 +0100509limited set of section types. Some of them are marked as "deprecated" because
Willy Tarreaud2a4aa22008-01-31 15:28:22 +0100510they are inherited from an old syntax which may be confusing or functionally
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100511limited, and there are new recommended keywords to replace them. Keywords
512listed with [no] can be optionally inverted using the "no" prefix, ex. "no
513option contstats". This makes sense when the option has been enabled by default
514and must be disabled for a specific instance.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100515
Willy Tarreau6a06a402007-07-15 20:15:28 +0200516
517keyword defaults frontend listen backend
518----------------------+----------+----------+---------+---------
519acl - X X X
520appsession - - X X
Willy Tarreauc73ce2b2008-01-06 10:55:10 +0100521backlog X X X -
Willy Tarreau0ba27502007-12-24 16:55:16 +0100522balance X - X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200523bind - X X -
524block - X X X
Willy Tarreau0ba27502007-12-24 16:55:16 +0100525capture cookie - X X -
526capture request header - X X -
527capture response header - X X -
Willy Tarreaue219db72007-12-03 01:30:13 +0100528clitimeout X X X - (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +0100529contimeout X - X X (deprecated)
Willy Tarreau6a06a402007-07-15 20:15:28 +0200530cookie X - X X
531default_backend - X X -
Willy Tarreau0ba27502007-12-24 16:55:16 +0100532disabled X X X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200533dispatch - - X X
Willy Tarreau0ba27502007-12-24 16:55:16 +0100534enabled X X X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200535errorfile X X X X
536errorloc X X X X
537errorloc302 X X X X
538errorloc303 X X X X
539fullconn X - X X
540grace - X X X
Willy Tarreaudbc36f62007-11-30 12:29:11 +0100541http-check disable-on-404 X - X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200542log X X X X
543maxconn X X X -
544mode X X X X
Willy Tarreauc7246fc2007-12-02 17:31:20 +0100545monitor fail - X X -
Willy Tarreau6a06a402007-07-15 20:15:28 +0200546monitor-net X X X -
547monitor-uri X X X -
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100548[no] option abortonclose X - X X
549[no] option allbackups X - X X
550[no] option checkcache X - X X
551[no] option clitcpka X X X -
552[no] option contstats X X X -
553[no] option dontlognull X X X -
554[no] option forceclose X - X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200555option forwardfor X X X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100556[no] option http_proxy X X X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200557option httpchk X - X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100558[no] option httpclose X X X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200559option httplog X X X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100560[no] option logasap X X X -
561[no] option nolinger X X X X
562[no] option persist X - X X
563[no] option redispatch X - X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200564option smtpchk X - X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100565[no] option srvtcpka X - X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200566option ssl-hello-chk X - X X
567option tcpka X X X X
568option tcplog X X X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100569[no] option tcpsplice X X X X
570[no] option transparent X X X -
571redisp X - X X (deprecated)
572redispatch X - X X (deprecated)
Willy Tarreau6a06a402007-07-15 20:15:28 +0200573reqadd - X X X
574reqallow - X X X
575reqdel - X X X
576reqdeny - X X X
577reqiallow - X X X
578reqidel - X X X
579reqideny - X X X
580reqipass - X X X
581reqirep - X X X
582reqisetbe - X X X
583reqitarpit - X X X
584reqpass - X X X
585reqrep - X X X
586reqsetbe - X X X
587reqtarpit - X X X
588retries X - X X
589rspadd - X X X
590rspdel - X X X
591rspdeny - X X X
592rspidel - X X X
593rspideny - X X X
594rspirep - X X X
595rsprep - X X X
596server - - X X
597source X - X X
Willy Tarreaue219db72007-12-03 01:30:13 +0100598srvtimeout X - X X (deprecated)
Willy Tarreau24e779b2007-07-24 23:43:37 +0200599stats auth X - X X
600stats enable X - X X
601stats realm X - X X
Willy Tarreaubbd42122007-07-25 07:26:38 +0200602stats refresh X - X X
Willy Tarreau24e779b2007-07-24 23:43:37 +0200603stats scope X - X X
604stats uri X - X X
Krzysztof Oledzkid9db9272007-10-15 10:05:11 +0200605stats hide-version X - X X
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +0100606timeout check X - X X
Willy Tarreaue219db72007-12-03 01:30:13 +0100607timeout client X X X -
608timeout clitimeout X X X - (deprecated)
609timeout connect X - X X
610timeout contimeout X - X X (deprecated)
Willy Tarreau844e3c52008-01-11 16:28:18 +0100611timeout http-request X X X -
Willy Tarreaue219db72007-12-03 01:30:13 +0100612timeout queue X - X X
613timeout server X - X X
614timeout srvtimeout X - X X (deprecated)
Willy Tarreau51c9bde2008-01-06 13:40:03 +0100615timeout tarpit X X X X
Willy Tarreau844e3c52008-01-11 16:28:18 +0100616transparent X X X - (deprecated)
Willy Tarreau6a06a402007-07-15 20:15:28 +0200617use_backend - X X -
Willy Tarreau6a06a402007-07-15 20:15:28 +0200618----------------------+----------+----------+---------+---------
619keyword defaults frontend listen backend
620
Willy Tarreau0ba27502007-12-24 16:55:16 +0100621
6222.2.1) Alphabetically sorted keywords reference
623-----------------------------------------------
624
625This section provides a description of each keyword and its usage.
626
627
628acl <aclname> <criterion> [flags] [operator] <value> ...
629 Declare or complete an access list.
630 May be used in sections : defaults | frontend | listen | backend
631 no | yes | yes | yes
632 Example:
633 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
634 acl invalid_src src_port 0:1023
635 acl local_dst hdr(host) -i localhost
636
637 See section 2.3 about ACL usage.
638
639
640appsession <cookie> len <length> timeout <holdtime>
641 Define session stickiness on an existing application cookie.
642 May be used in sections : defaults | frontend | listen | backend
643 no | no | yes | yes
644 Arguments :
645 <cookie> this is the name of the cookie used by the application and which
646 HAProxy will have to learn for each new session.
647
648 <length> this is the number of characters that will be memorized and
649 checked in each cookie value.
650
651 <holdtime> this is the time after which the cookie will be removed from
652 memory if unused. If no unit is specified, this time is in
653 milliseconds.
654
655 When an application cookie is defined in a backend, HAProxy will check when
656 the server sets such a cookie, and will store its value in a table, and
657 associate it with the server's identifier. Up to <length> characters from
658 the value will be retained. On each connection, haproxy will look for this
659 cookie both in the "Cookie:" headers, and as a URL parameter in the query
660 string. If a known value is found, the client will be directed to the server
661 associated with this value. Otherwise, the load balancing algorithm is
662 applied. Cookies are automatically removed from memory when they have been
663 unused for a duration longer than <holdtime>.
664
665 The definition of an application cookie is limited to one per backend.
666
667 Example :
668 appsession JSESSIONID len 52 timeout 3h
669
670 See also : "cookie", "capture cookie" and "balance".
671
672
Willy Tarreauc73ce2b2008-01-06 10:55:10 +0100673backlog <conns>
674 Give hints to the system about the approximate listen backlog desired size
675 May be used in sections : defaults | frontend | listen | backend
676 yes | yes | yes | no
677 Arguments :
678 <conns> is the number of pending connections. Depending on the operating
679 system, it may represent the number of already acknowledged
680 connections, of non-acknowledged ones, or both.
681
682 In order to protect against SYN flood attacks, one solution is to increase
683 the system's SYN backlog size. Depending on the system, sometimes it is just
684 tunable via a system parameter, sometimes it is not adjustable at all, and
685 sometimes the system relies on hints given by the application at the time of
686 the listen() syscall. By default, HAProxy passes the frontend's maxconn value
687 to the listen() syscall. On systems which can make use of this value, it can
688 sometimes be useful to be able to specify a different value, hence this
689 backlog parameter.
690
691 On Linux 2.4, the parameter is ignored by the system. On Linux 2.6, it is
692 used as a hint and the system accepts up to the smallest greater power of
693 two, and never more than some limits (usually 32768).
694
695 See also : "maxconn" and the target operating system's tuning guide.
696
697
Willy Tarreau0ba27502007-12-24 16:55:16 +0100698balance <algorithm> [ <arguments> ]
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +0200699balance url_param <param> [check_post [<max_wait>]]
Willy Tarreau0ba27502007-12-24 16:55:16 +0100700 Define the load balancing algorithm to be used in a backend.
701 May be used in sections : defaults | frontend | listen | backend
702 yes | no | yes | yes
703 Arguments :
704 <algorithm> is the algorithm used to select a server when doing load
705 balancing. This only applies when no persistence information
706 is available, or when a connection is redispatched to another
707 server. <algorithm> may be one of the following :
708
709 roundrobin Each server is used in turns, according to their weights.
710 This is the smoothest and fairest algorithm when the server's
711 processing time remains equally distributed. This algorithm
712 is dynamic, which means that server weights may be adjusted
713 on the fly for slow starts for instance.
714
Willy Tarreau2d2a7f82008-03-17 12:07:56 +0100715 leastconn The server with the lowest number of connections receives the
716 connection. Round-robin is performed within groups of servers
717 of the same load to ensure that all servers will be used. Use
718 of this algorithm is recommended where very long sessions are
719 expected, such as LDAP, SQL, TSE, etc... but is not very well
720 suited for protocols using short sessions such as HTTP. This
721 algorithm is dynamic, which means that server weights may be
722 adjusted on the fly for slow starts for instance.
723
Willy Tarreau0ba27502007-12-24 16:55:16 +0100724 source The source IP address is hashed and divided by the total
725 weight of the running servers to designate which server will
726 receive the request. This ensures that the same client IP
727 address will always reach the same server as long as no
728 server goes down or up. If the hash result changes due to the
729 number of running servers changing, many clients will be
730 directed to a different server. This algorithm is generally
731 used in TCP mode where no cookie may be inserted. It may also
732 be used on the Internet to provide a best-effort stickyness
733 to clients which refuse session cookies. This algorithm is
734 static, which means that changing a server's weight on the
735 fly will have no effect.
736
737 uri The left part of the URI (before the question mark) is hashed
738 and divided by the total weight of the running servers. The
739 result designates which server will receive the request. This
740 ensures that a same URI will always be directed to the same
741 server as long as no server goes up or down. This is used
742 with proxy caches and anti-virus proxies in order to maximize
743 the cache hit rate. Note that this algorithm may only be used
744 in an HTTP backend. This algorithm is static, which means
745 that changing a server's weight on the fly will have no
746 effect.
747
748 url_param The URL parameter specified in argument will be looked up in
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +0200749 the query string of each HTTP GET request.
750
751 If the modifier "check_post" is used, then an HTTP POST
752 request entity will be searched for the parameter argument,
753 when the question mark indicating a query string ('?') is not
754 present in the URL. Optionally, specify a number of octets to
755 wait for before attempting to search the message body. If the
756 entity can not be searched, then round robin is used for each
757 request. For instance, if your clients always send the LB
758 parameter in the first 128 bytes, then specify that. The
759 default is 48. The entity data will not be scanned until the
760 required number of octets have arrived at the gateway, this
761 is the minimum of: (default/max_wait, Content-Length or first
762 chunk length). If Content-Length is missing or zero, it does
763 not need to wait for more data than the client promised to
764 send. When Content-Length is present and larger than
765 <max_wait>, then waiting is limited to <max_wait> and it is
766 assumed that this will be enough data to search for the
767 presence of the parameter. In the unlikely event that
768 Transfer-Encoding: chunked is used, only the first chunk is
769 scanned. Parameter values separated by a chunk boundary, may
770 be randomly balanced if at all.
771
772 If the parameter is found followed by an equal sign ('=') and
773 a value, then the value is hashed and divided by the total
774 weight of the running servers. The result designates which
775 server will receive the request.
776
777 This is used to track user identifiers in requests and ensure
778 that a same user ID will always be sent to the same server as
779 long as no server goes up or down. If no value is found or if
780 the parameter is not found, then a round robin algorithm is
781 applied. Note that this algorithm may only be used in an HTTP
782 backend. This algorithm is static, which means that changing a
783 server's weight on the fly will have no effect.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100784
785 <arguments> is an optional list of arguments which may be needed by some
786 algorithms. Right now, only the "url_param" algorithm supports
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +0200787 an optional argument.
788
789 balance url_param <param> [check_post [<max_wait>]]
Willy Tarreau0ba27502007-12-24 16:55:16 +0100790
791 The definition of the load balancing algorithm is mandatory for a backend
792 and limited to one per backend.
793
794 Examples :
795 balance roundrobin
796 balance url_param userid
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +0200797 balance url_param session_id check_post 64
798
799 Note: the following caveats and limitations on using the "check_post"
800 extension with "url_param" must be considered :
801
802 - all POST requests are eligable for consideration, because there is no way
803 to determine if the parameters will be found in the body or entity which
804 may contain binary data. Therefore another method may be required to
805 restrict consideration of POST requests that have no URL parameters in
806 the body. (see acl reqideny http_end)
807
808 - using a <max_wait> value larger than the request buffer size does not
809 make sense and is useless. The buffer size is set at build time, and
810 defaults to 16 kB.
811
812 - Content-Encoding is not supported, the parameter search will probably
813 fail; and load balancing will fall back to Round Robin.
814
815 - Expect: 100-continue is not supported, load balancing will fall back to
816 Round Robin.
817
818 - Transfer-Encoding (RFC2616 3.6.1) is only supported in the first chunk.
819 If the entire parameter value is not present in the first chunk, the
820 selection of server is undefined (actually, defined by how little
821 actually appeared in the first chunk).
822
823 - This feature does not support generation of a 100, 411 or 501 response.
824
825 - In some cases, requesting "check_post" MAY attempt to scan the entire
826 contents of a message body. Scaning normally terminates when linear
827 white space or control characters are found, indicating the end of what
828 might be a URL parameter list. This is probably not a concern with SGML
829 type message bodies.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100830
831 See also : "dispatch", "cookie", "appsession", "transparent" and "http_proxy".
832
833
834bind [<address>]:<port> [, ...]
Willy Tarreaub1e52e82008-01-13 14:49:51 +0100835bind [<address>]:<port> [, ...] transparent
Willy Tarreau0ba27502007-12-24 16:55:16 +0100836 Define one or several listening addresses and/or ports in a frontend.
837 May be used in sections : defaults | frontend | listen | backend
838 no | yes | yes | no
839 Arguments :
Willy Tarreaub1e52e82008-01-13 14:49:51 +0100840 <address> is optional and can be a host name, an IPv4 address, an IPv6
841 address, or '*'. It designates the address the frontend will
842 listen on. If unset, all IPv4 addresses of the system will be
843 listened on. The same will apply for '*' or the system's
844 special address "0.0.0.0".
845
846 <port> is the TCP port number the proxy will listen on. The port is
847 mandatory. Note that in the case of an IPv6 address, the port
848 is always the number after the last colon (':').
Willy Tarreau0ba27502007-12-24 16:55:16 +0100849
Willy Tarreaub1e52e82008-01-13 14:49:51 +0100850 transparent is an optional keyword which is supported only on certain
851 Linux kernels. It indicates that the addresses will be bound
852 even if they do not belong to the local machine. Any packet
853 targetting any of these addresses will be caught just as if
854 the address was locally configured. This normally requires
855 that IP forwarding is enabled. Caution! do not use this with
856 the default address '*', as it would redirect any traffic for
857 the specified port. This keyword is available only when
858 HAProxy is built with USE_LINUX_TPROXY=1.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100859
860 It is possible to specify a list of address:port combinations delimited by
861 commas. The frontend will then listen on all of these addresses. There is no
862 fixed limit to the number of addresses and ports which can be listened on in
863 a frontend, as well as there is no limit to the number of "bind" statements
864 in a frontend.
865
866 Example :
867 listen http_proxy
868 bind :80,:443
869 bind 10.0.0.1:10080,10.0.0.1:10443
870
871 See also : "source".
872
873
874block { if | unless } <condition>
875 Block a layer 7 request if/unless a condition is matched
876 May be used in sections : defaults | frontend | listen | backend
877 no | yes | yes | yes
878
879 The HTTP request will be blocked very early in the layer 7 processing
880 if/unless <condition> is matched. A 403 error will be returned if the request
881 is blocked. The condition has to reference ACLs (see section 2.3). This is
882 typically used to deny access to certain sensible resources if some
883 conditions are met or not met. There is no fixed limit to the number of
884 "block" statements per instance.
885
886 Example:
887 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
888 acl invalid_src src_port 0:1023
889 acl local_dst hdr(host) -i localhost
890 block if invalid_src || local_dst
891
892 See section 2.3 about ACL usage.
893
894
895capture cookie <name> len <length>
896 Capture and log a cookie in the request and in the response.
897 May be used in sections : defaults | frontend | listen | backend
898 no | yes | yes | no
899 Arguments :
900 <name> is the beginning of the name of the cookie to capture. In order
901 to match the exact name, simply suffix the name with an equal
902 sign ('='). The full name will appear in the logs, which is
903 useful with application servers which adjust both the cookie name
904 and value (eg: ASPSESSIONXXXXX).
905
906 <length> is the maximum number of characters to report in the logs, which
907 include the cookie name, the equal sign and the value, all in the
908 standard "name=value" form. The string will be truncated on the
909 right if it exceeds <length>.
910
911 Only the first cookie is captured. Both the "cookie" request headers and the
912 "set-cookie" response headers are monitored. This is particularly useful to
913 check for application bugs causing session crossing or stealing between
914 users, because generally the user's cookies can only change on a login page.
915
916 When the cookie was not presented by the client, the associated log column
917 will report "-". When a request does not cause a cookie to be assigned by the
918 server, a "-" is reported in the response column.
919
920 The capture is performed in the frontend only because it is necessary that
921 the log format does not change for a given frontend depending on the
922 backends. This may change in the future. Note that there can be only one
923 "capture cookie" statement in a frontend. The maximum capture length is
924 configured in the souces by default to 64 characters. It is not possible to
925 specify a capture in a "defaults" section.
926
927 Example:
928 capture cookie ASPSESSION len 32
929
930 See also : "capture request header", "capture response header" as well as
Willy Tarreauced27012008-01-17 20:35:34 +0100931 section 2.6 about logging.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100932
933
934capture request header <name> len <length>
935 Capture and log the first occurrence of the specified request header.
936 May be used in sections : defaults | frontend | listen | backend
937 no | yes | yes | no
938 Arguments :
939 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +0100940 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +0100941 appear in the requests, with the first letter of each word in
942 upper case. The header name will not appear in the logs, only the
943 value is reported, but the position in the logs is respected.
944
945 <length> is the maximum number of characters to extract from the value and
946 report in the logs. The string will be truncated on the right if
947 it exceeds <length>.
948
949 Only the first value of the first occurrence of the header is captured. The
950 value will be added to the logs between braces ('{}'). If multiple headers
951 are captured, they will be delimited by a vertical bar ('|') and will appear
952 in the same order they were declared in the configuration. Common uses for
953 request header captures include the "Host" field in virtual hosting
954 environments, the "Content-length" when uploads are supported, "User-agent"
955 to quickly differenciate between real users and robots, and "X-Forwarded-For"
956 in proxied environments to find where the request came from.
957
958 There is no limit to the number of captured request headers, but each capture
959 is limited to 64 characters. In order to keep log format consistent for a
960 same frontend, header captures can only be declared in a frontend. It is not
961 possible to specify a capture in a "defaults" section.
962
963 Example:
964 capture request header Host len 15
965 capture request header X-Forwarded-For len 15
966 capture request header Referrer len 15
967
Willy Tarreauced27012008-01-17 20:35:34 +0100968 See also : "capture cookie", "capture response header" as well as section 2.6
Willy Tarreau0ba27502007-12-24 16:55:16 +0100969 about logging.
970
971
972capture response header <name> len <length>
973 Capture and log the first occurrence of the specified response header.
974 May be used in sections : defaults | frontend | listen | backend
975 no | yes | yes | no
976 Arguments :
977 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +0100978 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +0100979 appear in the response, with the first letter of each word in
980 upper case. The header name will not appear in the logs, only the
981 value is reported, but the position in the logs is respected.
982
983 <length> is the maximum number of characters to extract from the value and
984 report in the logs. The string will be truncated on the right if
985 it exceeds <length>.
986
987 Only the first value of the first occurrence of the header is captured. The
988 result will be added to the logs between braces ('{}') after the captured
989 request headers. If multiple headers are captured, they will be delimited by
990 a vertical bar ('|') and will appear in the same order they were declared in
991 the configuration. Common uses for response header captures include the
992 "Content-length" header which indicates how many bytes are expected to be
993 returned, the "Location" header to track redirections.
994
995 There is no limit to the number of captured response headers, but each
996 capture is limited to 64 characters. In order to keep log format consistent
997 for a same frontend, header captures can only be declared in a frontend. It
998 is not possible to specify a capture in a "defaults" section.
999
1000 Example:
1001 capture response header Content-length len 9
1002 capture response header Location len 15
1003
Willy Tarreauced27012008-01-17 20:35:34 +01001004 See also : "capture cookie", "capture request header" as well as section 2.6
Willy Tarreau0ba27502007-12-24 16:55:16 +01001005 about logging.
1006
1007
1008clitimeout <timeout>
1009 Set the maximum inactivity time on the client side.
1010 May be used in sections : defaults | frontend | listen | backend
1011 yes | yes | yes | no
1012 Arguments :
1013 <timeout> is the timeout value is specified in milliseconds by default, but
1014 can be in any other unit if the number is suffixed by the unit,
1015 as explained at the top of this document.
1016
1017 The inactivity timeout applies when the client is expected to acknowledge or
1018 send data. In HTTP mode, this timeout is particularly important to consider
1019 during the first phase, when the client sends the request, and during the
1020 response while it is reading data sent by the server. The value is specified
1021 in milliseconds by default, but can be in any other unit if the number is
1022 suffixed by the unit, as specified at the top of this document. In TCP mode
1023 (and to a lesser extent, in HTTP mode), it is highly recommended that the
1024 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001025 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01001026 losses by specifying timeouts that are slightly above multiples of 3 seconds
1027 (eg: 4 or 5 seconds).
1028
1029 This parameter is specific to frontends, but can be specified once for all in
1030 "defaults" sections. This is in fact one of the easiest solutions not to
1031 forget about it. An unspecified timeout results in an infinite timeout, which
1032 is not recommended. Such a usage is accepted and works but reports a warning
1033 during startup because it may results in accumulation of expired sessions in
1034 the system if the system's timeouts are not configured either.
1035
1036 This parameter is provided for compatibility but is currently deprecated.
1037 Please use "timeout client" instead.
1038
Willy Tarreau036fae02008-01-06 13:24:40 +01001039 See also : "timeout client", "timeout http-request", "timeout server", and
1040 "srvtimeout".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001041
1042
1043contimeout <timeout>
1044 Set the maximum time to wait for a connection attempt to a server to succeed.
1045 May be used in sections : defaults | frontend | listen | backend
1046 yes | no | yes | yes
1047 Arguments :
1048 <timeout> is the timeout value is specified in milliseconds by default, but
1049 can be in any other unit if the number is suffixed by the unit,
1050 as explained at the top of this document.
1051
1052 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001053 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreau0ba27502007-12-24 16:55:16 +01001054 cover one or several TCP packet losses by specifying timeouts that are
1055 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
1056 connect timeout also presets the queue timeout to the same value if this one
1057 has not been specified. Historically, the contimeout was also used to set the
1058 tarpit timeout in a listen section, which is not possible in a pure frontend.
1059
1060 This parameter is specific to backends, but can be specified once for all in
1061 "defaults" sections. This is in fact one of the easiest solutions not to
1062 forget about it. An unspecified timeout results in an infinite timeout, which
1063 is not recommended. Such a usage is accepted and works but reports a warning
1064 during startup because it may results in accumulation of failed sessions in
1065 the system if the system's timeouts are not configured either.
1066
1067 This parameter is provided for backwards compatibility but is currently
1068 deprecated. Please use "timeout connect", "timeout queue" or "timeout tarpit"
1069 instead.
1070
1071 See also : "timeout connect", "timeout queue", "timeout tarpit",
1072 "timeout server", "contimeout".
1073
1074
1075cookie <name> [ rewrite|insert|prefix ] [ indirect ] [ nocache ] [ postonly ]
1076 Enable cookie-based persistence in a backend.
1077 May be used in sections : defaults | frontend | listen | backend
1078 yes | no | yes | yes
1079 Arguments :
1080 <name> is the name of the cookie which will be monitored, modified or
1081 inserted in order to bring persistence. This cookie is sent to
1082 the client via a "Set-Cookie" header in the response, and is
1083 brought back by the client in a "Cookie" header in all requests.
1084 Special care should be taken to choose a name which does not
1085 conflict with any likely application cookie. Also, if the same
1086 backends are subject to be used by the same clients (eg:
1087 HTTP/HTTPS), care should be taken to use different cookie names
1088 between all backends if persistence between them is not desired.
1089
1090 rewrite This keyword indicates that the cookie will be provided by the
1091 server and that haproxy will have to modify its value to set the
1092 server's identifier in it. This mode is handy when the management
1093 of complex combinations of "Set-cookie" and "Cache-control"
1094 headers is left to the application. The application can then
1095 decide whether or not it is appropriate to emit a persistence
1096 cookie. Since all responses should be monitored, this mode only
1097 works in HTTP close mode. Unless the application behaviour is
1098 very complex and/or broken, it is advised not to start with this
1099 mode for new deployments. This keyword is incompatible with
1100 "insert" and "prefix".
1101
1102 insert This keyword indicates that the persistence cookie will have to
1103 be inserted by haproxy in the responses. If the server emits a
1104 cookie with the same name, it will be replaced anyway. For this
1105 reason, this mode can be used to upgrade existing configurations
1106 running in the "rewrite" mode. The cookie will only be a session
1107 cookie and will not be stored on the client's disk. Due to
1108 caching effects, it is generally wise to add the "indirect" and
1109 "nocache" or "postonly" keywords (see below). The "insert"
1110 keyword is not compatible with "rewrite" and "prefix".
1111
1112 prefix This keyword indicates that instead of relying on a dedicated
1113 cookie for the persistence, an existing one will be completed.
1114 This may be needed in some specific environments where the client
1115 does not support more than one single cookie and the application
1116 already needs it. In this case, whenever the server sets a cookie
1117 named <name>, it will be prefixed with the server's identifier
1118 and a delimiter. The prefix will be removed from all client
1119 requests so that the server still finds the cookie it emitted.
1120 Since all requests and responses are subject to being modified,
1121 this mode requires the HTTP close mode. The "prefix" keyword is
1122 not compatible with "rewrite" and "insert".
1123
1124 indirect When this option is specified in insert mode, cookies will only
1125 be added when the server was not reached after a direct access,
1126 which means that only when a server is elected after applying a
1127 load-balancing algorithm, or after a redispatch, then the cookie
1128 will be inserted. If the client has all the required information
1129 to connect to the same server next time, no further cookie will
1130 be inserted. In all cases, when the "indirect" option is used in
1131 insert mode, the cookie is always removed from the requests
1132 transmitted to the server. The persistence mechanism then becomes
1133 totally transparent from the application point of view.
1134
1135 nocache This option is recommended in conjunction with the insert mode
1136 when there is a cache between the client and HAProxy, as it
1137 ensures that a cacheable response will be tagged non-cacheable if
1138 a cookie needs to be inserted. This is important because if all
1139 persistence cookies are added on a cacheable home page for
1140 instance, then all customers will then fetch the page from an
1141 outer cache and will all share the same persistence cookie,
1142 leading to one server receiving much more traffic than others.
1143 See also the "insert" and "postonly" options.
1144
1145 postonly This option ensures that cookie insertion will only be performed
1146 on responses to POST requests. It is an alternative to the
1147 "nocache" option, because POST responses are not cacheable, so
1148 this ensures that the persistence cookie will never get cached.
1149 Since most sites do not need any sort of persistence before the
1150 first POST which generally is a login request, this is a very
1151 efficient method to optimize caching without risking to find a
1152 persistence cookie in the cache.
1153 See also the "insert" and "nocache" options.
1154
1155 There can be only one persistence cookie per HTTP backend, and it can be
1156 declared in a defaults section. The value of the cookie will be the value
1157 indicated after the "cookie" keyword in a "server" statement. If no cookie
1158 is declared for a given server, the cookie is not set.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001159
Willy Tarreau0ba27502007-12-24 16:55:16 +01001160 Examples :
1161 cookie JSESSIONID prefix
1162 cookie SRV insert indirect nocache
1163 cookie SRV insert postonly indirect
1164
1165 See also : "appsession", "balance source", "capture cookie", "server".
1166
1167
1168default_backend <backend>
1169 Specify the backend to use when no "use_backend" rule has been matched.
1170 May be used in sections : defaults | frontend | listen | backend
1171 yes | yes | yes | no
1172 Arguments :
1173 <backend> is the name of the backend to use.
1174
1175 When doing content-switching between frontend and backends using the
1176 "use_backend" keyword, it is often useful to indicate which backend will be
1177 used when no rule has matched. It generally is the dynamic backend which
1178 will catch all undetermined requests.
1179
1180 The "default_backend" keyword is also supported in TCP mode frontends to
1181 facilitate the ordering of configurations in frontends and backends,
1182 eventhough it does not make much more sense in case of TCP due to the fact
1183 that use_backend currently does not work in TCP mode.
1184
1185 Example :
1186
1187 use_backend dynamic if url_dyn
1188 use_backend static if url_css url_img extension_img
1189 default_backend dynamic
1190
Willy Tarreau2769aa02007-12-27 18:26:09 +01001191 See also : "use_backend", "reqsetbe", "reqisetbe"
1192
Willy Tarreau0ba27502007-12-24 16:55:16 +01001193
1194disabled
1195 Disable a proxy, frontend or backend.
1196 May be used in sections : defaults | frontend | listen | backend
1197 yes | yes | yes | yes
1198 Arguments : none
1199
1200 The "disabled" keyword is used to disable an instance, mainly in order to
1201 liberate a listening port or to temporarily disable a service. The instance
1202 will still be created and its configuration will be checked, but it will be
1203 created in the "stopped" state and will appear as such in the statistics. It
1204 will not receive any traffic nor will it send any health-checks or logs. It
1205 is possible to disable many instances at once by adding the "disabled"
1206 keyword in a "defaults" section.
1207
1208 See also : "enabled"
1209
1210
1211enabled
1212 Enable a proxy, frontend or backend.
1213 May be used in sections : defaults | frontend | listen | backend
1214 yes | yes | yes | yes
1215 Arguments : none
1216
1217 The "enabled" keyword is used to explicitly enable an instance, when the
1218 defaults has been set to "disabled". This is very rarely used.
1219
1220 See also : "disabled"
1221
1222
1223errorfile <code> <file>
1224 Return a file contents instead of errors generated by HAProxy
1225 May be used in sections : defaults | frontend | listen | backend
1226 yes | yes | yes | yes
1227 Arguments :
1228 <code> is the HTTP status code. Currently, HAProxy is capable of
1229 generating codes 400, 403, 408, 500, 502, 503, and 504.
1230
1231 <file> designates a file containing the full HTTP response. It is
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001232 recommended to follow the common practice of appending ".http" to
Willy Tarreau0ba27502007-12-24 16:55:16 +01001233 the filename so that people do not confuse the response with HTML
1234 error pages.
1235
1236 It is important to understand that this keyword is not meant to rewrite
1237 errors returned by the server, but errors detected and returned by HAProxy.
1238 This is why the list of supported errors is limited to a small set.
1239
1240 The files are returned verbatim on the TCP socket. This allows any trick such
1241 as redirections to another URL or site, as well as tricks to clean cookies,
1242 force enable or disable caching, etc... The package provides default error
1243 files returning the same contents as default errors.
1244
1245 The files are read at the same time as the configuration and kept in memory.
1246 For this reason, the errors continue to be returned even when the process is
1247 chrooted, and no file change is considered while the process is running. A
Willy Tarreauc27debf2008-01-06 08:57:02 +01001248 simple method for developing those files consists in associating them to the
Willy Tarreau0ba27502007-12-24 16:55:16 +01001249 403 status code and interrogating a blocked URL.
1250
1251 See also : "errorloc", "errorloc302", "errorloc303"
1252
Willy Tarreau2769aa02007-12-27 18:26:09 +01001253
1254errorloc <code> <url>
1255errorloc302 <code> <url>
1256 Return an HTTP redirection to a URL instead of errors generated by HAProxy
1257 May be used in sections : defaults | frontend | listen | backend
1258 yes | yes | yes | yes
1259 Arguments :
1260 <code> is the HTTP status code. Currently, HAProxy is capable of
1261 generating codes 400, 403, 408, 500, 502, 503, and 504.
1262
1263 <url> it is the exact contents of the "Location" header. It may contain
1264 either a relative URI to an error page hosted on the same site,
1265 or an absolute URI designating an error page on another site.
1266 Special care should be given to relative URIs to avoid redirect
1267 loops if the URI itself may generate the same error (eg: 500).
1268
1269 It is important to understand that this keyword is not meant to rewrite
1270 errors returned by the server, but errors detected and returned by HAProxy.
1271 This is why the list of supported errors is limited to a small set.
1272
1273 Note that both keyword return the HTTP 302 status code, which tells the
1274 client to fetch the designated URL using the same HTTP method. This can be
1275 quite problematic in case of non-GET methods such as POST, because the URL
1276 sent to the client might not be allowed for something other than GET. To
1277 workaround this problem, please use "errorloc303" which send the HTTP 303
1278 status code, indicating to the client that the URL must be fetched with a GET
1279 request.
1280
1281 See also : "errorfile", "errorloc303"
1282
1283
1284errorloc303 <code> <url>
1285 Return an HTTP redirection to a URL instead of errors generated by HAProxy
1286 May be used in sections : defaults | frontend | listen | backend
1287 yes | yes | yes | yes
1288 Arguments :
1289 <code> is the HTTP status code. Currently, HAProxy is capable of
1290 generating codes 400, 403, 408, 500, 502, 503, and 504.
1291
1292 <url> it is the exact contents of the "Location" header. It may contain
1293 either a relative URI to an error page hosted on the same site,
1294 or an absolute URI designating an error page on another site.
1295 Special care should be given to relative URIs to avoid redirect
1296 loops if the URI itself may generate the same error (eg: 500).
1297
1298 It is important to understand that this keyword is not meant to rewrite
1299 errors returned by the server, but errors detected and returned by HAProxy.
1300 This is why the list of supported errors is limited to a small set.
1301
1302 Note that both keyword return the HTTP 303 status code, which tells the
1303 client to fetch the designated URL using the same HTTP GET method. This
1304 solves the usual problems associated with "errorloc" and the 302 code. It is
1305 possible that some very old browsers designed before HTTP/1.1 do not support
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001306 it, but no such problem has been reported till now.
Willy Tarreau2769aa02007-12-27 18:26:09 +01001307
1308 See also : "errorfile", "errorloc", "errorloc302"
1309
1310
1311fullconn <conns>
1312 Specify at what backend load the servers will reach their maxconn
1313 May be used in sections : defaults | frontend | listen | backend
1314 yes | no | yes | yes
1315 Arguments :
1316 <conns> is the number of connections on the backend which will make the
1317 servers use the maximal number of connections.
1318
Willy Tarreau198a7442008-01-17 12:05:32 +01001319 When a server has a "maxconn" parameter specified, it means that its number
Willy Tarreau2769aa02007-12-27 18:26:09 +01001320 of concurrent connections will never go higher. Additionally, if it has a
Willy Tarreau198a7442008-01-17 12:05:32 +01001321 "minconn" parameter, it indicates a dynamic limit following the backend's
Willy Tarreau2769aa02007-12-27 18:26:09 +01001322 load. The server will then always accept at least <minconn> connections,
1323 never more than <maxconn>, and the limit will be on the ramp between both
1324 values when the backend has less than <conns> concurrent connections. This
1325 makes it possible to limit the load on the servers during normal loads, but
1326 push it further for important loads without overloading the servers during
1327 exceptionnal loads.
1328
1329 Example :
1330 # The servers will accept between 100 and 1000 concurrent connections each
1331 # and the maximum of 1000 will be reached when the backend reaches 10000
1332 # connections.
1333 backend dynamic
1334 fullconn 10000
1335 server srv1 dyn1:80 minconn 100 maxconn 1000
1336 server srv2 dyn2:80 minconn 100 maxconn 1000
1337
1338 See also : "maxconn", "server"
1339
1340
1341grace <time>
1342 Maintain a proxy operational for some time after a soft stop
1343 May be used in sections : defaults | frontend | listen | backend
1344 no | yes | yes | yes
1345 Arguments :
1346 <time> is the time (by default in milliseconds) for which the instance
1347 will remain operational with the frontend sockets still listening
1348 when a soft-stop is received via the SIGUSR1 signal.
1349
1350 This may be used to ensure that the services disappear in a certain order.
1351 This was designed so that frontends which are dedicated to monitoring by an
1352 external equipement fail immediately while other ones remain up for the time
1353 needed by the equipment to detect the failure.
1354
1355 Note that currently, there is very little benefit in using this parameter,
1356 and it may in fact complicate the soft-reconfiguration process more than
1357 simplify it.
1358
Willy Tarreau0ba27502007-12-24 16:55:16 +01001359
1360http-check disable-on-404
1361 Enable a maintenance mode upon HTTP/404 response to health-checks
1362 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau2769aa02007-12-27 18:26:09 +01001363 yes | no | yes | yes
Willy Tarreau0ba27502007-12-24 16:55:16 +01001364 Arguments : none
1365
1366 When this option is set, a server which returns an HTTP code 404 will be
1367 excluded from further load-balancing, but will still receive persistent
1368 connections. This provides a very convenient method for Web administrators
1369 to perform a graceful shutdown of their servers. It is also important to note
1370 that a server which is detected as failed while it was in this mode will not
1371 generate an alert, just a notice. If the server responds 2xx or 3xx again, it
1372 will immediately be reinserted into the farm. The status on the stats page
1373 reports "NOLB" for a server in this mode. It is important to note that this
1374 option only works in conjunction with the "httpchk" option.
1375
Willy Tarreau2769aa02007-12-27 18:26:09 +01001376 See also : "option httpchk"
1377
1378
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01001379id <value>
1380 Set a persistent value for proxy ID. Must be unique and larger than 1000, as
1381 smaller values are reserved for auto-assigned ids.
1382
1383
Willy Tarreau2769aa02007-12-27 18:26:09 +01001384log global
1385log <address> <facility> [<level>]
1386 Enable per-instance logging of events and traffic.
1387 May be used in sections : defaults | frontend | listen | backend
1388 yes | yes | yes | yes
1389 Arguments :
1390 global should be used when the instance's logging parameters are the
1391 same as the global ones. This is the most common usage. "global"
1392 replaces <address>, <facility> and <level> with those of the log
1393 entries found in the "global" section. Only one "log global"
1394 statement may be used per instance, and this form takes no other
1395 parameter.
1396
1397 <address> indicates where to send the logs. It takes the same format as
1398 for the "global" section's logs, and can be one of :
1399
1400 - An IPv4 address optionally followed by a colon (':') and a UDP
1401 port. If no port is specified, 514 is used by default (the
1402 standard syslog port).
1403
1404 - A filesystem path to a UNIX domain socket, keeping in mind
1405 considerations for chroot (be sure the path is accessible
1406 inside the chroot) and uid/gid (be sure the path is
1407 appropriately writeable).
1408
1409 <facility> must be one of the 24 standard syslog facilities :
1410
1411 kern user mail daemon auth syslog lpr news
1412 uucp cron auth2 ftp ntp audit alert cron2
1413 local0 local1 local2 local3 local4 local5 local6 local7
1414
1415 <level> is optional and can be specified to filter outgoing messages. By
1416 default, all messages are sent. If a level is specified, only
1417 messages with a severity at least as important as this level
1418 will be sent. 8 levels are known :
1419
1420 emerg alert crit err warning notice info debug
1421
1422 Note that up to two "log" entries may be specified per instance. However, if
1423 "log global" is used and if the "global" section already contains 2 log
1424 entries, then additional log entries will be ignored.
1425
1426 Also, it is important to keep in mind that it is the frontend which decides
1427 what to log, and that in case of content switching, the log entries from the
1428 backend will be ignored.
1429
1430 Example :
1431 log global
1432 log 127.0.0.1:514 local0 notice
1433
1434
1435maxconn <conns>
1436 Fix the maximum number of concurrent connections on a frontend
1437 May be used in sections : defaults | frontend | listen | backend
1438 yes | yes | yes | no
1439 Arguments :
1440 <conns> is the maximum number of concurrent connections the frontend will
1441 accept to serve. Excess connections will be queued by the system
1442 in the socket's listen queue and will be served once a connection
1443 closes.
1444
1445 If the system supports it, it can be useful on big sites to raise this limit
1446 very high so that haproxy manages connection queues, instead of leaving the
1447 clients with unanswered connection attempts. This value should not exceed the
1448 global maxconn. Also, keep in mind that a connection contains two buffers
1449 of 8kB each, as well as some other data resulting in about 17 kB of RAM being
1450 consumed per established connection. That means that a medium system equipped
1451 with 1GB of RAM can withstand around 40000-50000 concurrent connections if
1452 properly tuned.
1453
1454 Also, when <conns> is set to large values, it is possible that the servers
1455 are not sized to accept such loads, and for this reason it is generally wise
1456 to assign them some reasonable connection limits.
1457
1458 See also : "server", global section's "maxconn", "fullconn"
1459
1460
1461mode { tcp|http|health }
1462 Set the running mode or protocol of the instance
1463 May be used in sections : defaults | frontend | listen | backend
1464 yes | yes | yes | yes
1465 Arguments :
1466 tcp The instance will work in pure TCP mode. A full-duplex connection
1467 will be established between clients and servers, and no layer 7
1468 examination will be performed. This is the default mode. It
1469 should be used for SSL, SSH, SMTP, ...
1470
1471 http The instance will work in HTTP mode. The client request will be
1472 analyzed in depth before connecting to any server. Any request
1473 which is not RFC-compliant will be rejected. Layer 7 filtering,
1474 processing and switching will be possible. This is the mode which
1475 brings HAProxy most of its value.
1476
1477 health The instance will work in "health" mode. It will just reply "OK"
1478 to incoming connections and close the connection. Nothing will be
1479 logged. This mode is used to reply to external components health
1480 checks. This mode is deprecated and should not be used anymore as
1481 it is possible to do the same and even better by combining TCP or
1482 HTTP modes with the "monitor" keyword.
1483
1484 When doing content switching, it is mandatory that the frontend and the
1485 backend are in the same mode (generally HTTP), otherwise the configuration
1486 will be refused.
1487
1488 Example :
1489 defaults http_instances
1490 mode http
1491
1492 See also : "monitor", "monitor-net"
1493
Willy Tarreau0ba27502007-12-24 16:55:16 +01001494
1495monitor fail [if | unless] <condition>
Willy Tarreau2769aa02007-12-27 18:26:09 +01001496 Add a condition to report a failure to a monitor HTTP request.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001497 May be used in sections : defaults | frontend | listen | backend
1498 no | yes | yes | no
Willy Tarreau0ba27502007-12-24 16:55:16 +01001499 Arguments :
1500 if <cond> the monitor request will fail if the condition is satisfied,
1501 and will succeed otherwise. The condition should describe a
1502 combinated test which must induce a failure if all conditions
1503 are met, for instance a low number of servers both in a
1504 backend and its backup.
1505
1506 unless <cond> the monitor request will succeed only if the condition is
1507 satisfied, and will fail otherwise. Such a condition may be
1508 based on a test on the presence of a minimum number of active
1509 servers in a list of backends.
1510
1511 This statement adds a condition which can force the response to a monitor
1512 request to report a failure. By default, when an external component queries
1513 the URI dedicated to monitoring, a 200 response is returned. When one of the
1514 conditions above is met, haproxy will return 503 instead of 200. This is
1515 very useful to report a site failure to an external component which may base
1516 routing advertisements between multiple sites on the availability reported by
1517 haproxy. In this case, one would rely on an ACL involving the "nbsrv"
Willy Tarreau2769aa02007-12-27 18:26:09 +01001518 criterion. Note that "monitor fail" only works in HTTP mode.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001519
1520 Example:
1521 frontend www
Willy Tarreau2769aa02007-12-27 18:26:09 +01001522 mode http
Willy Tarreau0ba27502007-12-24 16:55:16 +01001523 acl site_dead nbsrv(dynamic) lt 2
1524 acl site_dead nbsrv(static) lt 2
1525 monitor-uri /site_alive
1526 monitor fail if site_dead
1527
Willy Tarreau2769aa02007-12-27 18:26:09 +01001528 See also : "monitor-net", "monitor-uri"
1529
1530
1531monitor-net <source>
1532 Declare a source network which is limited to monitor requests
1533 May be used in sections : defaults | frontend | listen | backend
1534 yes | yes | yes | no
1535 Arguments :
1536 <source> is the source IPv4 address or network which will only be able to
1537 get monitor responses to any request. It can be either an IPv4
1538 address, a host name, or an address followed by a slash ('/')
1539 followed by a mask.
1540
1541 In TCP mode, any connection coming from a source matching <source> will cause
1542 the connection to be immediately closed without any log. This allows another
1543 equipement to probe the port and verify that it is still listening, without
1544 forwarding the connection to a remote server.
1545
1546 In HTTP mode, a connection coming from a source matching <source> will be
1547 accepted, the following response will be sent without waiting for a request,
1548 then the connection will be closed : "HTTP/1.0 200 OK". This is normally
1549 enough for any front-end HTTP probe to detect that the service is UP and
1550 running without forwarding the request to a backend server.
1551
1552 Monitor requests are processed very early. It is not possible to block nor
1553 divert them using ACLs. They cannot be logged either, and it is the intended
1554 purpose. They are only used to report HAProxy's health to an upper component,
1555 nothing more. Right now, it is not possible to set failure conditions on
1556 requests caught by "monitor-net".
1557
1558 Example :
1559 # addresses .252 and .253 are just probing us.
1560 frontend www
1561 monitor-net 192.168.0.252/31
1562
1563 See also : "monitor fail", "monitor-uri"
1564
1565
1566monitor-uri <uri>
1567 Intercept a URI used by external components' monitor requests
1568 May be used in sections : defaults | frontend | listen | backend
1569 yes | yes | yes | no
1570 Arguments :
1571 <uri> is the exact URI which we want to intercept to return HAProxy's
1572 health status instead of forwarding the request.
1573
1574 When an HTTP request referencing <uri> will be received on a frontend,
1575 HAProxy will not forward it nor log it, but instead will return either
1576 "HTTP/1.0 200 OK" or "HTTP/1.0 503 Service unavailable", depending on failure
1577 conditions defined with "monitor fail". This is normally enough for any
1578 front-end HTTP probe to detect that the service is UP and running without
1579 forwarding the request to a backend server. Note that the HTTP method, the
1580 version and all headers are ignored, but the request must at least be valid
1581 at the HTTP level. This keyword may only be used with an HTTP-mode frontend.
1582
1583 Monitor requests are processed very early. It is not possible to block nor
1584 divert them using ACLs. They cannot be logged either, and it is the intended
1585 purpose. They are only used to report HAProxy's health to an upper component,
1586 nothing more. However, it is possible to add any number of conditions using
1587 "monitor fail" and ACLs so that the result can be adjusted to whatever check
1588 can be imagined (most often the number of available servers in a backend).
1589
1590 Example :
1591 # Use /haproxy_test to report haproxy's status
1592 frontend www
1593 mode http
1594 monitor-uri /haproxy_test
1595
1596 See also : "monitor fail", "monitor-net"
1597
Willy Tarreau0ba27502007-12-24 16:55:16 +01001598
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001599option abortonclose
1600no option abortonclose
1601 Enable or disable early dropping of aborted requests pending in queues.
1602 May be used in sections : defaults | frontend | listen | backend
1603 yes | no | yes | yes
1604 Arguments : none
1605
1606 In presence of very high loads, the servers will take some time to respond.
1607 The per-instance connection queue will inflate, and the response time will
1608 increase respective to the size of the queue times the average per-session
1609 response time. When clients will wait for more than a few seconds, they will
Willy Tarreau198a7442008-01-17 12:05:32 +01001610 often hit the "STOP" button on their browser, leaving a useless request in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001611 the queue, and slowing down other users, and the servers as well, because the
1612 request will eventually be served, then aborted at the first error
1613 encountered while delivering the response.
1614
1615 As there is no way to distinguish between a full STOP and a simple output
1616 close on the client side, HTTP agents should be conservative and consider
1617 that the client might only have closed its output channel while waiting for
1618 the response. However, this introduces risks of congestion when lots of users
1619 do the same, and is completely useless nowadays because probably no client at
1620 all will close the session while waiting for the response. Some HTTP agents
1621 support this behaviour (Squid, Apache, HAProxy), and others do not (TUX, most
1622 hardware-based load balancers). So the probability for a closed input channel
Willy Tarreau198a7442008-01-17 12:05:32 +01001623 to represent a user hitting the "STOP" button is close to 100%, and the risk
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001624 of being the single component to break rare but valid traffic is extremely
1625 low, which adds to the temptation to be able to abort a session early while
1626 still not served and not pollute the servers.
1627
1628 In HAProxy, the user can choose the desired behaviour using the option
1629 "abortonclose". By default (without the option) the behaviour is HTTP
1630 compliant and aborted requests will be served. But when the option is
1631 specified, a session with an incoming channel closed will be aborted while
1632 it is still possible, either pending in the queue for a connection slot, or
1633 during the connection establishment if the server has not yet acknowledged
1634 the connection request. This considerably reduces the queue size and the load
1635 on saturated servers when users are tempted to click on STOP, which in turn
1636 reduces the response time for other users.
1637
1638 If this option has been enabled in a "defaults" section, it can be disabled
1639 in a specific instance by prepending the "no" keyword before it.
1640
1641 See also : "timeout queue" and server's "maxconn" and "maxqueue" parameters
1642
1643
1644option allbackups
1645no option allbackups
1646 Use either all backup servers at a time or only the first one
1647 May be used in sections : defaults | frontend | listen | backend
1648 yes | no | yes | yes
1649 Arguments : none
1650
1651 By default, the first operational backup server gets all traffic when normal
1652 servers are all down. Sometimes, it may be preferred to use multiple backups
1653 at once, because one will not be enough. When "option allbackups" is enabled,
1654 the load balancing will be performed among all backup servers when all normal
1655 ones are unavailable. The same load balancing algorithm will be used and the
1656 servers' weights will be respected. Thus, there will not be any priority
1657 order between the backup servers anymore.
1658
1659 This option is mostly used with static server farms dedicated to return a
1660 "sorry" page when an application is completely offline.
1661
1662 If this option has been enabled in a "defaults" section, it can be disabled
1663 in a specific instance by prepending the "no" keyword before it.
1664
1665
1666option checkcache
1667no option checkcache
1668 Analyze all server responses and block requests with cachable cookies
1669 May be used in sections : defaults | frontend | listen | backend
1670 yes | no | yes | yes
1671 Arguments : none
1672
1673 Some high-level frameworks set application cookies everywhere and do not
1674 always let enough control to the developer to manage how the responses should
1675 be cached. When a session cookie is returned on a cachable object, there is a
1676 high risk of session crossing or stealing between users traversing the same
1677 caches. In some situations, it is better to block the response than to let
1678 some sensible session information go in the wild.
1679
1680 The option "checkcache" enables deep inspection of all server responses for
1681 strict compliance with HTTP specification in terms of cachability. It
Willy Tarreau198a7442008-01-17 12:05:32 +01001682 carefully checks "Cache-control", "Pragma" and "Set-cookie" headers in server
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001683 response to check if there's a risk of caching a cookie on a client-side
1684 proxy. When this option is enabled, the only responses which can be delivered
Willy Tarreau198a7442008-01-17 12:05:32 +01001685 to the client are :
1686 - all those without "Set-Cookie" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001687 - all those with a return code other than 200, 203, 206, 300, 301, 410,
Willy Tarreau198a7442008-01-17 12:05:32 +01001688 provided that the server has not set a "Cache-control: public" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001689 - all those that come from a POST request, provided that the server has not
1690 set a 'Cache-Control: public' header ;
1691 - those with a 'Pragma: no-cache' header
1692 - those with a 'Cache-control: private' header
1693 - those with a 'Cache-control: no-store' header
1694 - those with a 'Cache-control: max-age=0' header
1695 - those with a 'Cache-control: s-maxage=0' header
1696 - those with a 'Cache-control: no-cache' header
1697 - those with a 'Cache-control: no-cache="set-cookie"' header
1698 - those with a 'Cache-control: no-cache="set-cookie,' header
1699 (allowing other fields after set-cookie)
1700
1701 If a response doesn't respect these requirements, then it will be blocked
Willy Tarreau198a7442008-01-17 12:05:32 +01001702 just as if it was from an "rspdeny" filter, with an "HTTP 502 bad gateway".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001703 The session state shows "PH--" meaning that the proxy blocked the response
1704 during headers processing. Additionnaly, an alert will be sent in the logs so
1705 that admins are informed that there's something to be fixed.
1706
1707 Due to the high impact on the application, the application should be tested
1708 in depth with the option enabled before going to production. It is also a
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001709 good practice to always activate it during tests, even if it is not used in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001710 production, as it will report potentially dangerous application behaviours.
1711
1712 If this option has been enabled in a "defaults" section, it can be disabled
1713 in a specific instance by prepending the "no" keyword before it.
1714
1715
1716option clitcpka
1717no option clitcpka
1718 Enable or disable the sending of TCP keepalive packets on the client side
1719 May be used in sections : defaults | frontend | listen | backend
1720 yes | yes | yes | no
1721 Arguments : none
1722
1723 When there is a firewall or any session-aware component between a client and
1724 a server, and when the protocol involves very long sessions with long idle
1725 periods (eg: remote desktops), there is a risk that one of the intermediate
1726 components decides to expire a session which has remained idle for too long.
1727
1728 Enabling socket-level TCP keep-alives makes the system regularly send packets
1729 to the other end of the connection, leaving it active. The delay between
1730 keep-alive probes is controlled by the system only and depends both on the
1731 operating system and its tuning parameters.
1732
1733 It is important to understand that keep-alive packets are neither emitted nor
1734 received at the application level. It is only the network stacks which sees
1735 them. For this reason, even if one side of the proxy already uses keep-alives
1736 to maintain its connection alive, those keep-alive packets will not be
1737 forwarded to the other side of the proxy.
1738
1739 Please note that this has nothing to do with HTTP keep-alive.
1740
1741 Using option "clitcpka" enables the emission of TCP keep-alive probes on the
1742 client side of a connection, which should help when session expirations are
1743 noticed between HAProxy and a client.
1744
1745 If this option has been enabled in a "defaults" section, it can be disabled
1746 in a specific instance by prepending the "no" keyword before it.
1747
1748 See also : "option srvtcpka", "option tcpka"
1749
1750
Willy Tarreau0ba27502007-12-24 16:55:16 +01001751option contstats
1752 Enable continuous traffic statistics updates
1753 May be used in sections : defaults | frontend | listen | backend
1754 yes | yes | yes | no
1755 Arguments : none
1756
1757 By default, counters used for statistics calculation are incremented
1758 only when a session finishes. It works quite well when serving small
1759 objects, but with big ones (for example large images or archives) or
1760 with A/V streaming, a graph generated from haproxy counters looks like
1761 a hedgehog. With this option enabled counters get incremented continuously,
1762 during a whole session. Recounting touches a hotpath directly so
1763 it is not enabled by default, as it has small performance impact (~0.5%).
1764
1765
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001766option dontlognull
1767no option dontlognull
1768 Enable or disable logging of null connections
1769 May be used in sections : defaults | frontend | listen | backend
1770 yes | yes | yes | no
1771 Arguments : none
1772
1773 In certain environments, there are components which will regularly connect to
1774 various systems to ensure that they are still alive. It can be the case from
1775 another load balancer as well as from monitoring systems. By default, even a
1776 simple port probe or scan will produce a log. If those connections pollute
1777 the logs too much, it is possible to enable option "dontlognull" to indicate
1778 that a connection on which no data has been transferred will not be logged,
1779 which typically corresponds to those probes.
1780
1781 It is generally recommended not to use this option in uncontrolled
1782 environments (eg: internet), otherwise scans and other malicious activities
1783 would not be logged.
1784
1785 If this option has been enabled in a "defaults" section, it can be disabled
1786 in a specific instance by prepending the "no" keyword before it.
1787
Willy Tarreauced27012008-01-17 20:35:34 +01001788 See also : "log", "monitor-net", "monitor-uri" and section 2.6 about logging.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001789
1790
1791option forceclose
1792no option forceclose
1793 Enable or disable active connection closing after response is transferred.
1794 May be used in sections : defaults | frontend | listen | backend
1795 yes | no | yes | yes
1796 Arguments : none
1797
1798 Some HTTP servers do not necessarily close the connections when they receive
1799 the "Connection: close" set by "option httpclose", and if the client does not
1800 close either, then the connection remains open till the timeout expires. This
1801 causes high number of simultaneous connections on the servers and shows high
1802 global session times in the logs.
1803
1804 When this happens, it is possible to use "option forceclose". It will
1805 actively close the outgoing server channel as soon as the server begins to
1806 reply and only if the request buffer is empty. Note that this should NOT be
1807 used if CONNECT requests are expected between the client and the server. This
1808 option implicitly enables the "httpclose" option.
1809
1810 If this option has been enabled in a "defaults" section, it can be disabled
1811 in a specific instance by prepending the "no" keyword before it.
1812
1813 See also : "option httpclose"
1814
1815
Willy Tarreauc27debf2008-01-06 08:57:02 +01001816option forwardfor [ except <network> ]
1817 Enable insertion of the X-Forwarded-For header to requests sent to servers
1818 May be used in sections : defaults | frontend | listen | backend
1819 yes | yes | yes | yes
1820 Arguments :
1821 <network> is an optional argument used to disable this option for sources
1822 matching <network>
1823
1824 Since HAProxy works in reverse-proxy mode, the servers see its IP address as
1825 their client address. This is sometimes annoying when the client's IP address
1826 is expected in server logs. To solve this problem, the well-known HTTP header
1827 "X-Forwarded-For" may be added by HAProxy to all requests sent to the server.
1828 This header contains a value representing the client's IP address. Since this
1829 header is always appended at the end of the existing header list, the server
1830 must be configured to always use the last occurrence of this header only. See
1831 the server's manual to find how to enable use of this standard header.
1832
1833 Sometimes, a same HAProxy instance may be shared between a direct client
1834 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
1835 used to decrypt HTTPS traffic). It is possible to disable the addition of the
1836 header for a known source address or network by adding the "except" keyword
1837 followed by the network address. In this case, any source IP matching the
1838 network will not cause an addition of this header. Most common uses are with
1839 private networks or 127.0.0.1.
1840
1841 This option may be specified either in the frontend or in the backend. If at
1842 least one of them uses it, the header will be added.
1843
1844 It is important to note that as long as HAProxy does not support keep-alive
1845 connections, only the first request of a connection will receive the header.
1846 For this reason, it is important to ensure that "option httpclose" is set
1847 when using this option.
1848
1849 Example :
1850 # Public HTTP address also used by stunnel on the same machine
1851 frontend www
1852 mode http
1853 option forwardfor except 127.0.0.1 # stunnel already adds the header
1854
1855 See also : "option httpclose"
1856
1857
1858option http_proxy
1859no option http_proxy
1860 Enable or disable plain HTTP proxy mode
1861 May be used in sections : defaults | frontend | listen | backend
1862 yes | yes | yes | yes
1863 Arguments : none
1864
1865 It sometimes happens that people need a pure HTTP proxy which understands
1866 basic proxy requests without caching nor any fancy feature. In this case,
1867 it may be worth setting up an HAProxy instance with the "option http_proxy"
1868 set. In this mode, no server is declared, and the connection is forwarded to
1869 the IP address and port found in the URL after the "http://" scheme.
1870
1871 No host address resolution is performed, so this only works when pure IP
1872 addresses are passed. Since this option's usage perimeter is rather limited,
1873 it will probably be used only by experts who know they need exactly it. Last,
1874 if the clients are susceptible of sending keep-alive requests, it will be
1875 needed to add "option http_close" to ensure that all requests will correctly
1876 be analyzed.
1877
1878 If this option has been enabled in a "defaults" section, it can be disabled
1879 in a specific instance by prepending the "no" keyword before it.
1880
1881 Example :
1882 # this backend understands HTTP proxy requests and forwards them directly.
1883 backend direct_forward
1884 option httpclose
1885 option http_proxy
1886
1887 See also : "option httpclose"
1888
1889
1890option httpchk
1891option httpchk <uri>
1892option httpchk <method> <uri>
1893option httpchk <method> <uri> <version>
1894 Enable HTTP protocol to check on the servers health
1895 May be used in sections : defaults | frontend | listen | backend
1896 yes | no | yes | yes
1897 Arguments :
1898 <method> is the optional HTTP method used with the requests. When not set,
1899 the "OPTIONS" method is used, as it generally requires low server
1900 processing and is easy to filter out from the logs. Any method
1901 may be used, though it is not recommended to invent non-standard
1902 ones.
1903
1904 <uri> is the URI referenced in the HTTP requests. It defaults to " / "
1905 which is accessible by default on almost any server, but may be
1906 changed to any other URI. Query strings are permitted.
1907
1908 <version> is the optional HTTP version string. It defaults to "HTTP/1.0"
1909 but some servers might behave incorrectly in HTTP 1.0, so turning
1910 it to HTTP/1.1 may sometimes help. Note that the Host field is
1911 mandatory in HTTP/1.1, and as a trick, it is possible to pass it
1912 after "\r\n" following the version string.
1913
1914 By default, server health checks only consist in trying to establish a TCP
1915 connection. When "option httpchk" is specified, a complete HTTP request is
1916 sent once the TCP connection is established, and responses 2xx and 3xx are
1917 considered valid, while all other ones indicate a server failure, including
1918 the lack of any response.
1919
1920 The port and interval are specified in the server configuration.
1921
1922 This option does not necessarily require an HTTP backend, it also works with
1923 plain TCP backends. This is particularly useful to check simple scripts bound
1924 to some dedicated ports using the inetd daemon.
1925
1926 Examples :
1927 # Relay HTTPS traffic to Apache instance and check service availability
1928 # using HTTP request "OPTIONS * HTTP/1.1" on port 80.
1929 backend https_relay
1930 mode tcp
Willy Tarreauebaf21a2008-03-21 20:17:14 +01001931 option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
Willy Tarreauc27debf2008-01-06 08:57:02 +01001932 server apache1 192.168.1.1:443 check port 80
1933
1934 See also : "option ssl-hello-chk", "option smtpchk", "http-check" and the
1935 "check", "port" and "interval" server options.
1936
1937
1938option httpclose
1939no option httpclose
1940 Enable or disable passive HTTP connection closing
1941 May be used in sections : defaults | frontend | listen | backend
1942 yes | yes | yes | yes
1943 Arguments : none
1944
1945 As stated in section 2.1, HAProxy does not yes support the HTTP keep-alive
1946 mode. So by default, if a client communicates with a server in this mode, it
1947 will only analyze, log, and process the first request of each connection. To
1948 workaround this limitation, it is possible to specify "option httpclose". It
1949 will check if a "Connection: close" header is already set in each direction,
1950 and will add one if missing. Each end should react to this by actively
1951 closing the TCP connection after each transfer, thus resulting in a switch to
1952 the HTTP close mode. Any "Connection" header different from "close" will also
1953 be removed.
1954
1955 It seldom happens that some servers incorrectly ignore this header and do not
1956 close the connection eventough they reply "Connection: close". For this
1957 reason, they are not compatible with older HTTP 1.0 browsers. If this
1958 happens it is possible to use the "option forceclose" which actively closes
1959 the request connection once the server responds.
1960
1961 This option may be set both in a frontend and in a backend. It is enabled if
1962 at least one of the frontend or backend holding a connection has it enabled.
1963 If "option forceclose" is specified too, it has precedence over "httpclose".
1964
1965 If this option has been enabled in a "defaults" section, it can be disabled
1966 in a specific instance by prepending the "no" keyword before it.
1967
1968 See also : "option forceclose"
1969
1970
1971option httplog
1972 Enable logging of HTTP request, session state and timers
1973 May be used in sections : defaults | frontend | listen | backend
1974 yes | yes | yes | yes
1975 Arguments : none
1976
1977 By default, the log output format is very poor, as it only contains the
1978 source and destination addresses, and the instance name. By specifying
1979 "option httplog", each log line turns into a much richer format including,
1980 but not limited to, the HTTP request, the connection timers, the session
1981 status, the connections numbers, the captured headers and cookies, the
1982 frontend, backend and server name, and of course the source address and
1983 ports.
1984
1985 This option may be set either in the frontend or the backend.
1986
Willy Tarreauced27012008-01-17 20:35:34 +01001987 See also : section 2.6 about logging.
Willy Tarreauc27debf2008-01-06 08:57:02 +01001988
Willy Tarreauc27debf2008-01-06 08:57:02 +01001989
1990option logasap
1991no option logasap
1992 Enable or disable early logging of HTTP requests
1993 May be used in sections : defaults | frontend | listen | backend
1994 yes | yes | yes | no
1995 Arguments : none
1996
1997 By default, HTTP requests are logged upon termination so that the total
1998 transfer time and the number of bytes appear in the logs. When large objects
1999 are being transferred, it may take a while before the request appears in the
2000 logs. Using "option logasap", the request gets logged as soon as the server
2001 sends the complete headers. The only missing information in the logs will be
2002 the total number of bytes which will indicate everything except the amount
2003 of data transferred, and the total time which will not take the transfer
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002004 time into account. In such a situation, it's a good practice to capture the
Willy Tarreauc27debf2008-01-06 08:57:02 +01002005 "Content-Length" response header so that the logs at least indicate how many
2006 bytes are expected to be transferred.
2007
Willy Tarreauced27012008-01-17 20:35:34 +01002008 See also : "option httplog", "capture response header", and section 2.6 about
Willy Tarreauc27debf2008-01-06 08:57:02 +01002009 logging.
2010
2011
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002012option nolinger
2013no option nolinger
2014 Enable or disable immediate session ressource cleaning after close
2015 May be used in sections: defaults | frontend | listen | backend
2016 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002017 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002018
2019 When clients or servers abort connections in a dirty way (eg: they are
2020 physically disconnected), the session timeouts triggers and the session is
2021 closed. But it will remain in FIN_WAIT1 state for some time in the system,
2022 using some resources and possibly limiting the ability to establish newer
2023 connections.
2024
2025 When this happens, it is possible to activate "option nolinger" which forces
2026 the system to immediately remove any socket's pending data on close. Thus,
2027 the session is instantly purged from the system's tables. This usually has
2028 side effects such as increased number of TCP resets due to old retransmits
2029 getting immediately rejected. Some firewalls may sometimes complain about
2030 this too.
2031
2032 For this reason, it is not recommended to use this option when not absolutely
2033 needed. You know that you need it when you have thousands of FIN_WAIT1
2034 sessions on your system (TIME_WAIT ones do not count).
2035
2036 This option may be used both on frontends and backends, depending on the side
2037 where it is required. Use it on the frontend for clients, and on the backend
2038 for servers.
2039
2040 If this option has been enabled in a "defaults" section, it can be disabled
2041 in a specific instance by prepending the "no" keyword before it.
2042
2043
2044option persist
2045no option persist
2046 Enable or disable forced persistence on down servers
2047 May be used in sections: defaults | frontend | listen | backend
2048 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002049 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002050
2051 When an HTTP request reaches a backend with a cookie which references a dead
2052 server, by default it is redispatched to another server. It is possible to
2053 force the request to be sent to the dead server first using "option persist"
2054 if absolutely needed. A common use case is when servers are under extreme
2055 load and spend their time flapping. In this case, the users would still be
2056 directed to the server they opened the session on, in the hope they would be
2057 correctly served. It is recommended to use "option redispatch" in conjunction
2058 with this option so that in the event it would not be possible to connect to
2059 the server at all (server definitely dead), the client would finally be
2060 redirected to another valid server.
2061
2062 If this option has been enabled in a "defaults" section, it can be disabled
2063 in a specific instance by prepending the "no" keyword before it.
2064
2065 See also : "option redispatch", "retries"
2066
2067
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002068option redispatch
2069no option redispatch
2070 Enable or disable session redistribution in case of connection failure
2071 May be used in sections: defaults | frontend | listen | backend
2072 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002073 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002074
2075 In HTTP mode, if a server designated by a cookie is down, clients may
2076 definitely stick to it because they cannot flush the cookie, so they will not
2077 be able to access the service anymore.
2078
2079 Specifying "option redispatch" will allow the proxy to break their
2080 persistence and redistribute them to a working server.
2081
2082 It also allows to retry last connection to another server in case of multiple
2083 connection failures. Of course, it requires having "retries" set to a nonzero
2084 value.
2085
2086 This form is the preferred form, which replaces both the "redispatch" and
2087 "redisp" keywords.
2088
2089 If this option has been enabled in a "defaults" section, it can be disabled
2090 in a specific instance by prepending the "no" keyword before it.
2091
2092 See also : "redispatch", "retries"
2093
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002094
2095option smtpchk
2096option smtpchk <hello> <domain>
2097 Use SMTP health checks for server testing
2098 May be used in sections : defaults | frontend | listen | backend
2099 yes | no | yes | yes
2100 Arguments :
2101 <hello> is an optional argument. It is the "hello" command to use. It can
2102 be either "HELO" (for SMTP) or "EHLO" (for ESTMP). All other
2103 values will be turned into the default command ("HELO").
2104
2105 <domain> is the domain name to present to the server. It may only be
2106 specified (and is mandatory) if the hello command has been
2107 specified. By default, "localhost" is used.
2108
2109 When "option smtpchk" is set, the health checks will consist in TCP
2110 connections followed by an SMTP command. By default, this command is
2111 "HELO localhost". The server's return code is analyzed and only return codes
2112 starting with a "2" will be considered as valid. All other responses,
2113 including a lack of response will constitute an error and will indicate a
2114 dead server.
2115
2116 This test is meant to be used with SMTP servers or relays. Depending on the
2117 request, it is possible that some servers do not log each connection attempt,
2118 so you may want to experiment to improve the behaviour. Using telnet on port
2119 25 is often easier than adjusting the configuration.
2120
2121 Most often, an incoming SMTP server needs to see the client's IP address for
2122 various purposes, including spam filtering, anti-spoofing and logging. When
2123 possible, it is often wise to masquerade the client's IP address when
2124 connecting to the server using the "usesrc" argument of the "source" keyword,
2125 which requires the cttproxy feature to be compiled in.
2126
2127 Example :
2128 option smtpchk HELO mydomain.org
2129
2130 See also : "option httpchk", "source"
2131
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002132
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002133option srvtcpka
2134no option srvtcpka
2135 Enable or disable the sending of TCP keepalive packets on the server side
2136 May be used in sections : defaults | frontend | listen | backend
2137 yes | no | yes | yes
2138 Arguments : none
2139
2140 When there is a firewall or any session-aware component between a client and
2141 a server, and when the protocol involves very long sessions with long idle
2142 periods (eg: remote desktops), there is a risk that one of the intermediate
2143 components decides to expire a session which has remained idle for too long.
2144
2145 Enabling socket-level TCP keep-alives makes the system regularly send packets
2146 to the other end of the connection, leaving it active. The delay between
2147 keep-alive probes is controlled by the system only and depends both on the
2148 operating system and its tuning parameters.
2149
2150 It is important to understand that keep-alive packets are neither emitted nor
2151 received at the application level. It is only the network stacks which sees
2152 them. For this reason, even if one side of the proxy already uses keep-alives
2153 to maintain its connection alive, those keep-alive packets will not be
2154 forwarded to the other side of the proxy.
2155
2156 Please note that this has nothing to do with HTTP keep-alive.
2157
2158 Using option "srvtcpka" enables the emission of TCP keep-alive probes on the
2159 server side of a connection, which should help when session expirations are
2160 noticed between HAProxy and a server.
2161
2162 If this option has been enabled in a "defaults" section, it can be disabled
2163 in a specific instance by prepending the "no" keyword before it.
2164
2165 See also : "option clitcpka", "option tcpka"
2166
2167
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002168option ssl-hello-chk
2169 Use SSLv3 client hello health checks for server testing
2170 May be used in sections : defaults | frontend | listen | backend
2171 yes | no | yes | yes
2172 Arguments : none
2173
2174 When some SSL-based protocols are relayed in TCP mode through HAProxy, it is
2175 possible to test that the server correctly talks SSL instead of just testing
2176 that it accepts the TCP connection. When "option ssl-hello-chk" is set, pure
2177 SSLv3 client hello messages are sent once the connection is established to
2178 the server, and the response is analyzed to find an SSL server hello message.
2179 The server is considered valid only when the response contains this server
2180 hello message.
2181
2182 All servers tested till there correctly reply to SSLv3 client hello messages,
2183 and most servers tested do not even log the requests containing only hello
2184 messages, which is appreciable.
2185
2186 See also: "option httpchk"
2187
2188
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002189option tcpka
2190 Enable or disable the sending of TCP keepalive packets on both sides
2191 May be used in sections : defaults | frontend | listen | backend
2192 yes | yes | yes | yes
2193 Arguments : none
2194
2195 When there is a firewall or any session-aware component between a client and
2196 a server, and when the protocol involves very long sessions with long idle
2197 periods (eg: remote desktops), there is a risk that one of the intermediate
2198 components decides to expire a session which has remained idle for too long.
2199
2200 Enabling socket-level TCP keep-alives makes the system regularly send packets
2201 to the other end of the connection, leaving it active. The delay between
2202 keep-alive probes is controlled by the system only and depends both on the
2203 operating system and its tuning parameters.
2204
2205 It is important to understand that keep-alive packets are neither emitted nor
2206 received at the application level. It is only the network stacks which sees
2207 them. For this reason, even if one side of the proxy already uses keep-alives
2208 to maintain its connection alive, those keep-alive packets will not be
2209 forwarded to the other side of the proxy.
2210
2211 Please note that this has nothing to do with HTTP keep-alive.
2212
2213 Using option "tcpka" enables the emission of TCP keep-alive probes on both
2214 the client and server sides of a connection. Note that this is meaningful
2215 only in "defaults" or "listen" sections. If this option is used in a
2216 frontend, only the client side will get keep-alives, and if this option is
2217 used in a backend, only the server side will get keep-alives. For this
2218 reason, it is strongly recommended to explicitly use "option clitcpka" and
2219 "option srvtcpka" when the configuration is split between frontends and
2220 backends.
2221
2222 See also : "option clitcpka", "option srvtcpka"
2223
Willy Tarreau844e3c52008-01-11 16:28:18 +01002224
2225option tcplog
2226 Enable advanced logging of TCP connections with session state and timers
2227 May be used in sections : defaults | frontend | listen | backend
2228 yes | yes | yes | yes
2229 Arguments : none
2230
2231 By default, the log output format is very poor, as it only contains the
2232 source and destination addresses, and the instance name. By specifying
2233 "option tcplog", each log line turns into a much richer format including, but
2234 not limited to, the connection timers, the session status, the connections
2235 numbers, the frontend, backend and server name, and of course the source
2236 address and ports. This option is useful for pure TCP proxies in order to
2237 find which of the client or server disconnects or times out. For normal HTTP
2238 proxies, it's better to use "option httplog" which is even more complete.
2239
2240 This option may be set either in the frontend or the backend.
2241
Willy Tarreauced27012008-01-17 20:35:34 +01002242 See also : "option httplog", and section 2.6 about logging.
Willy Tarreau844e3c52008-01-11 16:28:18 +01002243
2244
2245option tcpsplice [ experimental ]
2246 Enable linux kernel-based acceleration of data relaying
2247 May be used in sections : defaults | frontend | listen | backend
2248 yes | yes | yes | yes
2249 Arguments : none
2250
2251 This option is only available when HAProxy has been built for use on Linux
2252 with USE_TCPSPLICE=1. This option requires a kernel patch which is available
2253 on http://www.linux-l7sw.org/.
2254
2255 When "option tcpsplice" is set, as soon as the server's response headers have
2256 been transferred, the session handling is transferred to the kernel which
2257 will forward all subsequent data from the server to the client untill the
2258 session closes. This leads to much faster data transfers between client and
2259 server since the data is not copied twice between kernel and user space, but
2260 there are some limitations such as the lack of information about the number
2261 of bytes transferred and the total transfer time.
2262
2263 This is an experimental feature. It happens to reliably work but issues
2264 caused by corner cases are to be expected.
2265
2266 Note that this option requires that the process permanently runs with
2267 CAP_NETADMIN privileges, which most often translates into running as root.
2268
2269
2270option transparent
2271no option transparent
2272 Enable client-side transparent proxying
2273 May be used in sections : defaults | frontend | listen | backend
2274 yes | yes | yes | no
2275 Arguments : none
2276
2277 This option was introduced in order to provide layer 7 persistence to layer 3
2278 load balancers. The idea is to use the OS's ability to redirect an incoming
2279 connection for a remote address to a local process (here HAProxy), and let
2280 this process know what address was initially requested. When this option is
2281 used, sessions without cookies will be forwarded to the original destination
2282 IP address of the incoming request (which should match that of another
2283 equipment), while requests with cookies will still be forwarded to the
2284 appropriate server.
2285
2286 Note that contrary to a common belief, this option does NOT make HAProxy
2287 present the client's IP to the server when establishing the connection.
2288
2289 Use of this option is really discouraged, and since no really valid use of it
2290 has been reported for years, it will probably be removed in future versions.
2291
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002292 See also: the "usersrc" argument of the "source" keyword, and the
2293 "transparent" option of the "bind" keyword.
Willy Tarreau844e3c52008-01-11 16:28:18 +01002294
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002295
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002296redisp (deprecated)
2297redispatch (deprecated)
2298 Enable or disable session redistribution in case of connection failure
2299 May be used in sections: defaults | frontend | listen | backend
2300 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002301 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002302
2303 In HTTP mode, if a server designated by a cookie is down, clients may
2304 definitely stick to it because they cannot flush the cookie, so they will not
2305 be able to access the service anymore.
2306
2307 Specifying "redispatch" will allow the proxy to break their persistence and
2308 redistribute them to a working server.
2309
2310 It also allows to retry last connection to another server in case of multiple
2311 connection failures. Of course, it requires having "retries" set to a nonzero
2312 value.
2313
2314 This form is deprecated, do not use it in any new configuration, use the new
2315 "option redispatch" instead.
2316
2317 See also : "option redispatch"
2318
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002319
Willy Tarreau303c0352008-01-17 19:01:39 +01002320reqadd <string>
2321 Add a header at the end of the HTTP request
2322 May be used in sections : defaults | frontend | listen | backend
2323 no | yes | yes | yes
2324 Arguments :
2325 <string> is the complete line to be added. Any space or known delimiter
2326 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002327 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002328
2329 A new line consisting in <string> followed by a line feed will be added after
2330 the last header of an HTTP request.
2331
2332 Header transformations only apply to traffic which passes through HAProxy,
2333 and not to traffic generated by HAProxy, such as health-checks or error
2334 responses.
2335
Willy Tarreauced27012008-01-17 20:35:34 +01002336 See also: "rspadd" and section 2.5 about HTTP header manipulation
Willy Tarreau303c0352008-01-17 19:01:39 +01002337
2338
2339reqallow <search>
2340reqiallow <search> (ignore case)
2341 Definitely allow an HTTP request if a line matches a regular expression
2342 May be used in sections : defaults | frontend | listen | backend
2343 no | yes | yes | yes
2344 Arguments :
2345 <search> is the regular expression applied to HTTP headers and to the
2346 request line. This is an extended regular expression. Parenthesis
2347 grouping is supported and no preliminary backslash is required.
2348 Any space or known delimiter must be escaped using a backslash
2349 ('\'). The pattern applies to a full line at a time. The
2350 "reqallow" keyword strictly matches case while "reqiallow"
2351 ignores case.
2352
2353 A request containing any line which matches extended regular expression
2354 <search> will mark the request as allowed, even if any later test would
2355 result in a deny. The test applies both to the request line and to request
2356 headers. Keep in mind that URLs in request line are case-sensitive while
2357 header names are not.
2358
2359 It is easier, faster and more powerful to use ACLs to write access policies.
2360 Reqdeny, reqallow and reqpass should be avoided in new designs.
2361
2362 Example :
2363 # allow www.* but refuse *.local
2364 reqiallow ^Host:\ www\.
2365 reqideny ^Host:\ .*\.local
2366
Willy Tarreauced27012008-01-17 20:35:34 +01002367 See also: "reqdeny", "acl", "block" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002368 manipulation
2369
2370
2371reqdel <search>
2372reqidel <search> (ignore case)
2373 Delete all headers matching a regular expression in an HTTP request
2374 May be used in sections : defaults | frontend | listen | backend
2375 no | yes | yes | yes
2376 Arguments :
2377 <search> is the regular expression applied to HTTP headers and to the
2378 request line. This is an extended regular expression. Parenthesis
2379 grouping is supported and no preliminary backslash is required.
2380 Any space or known delimiter must be escaped using a backslash
2381 ('\'). The pattern applies to a full line at a time. The "reqdel"
2382 keyword strictly matches case while "reqidel" ignores case.
2383
2384 Any header line matching extended regular expression <search> in the request
2385 will be completely deleted. Most common use of this is to remove unwanted
2386 and/or dangerous headers or cookies from a request before passing it to the
2387 next servers.
2388
2389 Header transformations only apply to traffic which passes through HAProxy,
2390 and not to traffic generated by HAProxy, such as health-checks or error
2391 responses. Keep in mind that header names are not case-sensitive.
2392
2393 Example :
2394 # remove X-Forwarded-For header and SERVER cookie
2395 reqidel ^X-Forwarded-For:.*
2396 reqidel ^Cookie:.*SERVER=
2397
Willy Tarreauced27012008-01-17 20:35:34 +01002398 See also: "reqadd", "reqrep", "rspdel" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002399 manipulation
2400
2401
2402reqdeny <search>
2403reqideny <search> (ignore case)
2404 Deny an HTTP request if a line matches a regular expression
2405 May be used in sections : defaults | frontend | listen | backend
2406 no | yes | yes | yes
2407 Arguments :
2408 <search> is the regular expression applied to HTTP headers and to the
2409 request line. This is an extended regular expression. Parenthesis
2410 grouping is supported and no preliminary backslash is required.
2411 Any space or known delimiter must be escaped using a backslash
2412 ('\'). The pattern applies to a full line at a time. The
2413 "reqdeny" keyword strictly matches case while "reqideny" ignores
2414 case.
2415
2416 A request containing any line which matches extended regular expression
2417 <search> will mark the request as denied, even if any later test would
2418 result in an allow. The test applies both to the request line and to request
2419 headers. Keep in mind that URLs in request line are case-sensitive while
2420 header names are not.
2421
Willy Tarreauced27012008-01-17 20:35:34 +01002422 A denied request will generate an "HTTP 403 forbidden" response once the
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002423 complete request has been parsed. This is consistent with what is practiced
Willy Tarreauced27012008-01-17 20:35:34 +01002424 using ACLs.
2425
Willy Tarreau303c0352008-01-17 19:01:39 +01002426 It is easier, faster and more powerful to use ACLs to write access policies.
2427 Reqdeny, reqallow and reqpass should be avoided in new designs.
2428
2429 Example :
2430 # refuse *.local, then allow www.*
2431 reqideny ^Host:\ .*\.local
2432 reqiallow ^Host:\ www\.
2433
Willy Tarreauced27012008-01-17 20:35:34 +01002434 See also: "reqallow", "rspdeny", "acl", "block" and section 2.5 about HTTP
Willy Tarreau303c0352008-01-17 19:01:39 +01002435 header manipulation
2436
2437
2438reqpass <search>
2439reqipass <search> (ignore case)
2440 Ignore any HTTP request line matching a regular expression in next rules
2441 May be used in sections : defaults | frontend | listen | backend
2442 no | yes | yes | yes
2443 Arguments :
2444 <search> is the regular expression applied to HTTP headers and to the
2445 request line. This is an extended regular expression. Parenthesis
2446 grouping is supported and no preliminary backslash is required.
2447 Any space or known delimiter must be escaped using a backslash
2448 ('\'). The pattern applies to a full line at a time. The
2449 "reqpass" keyword strictly matches case while "reqipass" ignores
2450 case.
2451
2452 A request containing any line which matches extended regular expression
2453 <search> will skip next rules, without assigning any deny or allow verdict.
2454 The test applies both to the request line and to request headers. Keep in
2455 mind that URLs in request line are case-sensitive while header names are not.
2456
2457 It is easier, faster and more powerful to use ACLs to write access policies.
2458 Reqdeny, reqallow and reqpass should be avoided in new designs.
2459
2460 Example :
2461 # refuse *.local, then allow www.*, but ignore "www.private.local"
2462 reqipass ^Host:\ www.private\.local
2463 reqideny ^Host:\ .*\.local
2464 reqiallow ^Host:\ www\.
2465
Willy Tarreauced27012008-01-17 20:35:34 +01002466 See also: "reqallow", "reqdeny", "acl", "block" and section 2.5 about HTTP
Willy Tarreau303c0352008-01-17 19:01:39 +01002467 header manipulation
2468
2469
2470reqrep <search> <string>
2471reqirep <search> <string> (ignore case)
2472 Replace a regular expression with a string in an HTTP request line
2473 May be used in sections : defaults | frontend | listen | backend
2474 no | yes | yes | yes
2475 Arguments :
2476 <search> is the regular expression applied to HTTP headers and to the
2477 request line. This is an extended regular expression. Parenthesis
2478 grouping is supported and no preliminary backslash is required.
2479 Any space or known delimiter must be escaped using a backslash
2480 ('\'). The pattern applies to a full line at a time. The "reqrep"
2481 keyword strictly matches case while "reqirep" ignores case.
2482
2483 <string> is the complete line to be added. Any space or known delimiter
2484 must be escaped using a backslash ('\'). References to matched
2485 pattern groups are possible using the common \N form, with N
2486 being a single digit between 0 and 9. Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002487 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002488
2489 Any line matching extended regular expression <search> in the request (both
2490 the request line and header lines) will be completely replaced with <string>.
2491 Most common use of this is to rewrite URLs or domain names in "Host" headers.
2492
2493 Header transformations only apply to traffic which passes through HAProxy,
2494 and not to traffic generated by HAProxy, such as health-checks or error
2495 responses. Note that for increased readability, it is suggested to add enough
2496 spaces between the request and the response. Keep in mind that URLs in
2497 request line are case-sensitive while header names are not.
2498
2499 Example :
2500 # replace "/static/" with "/" at the beginning of any request path.
2501 reqrep ^([^\ ]*)\ /static/(.*) \1\ /\2
2502 # replace "www.mydomain.com" with "www" in the host name.
2503 reqirep ^Host:\ www.mydomain.com Host:\ www
2504
Willy Tarreauced27012008-01-17 20:35:34 +01002505 See also: "reqadd", "reqdel", "rsprep" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002506 manipulation
2507
2508
2509reqtarpit <search>
2510reqitarpit <search> (ignore case)
2511 Tarpit an HTTP request containing a line matching a regular expression
2512 May be used in sections : defaults | frontend | listen | backend
2513 no | yes | yes | yes
2514 Arguments :
2515 <search> is the regular expression applied to HTTP headers and to the
2516 request line. This is an extended regular expression. Parenthesis
2517 grouping is supported and no preliminary backslash is required.
2518 Any space or known delimiter must be escaped using a backslash
2519 ('\'). The pattern applies to a full line at a time. The
2520 "reqtarpit" keyword strictly matches case while "reqitarpit"
2521 ignores case.
2522
2523 A request containing any line which matches extended regular expression
2524 <search> will be tarpitted, which means that it will connect to nowhere, will
Willy Tarreauced27012008-01-17 20:35:34 +01002525 be kept open for a pre-defined time, then will return an HTTP error 500 so
2526 that the attacker does not suspect it has been tarpitted. The status 500 will
2527 be reported in the logs, but the completion flags will indicate "PT". The
Willy Tarreau303c0352008-01-17 19:01:39 +01002528 delay is defined by "timeout tarpit", or "timeout connect" if the former is
2529 not set.
2530
2531 The goal of the tarpit is to slow down robots attacking servers with
2532 identifiable requests. Many robots limit their outgoing number of connections
2533 and stay connected waiting for a reply which can take several minutes to
2534 come. Depending on the environment and attack, it may be particularly
2535 efficient at reducing the load on the network and firewalls.
2536
2537 Example :
2538 # ignore user-agents reporting any flavour of "Mozilla" or "MSIE", but
2539 # block all others.
2540 reqipass ^User-Agent:\.*(Mozilla|MSIE)
2541 reqitarpit ^User-Agent:
2542
Willy Tarreauced27012008-01-17 20:35:34 +01002543 See also: "reqallow", "reqdeny", "reqpass", and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002544 manipulation
2545
2546
2547rspadd <string>
2548 Add a header at the end of the HTTP response
2549 May be used in sections : defaults | frontend | listen | backend
2550 no | yes | yes | yes
2551 Arguments :
2552 <string> is the complete line to be added. Any space or known delimiter
2553 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002554 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002555
2556 A new line consisting in <string> followed by a line feed will be added after
2557 the last header of an HTTP response.
2558
2559 Header transformations only apply to traffic which passes through HAProxy,
2560 and not to traffic generated by HAProxy, such as health-checks or error
2561 responses.
2562
Willy Tarreauced27012008-01-17 20:35:34 +01002563 See also: "reqadd" and section 2.5 about HTTP header manipulation
Willy Tarreau303c0352008-01-17 19:01:39 +01002564
2565
2566rspdel <search>
2567rspidel <search> (ignore case)
2568 Delete all headers matching a regular expression in an HTTP response
2569 May be used in sections : defaults | frontend | listen | backend
2570 no | yes | yes | yes
2571 Arguments :
2572 <search> is the regular expression applied to HTTP headers and to the
2573 response line. This is an extended regular expression, so
2574 parenthesis grouping is supported and no preliminary backslash
2575 is required. Any space or known delimiter must be escaped using
2576 a backslash ('\'). The pattern applies to a full line at a time.
2577 The "rspdel" keyword strictly matches case while "rspidel"
2578 ignores case.
2579
2580 Any header line matching extended regular expression <search> in the response
2581 will be completely deleted. Most common use of this is to remove unwanted
2582 and/or sensible headers or cookies from a response before passing it to the
2583 client.
2584
2585 Header transformations only apply to traffic which passes through HAProxy,
2586 and not to traffic generated by HAProxy, such as health-checks or error
2587 responses. Keep in mind that header names are not case-sensitive.
2588
2589 Example :
2590 # remove the Server header from responses
2591 reqidel ^Server:.*
2592
Willy Tarreauced27012008-01-17 20:35:34 +01002593 See also: "rspadd", "rsprep", "reqdel" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002594 manipulation
2595
2596
2597rspdeny <search>
2598rspideny <search> (ignore case)
2599 Block an HTTP response if a line matches a regular expression
2600 May be used in sections : defaults | frontend | listen | backend
2601 no | yes | yes | yes
2602 Arguments :
2603 <search> is the regular expression applied to HTTP headers and to the
2604 response line. This is an extended regular expression, so
2605 parenthesis grouping is supported and no preliminary backslash
2606 is required. Any space or known delimiter must be escaped using
2607 a backslash ('\'). The pattern applies to a full line at a time.
2608 The "rspdeny" keyword strictly matches case while "rspideny"
2609 ignores case.
2610
2611 A response containing any line which matches extended regular expression
2612 <search> will mark the request as denied. The test applies both to the
2613 response line and to response headers. Keep in mind that header names are not
2614 case-sensitive.
2615
2616 Main use of this keyword is to prevent sensitive information leak and to
Willy Tarreauced27012008-01-17 20:35:34 +01002617 block the response before it reaches the client. If a response is denied, it
2618 will be replaced with an HTTP 502 error so that the client never retrieves
2619 any sensitive data.
Willy Tarreau303c0352008-01-17 19:01:39 +01002620
2621 It is easier, faster and more powerful to use ACLs to write access policies.
2622 Rspdeny should be avoided in new designs.
2623
2624 Example :
2625 # Ensure that no content type matching ms-word will leak
2626 rspideny ^Content-type:\.*/ms-word
2627
Willy Tarreauced27012008-01-17 20:35:34 +01002628 See also: "reqdeny", "acl", "block" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002629 manipulation
2630
2631
2632rsprep <search> <string>
2633rspirep <search> <string> (ignore case)
2634 Replace a regular expression with a string in an HTTP response line
2635 May be used in sections : defaults | frontend | listen | backend
2636 no | yes | yes | yes
2637 Arguments :
2638 <search> is the regular expression applied to HTTP headers and to the
2639 response line. This is an extended regular expression, so
2640 parenthesis grouping is supported and no preliminary backslash
2641 is required. Any space or known delimiter must be escaped using
2642 a backslash ('\'). The pattern applies to a full line at a time.
2643 The "rsprep" keyword strictly matches case while "rspirep"
2644 ignores case.
2645
2646 <string> is the complete line to be added. Any space or known delimiter
2647 must be escaped using a backslash ('\'). References to matched
2648 pattern groups are possible using the common \N form, with N
2649 being a single digit between 0 and 9. Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002650 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002651
2652 Any line matching extended regular expression <search> in the response (both
2653 the response line and header lines) will be completely replaced with
2654 <string>. Most common use of this is to rewrite Location headers.
2655
2656 Header transformations only apply to traffic which passes through HAProxy,
2657 and not to traffic generated by HAProxy, such as health-checks or error
2658 responses. Note that for increased readability, it is suggested to add enough
2659 spaces between the request and the response. Keep in mind that header names
2660 are not case-sensitive.
2661
2662 Example :
2663 # replace "Location: 127.0.0.1:8080" with "Location: www.mydomain.com"
2664 rspirep ^Location:\ 127.0.0.1:8080 Location:\ www.mydomain.com
2665
Willy Tarreauced27012008-01-17 20:35:34 +01002666 See also: "rspadd", "rspdel", "reqrep" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002667 manipulation
2668
2669
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002670server <name> <address>[:port] [param*]
2671 Declare a server in a backend
2672 May be used in sections : defaults | frontend | listen | backend
2673 no | no | yes | yes
2674 Arguments :
2675 <name> is the internal name assigned to this server. This name will
2676 appear in logs and alerts.
2677
2678 <address> is the IPv4 address of the server. Alternatively, a resolvable
2679 hostname is supported, but this name will be resolved during
2680 start-up.
2681
2682 <ports> is an optional port specification. If set, all connections will
2683 be sent to this port. If unset, the same port the client
2684 connected to will be used. The port may also be prefixed by a "+"
2685 or a "-". In this case, the server's port will be determined by
2686 adding this value to the client's port.
2687
2688 <param*> is a list of parameters for this server. The "server" keywords
2689 accepts an important number of options and has a complete section
2690 dedicated to it. Please refer to section 2.4 for more details.
2691
2692 Examples :
2693 server first 10.1.1.1:1080 cookie first check inter 1000
2694 server second 10.1.1.2:1080 cookie second check inter 1000
2695
2696 See also : section 2.4 about server options
2697
2698
2699source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
2700 Set the source address for outgoing connections
2701 May be used in sections : defaults | frontend | listen | backend
2702 yes | no | yes | yes
2703 Arguments :
2704 <addr> is the IPv4 address HAProxy will bind to before connecting to a
2705 server. This address is also used as a source for health checks.
2706 The default value of 0.0.0.0 means that the system will select
2707 the most appropriate address to reach its destination.
2708
2709 <port> is an optional port. It is normally not needed but may be useful
2710 in some very specific contexts. The default value of zero means
2711 the system will select a free port.
2712
2713 <addr2> is the IP address to present to the server when connections are
2714 forwarded in full transparent proxy mode. This is currently only
2715 supported on some patched Linux kernels. When this address is
2716 specified, clients connecting to the server will be presented
2717 with this address, while health checks will still use the address
2718 <addr>.
2719
2720 <port2> is the optional port to present to the server when connections
2721 are forwarded in full transparent proxy mode (see <addr2> above).
2722 The default value of zero means the system will select a free
2723 port.
2724
2725 The "source" keyword is useful in complex environments where a specific
2726 address only is allowed to connect to the servers. It may be needed when a
2727 private address must be used through a public gateway for instance, and it is
2728 known that the system cannot determine the adequate source address by itself.
2729
2730 An extension which is available on certain patched Linux kernels may be used
2731 through the "usesrc" optional keyword. It makes it possible to connect to the
2732 servers with an IP address which does not belong to the system itself. This
2733 is called "full transparent proxy mode". For this to work, the destination
2734 servers have to route their traffic back to this address through the machine
2735 running HAProxy, and IP forwarding must generally be enabled on this machine.
2736
2737 In this "full transparent proxy" mode, it is possible to force a specific IP
2738 address to be presented to the servers. This is not much used in fact. A more
2739 common use is to tell HAProxy to present the client's IP address. For this,
2740 there are two methods :
2741
2742 - present the client's IP and port addresses. This is the most transparent
2743 mode, but it can cause problems when IP connection tracking is enabled on
2744 the machine, because a same connection may be seen twice with different
2745 states. However, this solution presents the huge advantage of not
2746 limiting the system to the 64k outgoing address+port couples, because all
2747 of the client ranges may be used.
2748
2749 - present only the client's IP address and select a spare port. This
2750 solution is still quite elegant but slightly less transparent (downstream
2751 firewalls logs will not match upstream's). It also presents the downside
2752 of limiting the number of concurrent connections to the usual 64k ports.
2753 However, since the upstream and downstream ports are different, local IP
2754 connection tracking on the machine will not be upset by the reuse of the
2755 same session.
2756
2757 Note that depending on the transparent proxy technology used, it may be
2758 required to force the source address. In fact, cttproxy version 2 requires an
2759 IP address in <addr> above, and does not support setting of "0.0.0.0" as the
2760 IP address because it creates NAT entries which much match the exact outgoing
2761 address. Tproxy version 4 and some other kernel patches which work in pure
2762 forwarding mode generally will not have this limitation.
2763
2764 This option sets the default source for all servers in the backend. It may
2765 also be specified in a "defaults" section. Finer source address specification
2766 is possible at the server level using the "source" server option. Refer to
2767 section 2.4 for more information.
2768
2769 Examples :
2770 backend private
2771 # Connect to the servers using our 192.168.1.200 source address
2772 source 192.168.1.200
2773
2774 backend transparent_ssl1
2775 # Connect to the SSL farm from the client's source address
2776 source 192.168.1.200 usesrc clientip
2777
2778 backend transparent_ssl2
2779 # Connect to the SSL farm from the client's source address and port
2780 # not recommended if IP conntrack is present on the local machine.
2781 source 192.168.1.200 usesrc client
2782
2783 backend transparent_ssl3
2784 # Connect to the SSL farm from the client's source address. It
2785 # is more conntrack-friendly.
2786 source 192.168.1.200 usesrc clientip
2787
2788 backend transparent_smtp
2789 # Connect to the SMTP farm from the client's source address/port
2790 # with Tproxy version 4.
2791 source 0.0.0.0 usesrc clientip
2792
2793 See also : the "source" server option in section 2.4, the Tproxy patches for
2794 the Linux kernel on www.balabit.com, the "bind" keyword.
2795
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002796
Willy Tarreau844e3c52008-01-11 16:28:18 +01002797srvtimeout <timeout> (deprecated)
2798 Set the maximum inactivity time on the server side.
2799 May be used in sections : defaults | frontend | listen | backend
2800 yes | no | yes | yes
2801 Arguments :
2802 <timeout> is the timeout value specified in milliseconds by default, but
2803 can be in any other unit if the number is suffixed by the unit,
2804 as explained at the top of this document.
2805
2806 The inactivity timeout applies when the server is expected to acknowledge or
2807 send data. In HTTP mode, this timeout is particularly important to consider
2808 during the first phase of the server's response, when it has to send the
2809 headers, as it directly represents the server's processing time for the
2810 request. To find out what value to put there, it's often good to start with
2811 what would be considered as unacceptable response times, then check the logs
2812 to observe the response time distribution, and adjust the value accordingly.
2813
2814 The value is specified in milliseconds by default, but can be in any other
2815 unit if the number is suffixed by the unit, as specified at the top of this
2816 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
2817 recommended that the client timeout remains equal to the server timeout in
2818 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002819 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01002820 packet losses by specifying timeouts that are slightly above multiples of 3
2821 seconds (eg: 4 or 5 seconds minimum).
2822
2823 This parameter is specific to backends, but can be specified once for all in
2824 "defaults" sections. This is in fact one of the easiest solutions not to
2825 forget about it. An unspecified timeout results in an infinite timeout, which
2826 is not recommended. Such a usage is accepted and works but reports a warning
2827 during startup because it may results in accumulation of expired sessions in
2828 the system if the system's timeouts are not configured either.
2829
2830 This parameter is provided for compatibility but is currently deprecated.
2831 Please use "timeout server" instead.
2832
2833 See also : "timeout server", "timeout client" and "clitimeout".
2834
2835
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002836stats auth <user>:<passwd>
2837 Enable statistics with authentication and grant access to an account
2838 May be used in sections : defaults | frontend | listen | backend
2839 yes | no | yes | yes
2840 Arguments :
2841 <user> is a user name to grant access to
2842
2843 <passwd> is the cleartext password associated to this user
2844
2845 This statement enables statistics with default settings, and restricts access
2846 to declared users only. It may be repeated as many times as necessary to
2847 allow as many users as desired. When a user tries to access the statistics
2848 without a valid account, a "401 Forbidden" response will be returned so that
2849 the browser asks the user to provide a valid user and password. The real
2850 which will be returned to the browser is configurable using "stats realm".
2851
2852 Since the authentication method is HTTP Basic Authentication, the passwords
2853 circulate in cleartext on the network. Thus, it was decided that the
2854 configuration file would also use cleartext passwords to remind the users
2855 that those ones should not be sensible and not shared with any other account.
2856
2857 It is also possible to reduce the scope of the proxies which appear in the
2858 report using "stats scope".
2859
2860 Though this statement alone is enough to enable statistics reporting, it is
2861 recommended to set all other settings in order to avoid relying on default
2862 unobvious parameters.
2863
2864 Example :
2865 # public access (limited to this backend only)
2866 backend public_www
2867 server srv1 192.168.0.1:80
2868 stats enable
2869 stats hide-version
2870 stats scope .
2871 stats uri /admin?stats
2872 stats realm Haproxy\ Statistics
2873 stats auth admin1:AdMiN123
2874 stats auth admin2:AdMiN321
2875
2876 # internal monitoring access (unlimited)
2877 backend private_monitoring
2878 stats enable
2879 stats uri /admin?stats
2880 stats refresh 5s
2881
2882 See also : "stats enable", "stats realm", "stats scope", "stats uri"
2883
2884
2885stats enable
2886 Enable statistics reporting with default settings
2887 May be used in sections : defaults | frontend | listen | backend
2888 yes | no | yes | yes
2889 Arguments : none
2890
2891 This statement enables statistics reporting with default settings defined
2892 at build time. Unless stated otherwise, these settings are used :
2893 - stats uri : /haproxy?stats
2894 - stats realm : "HAProxy Statistics"
2895 - stats auth : no authentication
2896 - stats scope : no restriction
2897
2898 Though this statement alone is enough to enable statistics reporting, it is
2899 recommended to set all other settings in order to avoid relying on default
2900 unobvious parameters.
2901
2902 Example :
2903 # public access (limited to this backend only)
2904 backend public_www
2905 server srv1 192.168.0.1:80
2906 stats enable
2907 stats hide-version
2908 stats scope .
2909 stats uri /admin?stats
2910 stats realm Haproxy\ Statistics
2911 stats auth admin1:AdMiN123
2912 stats auth admin2:AdMiN321
2913
2914 # internal monitoring access (unlimited)
2915 backend private_monitoring
2916 stats enable
2917 stats uri /admin?stats
2918 stats refresh 5s
2919
2920 See also : "stats auth", "stats realm", "stats uri"
2921
2922
2923stats realm <realm>
2924 Enable statistics and set authentication realm
2925 May be used in sections : defaults | frontend | listen | backend
2926 yes | no | yes | yes
2927 Arguments :
2928 <realm> is the name of the HTTP Basic Authentication realm reported to
2929 the browser. The browser uses it to display it in the pop-up
2930 inviting the user to enter a valid username and password.
2931
2932 The realm is read as a single word, so any spaces in it should be escaped
2933 using a backslash ('\').
2934
2935 This statement is useful only in conjunction with "stats auth" since it is
2936 only related to authentication.
2937
2938 Though this statement alone is enough to enable statistics reporting, it is
2939 recommended to set all other settings in order to avoid relying on default
2940 unobvious parameters.
2941
2942 Example :
2943 # public access (limited to this backend only)
2944 backend public_www
2945 server srv1 192.168.0.1:80
2946 stats enable
2947 stats hide-version
2948 stats scope .
2949 stats uri /admin?stats
2950 stats realm Haproxy\ Statistics
2951 stats auth admin1:AdMiN123
2952 stats auth admin2:AdMiN321
2953
2954 # internal monitoring access (unlimited)
2955 backend private_monitoring
2956 stats enable
2957 stats uri /admin?stats
2958 stats refresh 5s
2959
2960 See also : "stats auth", "stats enable", "stats uri"
2961
2962
2963stats refresh <delay>
2964 Enable statistics with automatic refresh
2965 May be used in sections : defaults | frontend | listen | backend
2966 yes | no | yes | yes
2967 Arguments :
2968 <delay> is the suggested refresh delay, specified in seconds, which will
2969 be returned to the browser consulting the report page. While the
2970 browser is free to apply any delay, it will generally respect it
2971 and refresh the page this every seconds. The refresh interval may
2972 be specified in any other non-default time unit, by suffixing the
2973 unit after the value, as explained at the top of this document.
2974
2975 This statement is useful on monitoring displays with a permanent page
2976 reporting the load balancer's activity. When set, the HTML report page will
2977 include a link "refresh"/"stop refresh" so that the user can select whether
2978 he wants automatic refresh of the page or not.
2979
2980 Though this statement alone is enough to enable statistics reporting, it is
2981 recommended to set all other settings in order to avoid relying on default
2982 unobvious parameters.
2983
2984 Example :
2985 # public access (limited to this backend only)
2986 backend public_www
2987 server srv1 192.168.0.1:80
2988 stats enable
2989 stats hide-version
2990 stats scope .
2991 stats uri /admin?stats
2992 stats realm Haproxy\ Statistics
2993 stats auth admin1:AdMiN123
2994 stats auth admin2:AdMiN321
2995
2996 # internal monitoring access (unlimited)
2997 backend private_monitoring
2998 stats enable
2999 stats uri /admin?stats
3000 stats refresh 5s
3001
3002 See also : "stats auth", "stats enable", "stats realm", "stats uri"
3003
3004
3005stats scope { <name> | "." }
3006 Enable statistics and limit access scope
3007 May be used in sections : defaults | frontend | listen | backend
3008 yes | no | yes | yes
3009 Arguments :
3010 <name> is the name of a listen, frontend or backend section to be
3011 reported. The special name "." (a single dot) designates the
3012 section in which the statement appears.
3013
3014 When this statement is specified, only the sections enumerated with this
3015 statement will appear in the report. All other ones will be hidden. This
3016 statement may appear as many times as needed if multiple sections need to be
3017 reported. Please note that the name checking is performed as simple string
3018 comparisons, and that it is never checked that a give section name really
3019 exists.
3020
3021 Though this statement alone is enough to enable statistics reporting, it is
3022 recommended to set all other settings in order to avoid relying on default
3023 unobvious parameters.
3024
3025 Example :
3026 # public access (limited to this backend only)
3027 backend public_www
3028 server srv1 192.168.0.1:80
3029 stats enable
3030 stats hide-version
3031 stats scope .
3032 stats uri /admin?stats
3033 stats realm Haproxy\ Statistics
3034 stats auth admin1:AdMiN123
3035 stats auth admin2:AdMiN321
3036
3037 # internal monitoring access (unlimited)
3038 backend private_monitoring
3039 stats enable
3040 stats uri /admin?stats
3041 stats refresh 5s
3042
3043 See also : "stats auth", "stats enable", "stats realm", "stats uri"
3044
3045
3046stats uri <prefix>
3047 Enable statistics and define the URI prefix to access them
3048 May be used in sections : defaults | frontend | listen | backend
3049 yes | no | yes | yes
3050 Arguments :
3051 <prefix> is the prefix of any URI which will be redirected to stats. This
3052 prefix may contain a question mark ('?') to indicate part of a
3053 query string.
3054
3055 The statistics URI is intercepted on the relayed traffic, so it appears as a
3056 page within the normal application. It is strongly advised to ensure that the
3057 selected URI will never appear in the application, otherwise it will never be
3058 possible to reach it in the application.
3059
3060 The default URI compiled in haproxy is "/haproxy?stats", but this may be
3061 changed at build time, so it's better to always explictly specify it here.
3062 It is generally a good idea to include a question mark in the URI so that
3063 intermediate proxies refrain from caching the results. Also, since any string
3064 beginning with the prefix will be accepted as a stats request, the question
3065 mark helps ensuring that no valid URI will begin with the same words.
3066
3067 It is sometimes very convenient to use "/" as the URI prefix, and put that
3068 statement in a "listen" instance of its own. That makes it easy to dedicate
3069 an address or a port to statistics only.
3070
3071 Though this statement alone is enough to enable statistics reporting, it is
3072 recommended to set all other settings in order to avoid relying on default
3073 unobvious parameters.
3074
3075 Example :
3076 # public access (limited to this backend only)
3077 backend public_www
3078 server srv1 192.168.0.1:80
3079 stats enable
3080 stats hide-version
3081 stats scope .
3082 stats uri /admin?stats
3083 stats realm Haproxy\ Statistics
3084 stats auth admin1:AdMiN123
3085 stats auth admin2:AdMiN321
3086
3087 # internal monitoring access (unlimited)
3088 backend private_monitoring
3089 stats enable
3090 stats uri /admin?stats
3091 stats refresh 5s
3092
3093 See also : "stats auth", "stats enable", "stats realm"
3094
3095
3096stats hide-version
3097 Enable statistics and hide HAProxy version reporting
3098 May be used in sections : defaults | frontend | listen | backend
3099 yes | no | yes | yes
3100 Arguments : none
3101
3102 By default, the stats page reports some useful status information along with
3103 the statistics. Among them is HAProxy's version. However, it is generally
3104 considered dangerous to report precise version to anyone, as it can help them
3105 target known weaknesses with specific attacks. The "stats hide-version"
3106 statement removes the version from the statistics report. This is recommended
3107 for public sites or any site with a weak login/password.
3108
3109 Though this statement alone is enough to enable statistics reporting, it is
3110 recommended to set all other settings in order to avoid relying on default
3111 unobvious parameters.
3112
3113 Example :
3114 # public access (limited to this backend only)
3115 backend public_www
3116 server srv1 192.168.0.1:80
3117 stats enable
3118 stats hide-version
3119 stats scope .
3120 stats uri /admin?stats
3121 stats realm Haproxy\ Statistics
3122 stats auth admin1:AdMiN123
3123 stats auth admin2:AdMiN321
3124
3125 # internal monitoring access (unlimited)
3126 backend private_monitoring
3127 stats enable
3128 stats uri /admin?stats
3129 stats refresh 5s
3130
3131 See also : "stats auth", "stats enable", "stats realm", "stats uri"
3132
3133
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003134timeout check <timeout>
3135 Set additional check timeout, but only after a connection has been already
3136 established.
3137
3138 May be used in sections: defaults | frontend | listen | backend
3139 yes | no | yes | yes
3140 Arguments:
3141 <timeout> is the timeout value specified in milliseconds by default, but
3142 can be in any other unit if the number is suffixed by the unit,
3143 as explained at the top of this document.
3144
3145 If set, haproxy uses min("timeout connect", "inter") as a connect timeout
3146 for check and "timeout check" as an additional read timeout. The "min" is
3147 used so that people running with *very* long "timeout connect" (eg. those
3148 who needed this due to the queue or tarpit) do not slow down their checks.
3149 Of course it is better to use "check queue" and "check tarpit" instead of
3150 long "timeout connect".
3151
3152 If "timeout check" is not set haproxy uses "inter" for complete check
3153 timeout (connect + read) exactly like all <1.3.15 version.
3154
3155 In most cases check request is much simpler and faster to handle than normal
3156 requests and people may want to kick out laggy servers so this timeout should
Willy Tarreau41a340d2008-01-22 12:25:31 +01003157 be smaller than "timeout server".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003158
3159 This parameter is specific to backends, but can be specified once for all in
3160 "defaults" sections. This is in fact one of the easiest solutions not to
3161 forget about it.
3162
Willy Tarreau41a340d2008-01-22 12:25:31 +01003163 See also: "timeout connect", "timeout queue", "timeout server",
3164 "timeout tarpit".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003165
3166
Willy Tarreau0ba27502007-12-24 16:55:16 +01003167timeout client <timeout>
3168timeout clitimeout <timeout> (deprecated)
3169 Set the maximum inactivity time on the client side.
3170 May be used in sections : defaults | frontend | listen | backend
3171 yes | yes | yes | no
3172 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003173 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01003174 can be in any other unit if the number is suffixed by the unit,
3175 as explained at the top of this document.
3176
3177 The inactivity timeout applies when the client is expected to acknowledge or
3178 send data. In HTTP mode, this timeout is particularly important to consider
3179 during the first phase, when the client sends the request, and during the
3180 response while it is reading data sent by the server. The value is specified
3181 in milliseconds by default, but can be in any other unit if the number is
3182 suffixed by the unit, as specified at the top of this document. In TCP mode
3183 (and to a lesser extent, in HTTP mode), it is highly recommended that the
3184 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003185 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01003186 losses by specifying timeouts that are slightly above multiples of 3 seconds
3187 (eg: 4 or 5 seconds).
3188
3189 This parameter is specific to frontends, but can be specified once for all in
3190 "defaults" sections. This is in fact one of the easiest solutions not to
3191 forget about it. An unspecified timeout results in an infinite timeout, which
3192 is not recommended. Such a usage is accepted and works but reports a warning
3193 during startup because it may results in accumulation of expired sessions in
3194 the system if the system's timeouts are not configured either.
3195
3196 This parameter replaces the old, deprecated "clitimeout". It is recommended
3197 to use it to write new configurations. The form "timeout clitimeout" is
3198 provided only by backwards compatibility but its use is strongly discouraged.
3199
3200 See also : "clitimeout", "timeout server".
3201
3202
3203timeout connect <timeout>
3204timeout contimeout <timeout> (deprecated)
3205 Set the maximum time to wait for a connection attempt to a server to succeed.
3206 May be used in sections : defaults | frontend | listen | backend
3207 yes | no | yes | yes
3208 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003209 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01003210 can be in any other unit if the number is suffixed by the unit,
3211 as explained at the top of this document.
3212
3213 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003214 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreau0ba27502007-12-24 16:55:16 +01003215 cover one or several TCP packet losses by specifying timeouts that are
3216 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003217 connect timeout also presets both queue and tarpit timeouts to the same value
3218 if these have not been specified.
Willy Tarreau0ba27502007-12-24 16:55:16 +01003219
3220 This parameter is specific to backends, but can be specified once for all in
3221 "defaults" sections. This is in fact one of the easiest solutions not to
3222 forget about it. An unspecified timeout results in an infinite timeout, which
3223 is not recommended. Such a usage is accepted and works but reports a warning
3224 during startup because it may results in accumulation of failed sessions in
3225 the system if the system's timeouts are not configured either.
3226
3227 This parameter replaces the old, deprecated "contimeout". It is recommended
3228 to use it to write new configurations. The form "timeout contimeout" is
3229 provided only by backwards compatibility but its use is strongly discouraged.
3230
Willy Tarreau41a340d2008-01-22 12:25:31 +01003231 See also: "timeout check", "timeout queue", "timeout server", "contimeout",
3232 "timeout tarpit".
Willy Tarreau0ba27502007-12-24 16:55:16 +01003233
3234
Willy Tarreau036fae02008-01-06 13:24:40 +01003235timeout http-request <timeout>
3236 Set the maximum allowed time to wait for a complete HTTP request
3237 May be used in sections : defaults | frontend | listen | backend
3238 yes | yes | yes | no
3239 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003240 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau036fae02008-01-06 13:24:40 +01003241 can be in any other unit if the number is suffixed by the unit,
3242 as explained at the top of this document.
3243
3244 In order to offer DoS protection, it may be required to lower the maximum
3245 accepted time to receive a complete HTTP request without affecting the client
3246 timeout. This helps protecting against established connections on which
3247 nothing is sent. The client timeout cannot offer a good protection against
3248 this abuse because it is an inactivity timeout, which means that if the
3249 attacker sends one character every now and then, the timeout will not
3250 trigger. With the HTTP request timeout, no matter what speed the client
3251 types, the request will be aborted if it does not complete in time.
3252
3253 Note that this timeout only applies to the header part of the request, and
3254 not to any data. As soon as the empty line is received, this timeout is not
3255 used anymore.
3256
3257 Generally it is enough to set it to a few seconds, as most clients send the
3258 full request immediately upon connection. Add 3 or more seconds to cover TCP
3259 retransmits but that's all. Setting it to very low values (eg: 50 ms) will
3260 generally work on local networks as long as there are no packet losses. This
3261 will prevent people from sending bare HTTP requests using telnet.
3262
3263 If this parameter is not set, the client timeout still applies between each
3264 chunk of the incoming request.
3265
3266 See also : "timeout client".
3267
Willy Tarreau844e3c52008-01-11 16:28:18 +01003268
3269timeout queue <timeout>
3270 Set the maximum time to wait in the queue for a connection slot to be free
3271 May be used in sections : defaults | frontend | listen | backend
3272 yes | no | yes | yes
3273 Arguments :
3274 <timeout> is the timeout value specified in milliseconds by default, but
3275 can be in any other unit if the number is suffixed by the unit,
3276 as explained at the top of this document.
3277
3278 When a server's maxconn is reached, connections are left pending in a queue
3279 which may be server-specific or global to the backend. In order not to wait
3280 indefinitely, a timeout is applied to requests pending in the queue. If the
3281 timeout is reached, it is considered that the request will almost never be
3282 served, so it is dropped and a 503 error is returned to the client.
3283
3284 The "timeout queue" statement allows to fix the maximum time for a request to
3285 be left pending in a queue. If unspecified, the same value as the backend's
3286 connection timeout ("timeout connect") is used, for backwards compatibility
3287 with older versions with no "timeout queue" parameter.
3288
3289 See also : "timeout connect", "contimeout".
3290
3291
3292timeout server <timeout>
3293timeout srvtimeout <timeout> (deprecated)
3294 Set the maximum inactivity time on the server side.
3295 May be used in sections : defaults | frontend | listen | backend
3296 yes | no | yes | yes
3297 Arguments :
3298 <timeout> is the timeout value specified in milliseconds by default, but
3299 can be in any other unit if the number is suffixed by the unit,
3300 as explained at the top of this document.
3301
3302 The inactivity timeout applies when the server is expected to acknowledge or
3303 send data. In HTTP mode, this timeout is particularly important to consider
3304 during the first phase of the server's response, when it has to send the
3305 headers, as it directly represents the server's processing time for the
3306 request. To find out what value to put there, it's often good to start with
3307 what would be considered as unacceptable response times, then check the logs
3308 to observe the response time distribution, and adjust the value accordingly.
3309
3310 The value is specified in milliseconds by default, but can be in any other
3311 unit if the number is suffixed by the unit, as specified at the top of this
3312 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
3313 recommended that the client timeout remains equal to the server timeout in
3314 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003315 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01003316 packet losses by specifying timeouts that are slightly above multiples of 3
3317 seconds (eg: 4 or 5 seconds minimum).
3318
3319 This parameter is specific to backends, but can be specified once for all in
3320 "defaults" sections. This is in fact one of the easiest solutions not to
3321 forget about it. An unspecified timeout results in an infinite timeout, which
3322 is not recommended. Such a usage is accepted and works but reports a warning
3323 during startup because it may results in accumulation of expired sessions in
3324 the system if the system's timeouts are not configured either.
3325
3326 This parameter replaces the old, deprecated "srvtimeout". It is recommended
3327 to use it to write new configurations. The form "timeout srvtimeout" is
3328 provided only by backwards compatibility but its use is strongly discouraged.
3329
3330 See also : "srvtimeout", "timeout client".
3331
3332
3333timeout tarpit <timeout>
3334 Set the duration for which tapitted connections will be maintained
3335 May be used in sections : defaults | frontend | listen | backend
3336 yes | yes | yes | yes
3337 Arguments :
3338 <timeout> is the tarpit duration specified in milliseconds by default, but
3339 can be in any other unit if the number is suffixed by the unit,
3340 as explained at the top of this document.
3341
3342 When a connection is tarpitted using "reqtarpit", it is maintained open with
3343 no activity for a certain amount of time, then closed. "timeout tarpit"
3344 defines how long it will be maintained open.
3345
3346 The value is specified in milliseconds by default, but can be in any other
3347 unit if the number is suffixed by the unit, as specified at the top of this
3348 document. If unspecified, the same value as the backend's connection timeout
3349 ("timeout connect") is used, for backwards compatibility with older versions
3350 with no "timeout tapit" parameter.
3351
3352 See also : "timeout connect", "contimeout".
3353
3354
3355transparent (deprecated)
3356 Enable client-side transparent proxying
3357 May be used in sections : defaults | frontend | listen | backend
3358 yes | yes | yes | no
3359 Arguments : none
3360
3361 This keyword was introduced in order to provide layer 7 persistence to layer
3362 3 load balancers. The idea is to use the OS's ability to redirect an incoming
3363 connection for a remote address to a local process (here HAProxy), and let
3364 this process know what address was initially requested. When this option is
3365 used, sessions without cookies will be forwarded to the original destination
3366 IP address of the incoming request (which should match that of another
3367 equipment), while requests with cookies will still be forwarded to the
3368 appropriate server.
3369
3370 The "transparent" keyword is deprecated, use "option transparent" instead.
3371
3372 Note that contrary to a common belief, this option does NOT make HAProxy
3373 present the client's IP to the server when establishing the connection.
3374
3375 Use of this option is really discouraged, and since no really valid use of it
3376 has been reported for years, it will probably be removed in future versions.
3377
3378 See also: "option transparent"
3379
3380
3381use_backend <backend> if <condition>
3382use_backend <backend> unless <condition>
3383 Switch to a specific backend if/unless a Layer 7 condition is matched.
3384 May be used in sections : defaults | frontend | listen | backend
3385 no | yes | yes | no
3386 Arguments :
3387 <backend> is the name of a valid backend or "listen" section.
3388
3389 <condition> is a condition composed of ACLs, as described in section 2.3.
3390
3391 When doing content-switching, connections arrive on a frontend and are then
3392 dispatched to various backends depending on a number of conditions. The
3393 relation between the conditions and the backends is described with the
3394 "use_backend" keyword. This is supported only in HTTP mode.
3395
3396 There may be as many "use_backend" rules as desired. All of these rules are
3397 evaluated in their declaration order, and the first one which matches will
3398 assign the backend.
3399
3400 In the first form, the backend will be used if the condition is met. In the
3401 second form, the backend will be used if the condition is not met. If no
3402 condition is valid, the backend defined with "default_backend" will be used.
3403 If no default backend is defined, either the servers in the same section are
3404 used (in case of a "listen" section) or, in case of a frontend, no server is
3405 used and a 503 service unavailable response is returned.
3406
3407 See also: "default_backend" and section 2.3 about ACLs.
3408
Willy Tarreau036fae02008-01-06 13:24:40 +01003409
Willy Tarreau0ba27502007-12-24 16:55:16 +010034102.3) Using ACLs
Willy Tarreau6a06a402007-07-15 20:15:28 +02003411---------------
3412
3413The use of Access Control Lists (ACL) provides a flexible solution to perform
Willy Tarreau0ba27502007-12-24 16:55:16 +01003414content switching and generally to take decisions based on content extracted
3415from the request, the response or any environmental status. The principle is
3416simple :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003417
3418 - define test criteria with sets of values
3419 - perform actions only if a set of tests is valid
3420
3421The actions generally consist in blocking the request, or selecting a backend.
3422
3423In order to define a test, the "acl" keyword is used. The syntax is :
3424
3425 acl <aclname> <criterion> [flags] [operator] <value> ...
3426
Willy Tarreau0ba27502007-12-24 16:55:16 +01003427This creates a new ACL <aclname> or completes an existing one with new tests.
3428Those tests apply to the portion of request/response specified in <criterion>
Willy Tarreau6a06a402007-07-15 20:15:28 +02003429and may be adjusted with optional flags [flags]. Some criteria also support
3430an operator which may be specified before the set of values. The values are
3431of the type supported by the criterion, and are separated by spaces.
3432
Willy Tarreau0ba27502007-12-24 16:55:16 +01003433ACL names must be formed from upper and lower case letters, digits, '-' (dash),
3434'_' (underscore) , '.' (dot) and ':' (colon). ACL names are case-sensitive,
3435which means that "my_acl" and "My_Acl" are two different ACLs.
3436
3437There is no enforced limit to the number of ACLs. The unused ones do not affect
Willy Tarreau6a06a402007-07-15 20:15:28 +02003438performance, they just consume a small amount of memory.
3439
Willy Tarreau0ba27502007-12-24 16:55:16 +01003440The following ACL flags are currently supported :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003441
3442 -i : ignore case during matching.
3443 -- : force end of flags. Useful when a string looks like one of the flags.
3444
3445Supported types of values are :
Willy Tarreau0ba27502007-12-24 16:55:16 +01003446
Willy Tarreau6a06a402007-07-15 20:15:28 +02003447 - integers or integer ranges
3448 - strings
3449 - regular expressions
3450 - IP addresses and networks
3451
3452
Willy Tarreau0ba27502007-12-24 16:55:16 +010034532.3.1) Matching integers
Willy Tarreau6a06a402007-07-15 20:15:28 +02003454------------------------
3455
3456Matching integers is special in that ranges and operators are permitted. Note
3457that integer matching only applies to positive values. A range is a value
3458expressed with a lower and an upper bound separated with a colon, both of which
3459may be omitted.
3460
3461For instance, "1024:65535" is a valid range to represent a range of
3462unprivileged ports, and "1024:" would also work. "0:1023" is a valid
3463representation of privileged ports, and ":1023" would also work.
3464
3465For an easier usage, comparison operators are also supported. Note that using
Willy Tarreau0ba27502007-12-24 16:55:16 +01003466operators with ranges does not make much sense and is strongly discouraged.
3467Similarly, it does not make much sense to perform order comparisons with a set
3468of values.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003469
Willy Tarreau0ba27502007-12-24 16:55:16 +01003470Available operators for integer matching are :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003471
3472 eq : true if the tested value equals at least one value
3473 ge : true if the tested value is greater than or equal to at least one value
3474 gt : true if the tested value is greater than at least one value
3475 le : true if the tested value is less than or equal to at least one value
3476 lt : true if the tested value is less than at least one value
3477
Willy Tarreau0ba27502007-12-24 16:55:16 +01003478For instance, the following ACL matches any negative Content-Length header :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003479
3480 acl negative-length hdr_val(content-length) lt 0
3481
3482
Willy Tarreau0ba27502007-12-24 16:55:16 +010034832.3.2) Matching strings
Willy Tarreau6a06a402007-07-15 20:15:28 +02003484-----------------------
3485
3486String matching applies to verbatim strings as they are passed, with the
3487exception of the backslash ("\") which makes it possible to escape some
3488characters such as the space. If the "-i" flag is passed before the first
3489string, then the matching will be performed ignoring the case. In order
3490to match the string "-i", either set it second, or pass the "--" flag
Willy Tarreau0ba27502007-12-24 16:55:16 +01003491before the first string. Same applies of course to match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02003492
3493
Willy Tarreau0ba27502007-12-24 16:55:16 +010034942.3.3) Matching regular expressions (regexes)
Willy Tarreau6a06a402007-07-15 20:15:28 +02003495---------------------------------------------
3496
3497Just like with string matching, regex matching applies to verbatim strings as
3498they are passed, with the exception of the backslash ("\") which makes it
3499possible to escape some characters such as the space. If the "-i" flag is
3500passed before the first regex, then the matching will be performed ignoring
3501the case. In order to match the string "-i", either set it second, or pass
Willy Tarreau0ba27502007-12-24 16:55:16 +01003502the "--" flag before the first string. Same principle applies of course to
3503match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02003504
3505
Willy Tarreau0ba27502007-12-24 16:55:16 +010035062.3.4) Matching IPv4 addresses
3507------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02003508
3509IPv4 addresses values can be specified either as plain addresses or with a
3510netmask appended, in which case the IPv4 address matches whenever it is
3511within the network. Plain addresses may also be replaced with a resolvable
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003512host name, but this practice is generally discouraged as it makes it more
Willy Tarreau0ba27502007-12-24 16:55:16 +01003513difficult to read and debug configurations. If hostnames are used, you should
3514at least ensure that they are present in /etc/hosts so that the configuration
3515does not depend on any random DNS match at the moment the configuration is
3516parsed.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003517
3518
Willy Tarreau0ba27502007-12-24 16:55:16 +010035192.3.5) Available matching criteria
Willy Tarreau6a06a402007-07-15 20:15:28 +02003520----------------------------------
3521
Willy Tarreau0ba27502007-12-24 16:55:16 +010035222.3.5.1) Matching at Layer 4 and below
3523--------------------------------------
3524
3525A first set of criteria applies to information which does not require any
3526analysis of the request or response contents. Those generally include TCP/IP
3527addresses and ports, as well as internal values independant on the stream.
3528
Willy Tarreau6a06a402007-07-15 20:15:28 +02003529always_false
3530 This one never matches. All values and flags are ignored. It may be used as
3531 a temporary replacement for another one when adjusting configurations.
3532
3533always_true
3534 This one always matches. All values and flags are ignored. It may be used as
3535 a temporary replacement for another one when adjusting configurations.
3536
3537src <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003538 Applies to the client's IPv4 address. It is usually used to limit access to
Willy Tarreau6a06a402007-07-15 20:15:28 +02003539 certain resources such as statistics. Note that it is the TCP-level source
3540 address which is used, and not the address of a client behind a proxy.
3541
3542src_port <integer>
3543 Applies to the client's TCP source port. This has a very limited usage.
3544
3545dst <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003546 Applies to the local IPv4 address the client connected to. It can be used to
Willy Tarreau6a06a402007-07-15 20:15:28 +02003547 switch to a different backend for some alternative addresses.
3548
3549dst_port <integer>
3550 Applies to the local port the client connected to. It can be used to switch
3551 to a different backend for some alternative ports.
3552
3553dst_conn <integer>
3554 Applies to the number of currently established connections on the frontend,
3555 including the one being evaluated. It can be used to either return a sorry
Willy Tarreau0ba27502007-12-24 16:55:16 +01003556 page before hard-blocking, or to use a specific backend to drain new requests
Willy Tarreau6a06a402007-07-15 20:15:28 +02003557 when the farm is considered saturated.
3558
Willy Tarreau0ba27502007-12-24 16:55:16 +01003559nbsrv <integer>
3560nbsrv(backend) <integer>
3561 Returns true when the number of usable servers of either the current backend
3562 or the named backend matches the values or ranges specified. This is used to
3563 switch to an alternate backend when the number of servers is too low to
3564 to handle some load. It is useful to report a failure when combined with
3565 "monitor fail".
3566
3567
35682.3.5.2) Matching at Layer 7
3569----------------------------
3570
3571A second set of criteria applies to information which can be found at the
3572application layer (layer 7). Those require that a full HTTP request has been
3573read, and are only evaluated then. They may require slightly more CPU resources
3574than the layer 4 ones, but not much since the request and response are indexed.
3575
Willy Tarreau6a06a402007-07-15 20:15:28 +02003576method <string>
3577 Applies to the method in the HTTP request, eg: "GET". Some predefined ACL
3578 already check for most common methods.
3579
3580req_ver <string>
3581 Applies to the version string in the HTTP request, eg: "1.0". Some predefined
3582 ACL already check for versions 1.0 and 1.1.
3583
3584path <string>
3585 Returns true when the path part of the request, which starts at the first
3586 slash and ends before the question mark, equals one of the strings. It may be
3587 used to match known files, such as /favicon.ico.
3588
3589path_beg <string>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003590 Returns true when the path begins with one of the strings. This can be used
3591 to send certain directory names to alternative backends.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003592
3593path_end <string>
3594 Returns true when the path ends with one of the strings. This may be used to
3595 control file name extension.
3596
3597path_sub <string>
3598 Returns true when the path contains one of the strings. It can be used to
3599 detect particular patterns in paths, such as "../" for example. See also
3600 "path_dir".
3601
3602path_dir <string>
3603 Returns true when one of the strings is found isolated or delimited with
3604 slashes in the path. This is used to perform filename or directory name
3605 matching without the risk of wrong match due to colliding prefixes. See also
3606 "url_dir" and "path_sub".
3607
3608path_dom <string>
3609 Returns true when one of the strings is found isolated or delimited with dots
3610 in the path. This may be used to perform domain name matching in proxy
3611 requests. See also "path_sub" and "url_dom".
3612
3613path_reg <regex>
3614 Returns true when the path matches one of the regular expressions. It can be
3615 used any time, but it is important to remember that regex matching is slower
3616 than other methods. See also "url_reg" and all "path_" criteria.
3617
3618url <string>
3619 Applies to the whole URL passed in the request. The only real use is to match
3620 "*", for which there already is a predefined ACL.
3621
3622url_beg <string>
3623 Returns true when the URL begins with one of the strings. This can be used to
3624 check whether a URL begins with a slash or with a protocol scheme.
3625
3626url_end <string>
3627 Returns true when the URL ends with one of the strings. It has very limited
3628 use. "path_end" should be used instead for filename matching.
3629
3630url_sub <string>
3631 Returns true when the URL contains one of the strings. It can be used to
3632 detect particular patterns in query strings for example. See also "path_sub".
3633
3634url_dir <string>
3635 Returns true when one of the strings is found isolated or delimited with
3636 slashes in the URL. This is used to perform filename or directory name
3637 matching without the risk of wrong match due to colliding prefixes. See also
3638 "path_dir" and "url_sub".
3639
3640url_dom <string>
3641 Returns true when one of the strings is found isolated or delimited with dots
3642 in the URL. This is used to perform domain name matching without the risk of
3643 wrong match due to colliding prefixes. See also "url_sub".
3644
3645url_reg <regex>
3646 Returns true when the URL matches one of the regular expressions. It can be
3647 used any time, but it is important to remember that regex matching is slower
3648 than other methods. See also "path_reg" and all "url_" criteria.
3649
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01003650url_ip <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003651 Applies to the IP address specified in the absolute URI in an HTTP request.
3652 It can be used to prevent access to certain resources such as local network.
Willy Tarreau198a7442008-01-17 12:05:32 +01003653 It is useful with option "http_proxy".
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01003654
3655url_port <integer>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003656 Applies to the port specified in the absolute URI in an HTTP request. It can
3657 be used to prevent access to certain resources. It is useful with option
Willy Tarreau198a7442008-01-17 12:05:32 +01003658 "http_proxy". Note that if the port is not specified in the request, port 80
Willy Tarreau0ba27502007-12-24 16:55:16 +01003659 is assumed.
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01003660
Willy Tarreau6a06a402007-07-15 20:15:28 +02003661hdr <string>
3662hdr(header) <string>
3663 Note: all the "hdr*" matching criteria either apply to all headers, or to a
3664 particular header whose name is passed between parenthesis and without any
Willy Tarreau0ba27502007-12-24 16:55:16 +01003665 space. The header name is not case-sensitive. The header matching complies
3666 with RFC2616, and treats as separate headers all values delimited by commas.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003667
3668 The "hdr" criteria returns true if any of the headers matching the criteria
Willy Tarreau0ba27502007-12-24 16:55:16 +01003669 match any of the strings. This can be used to check exact for values. For
Willy Tarreau6a06a402007-07-15 20:15:28 +02003670 instance, checking that "connection: close" is set :
3671
3672 hdr(Connection) -i close
3673
3674hdr_beg <string>
3675hdr_beg(header) <string>
3676 Returns true when one of the headers begins with one of the strings. See
3677 "hdr" for more information on header matching.
3678
3679hdr_end <string>
3680hdr_end(header) <string>
3681 Returns true when one of the headers ends with one of the strings. See "hdr"
3682 for more information on header matching.
3683
3684hdr_sub <string>
3685hdr_sub(header) <string>
3686 Returns true when one of the headers contains one of the strings. See "hdr"
3687 for more information on header matching.
3688
3689hdr_dir <string>
3690hdr_dir(header) <string>
3691 Returns true when one of the headers contains one of the strings either
3692 isolated or delimited by slashes. This is used to perform filename or
3693 directory name matching, and may be used with Referer. See "hdr" for more
3694 information on header matching.
3695
3696hdr_dom <string>
3697hdr_dom(header) <string>
3698 Returns true when one of the headers contains one of the strings either
3699 isolated or delimited by dots. This is used to perform domain name matching,
3700 and may be used with the Host header. See "hdr" for more information on
3701 header matching.
3702
3703hdr_reg <regex>
3704hdr_reg(header) <regex>
3705 Returns true when one of the headers matches of the regular expressions. It
3706 can be used at any time, but it is important to remember that regex matching
3707 is slower than other methods. See also other "hdr_" criteria, as well as
3708 "hdr" for more information on header matching.
3709
3710hdr_val <integer>
3711hdr_val(header) <integer>
3712 Returns true when one of the headers starts with a number which matches the
3713 values or ranges specified. This may be used to limit content-length to
3714 acceptable values for example. See "hdr" for more information on header
3715 matching.
3716
3717hdr_cnt <integer>
3718hdr_cnt(header) <integer>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003719 Returns true when the number of occurrence of the specified header matches
3720 the values or ranges specified. It is important to remember that one header
3721 line may count as several headers if it has several values. This is used to
3722 detect presence, absence or abuse of a specific header, as well as to block
3723 request smugling attacks by rejecting requests which contain more than one
3724 of certain headers. See "hdr" for more information on header matching.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003725
3726
Willy Tarreau0ba27502007-12-24 16:55:16 +010037272.3.6) Pre-defined ACLs
Willy Tarreau6a06a402007-07-15 20:15:28 +02003728-----------------------
3729
3730Some predefined ACLs are hard-coded so that they do not have to be declared in
3731every frontend which needs them. They all have their names in upper case in
Willy Tarreau0ba27502007-12-24 16:55:16 +01003732order to avoid confusion. Their equivalence is provided below. Please note that
3733only the first three ones are not layer 7 based.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003734
3735ACL name Equivalent to Usage
3736---------------+-----------------------------+---------------------------------
3737TRUE always_true 1 always match
3738FALSE always_false 0 never match
3739LOCALHOST src 127.0.0.1/8 match connection from local host
3740HTTP_1.0 req_ver 1.0 match HTTP version 1.0
3741HTTP_1.1 req_ver 1.1 match HTTP version 1.1
3742METH_CONNECT method CONNECT match HTTP CONNECT method
3743METH_GET method GET HEAD match HTTP GET or HEAD method
3744METH_HEAD method HEAD match HTTP HEAD method
3745METH_OPTIONS method OPTIONS match HTTP OPTIONS method
3746METH_POST method POST match HTTP POST method
3747METH_TRACE method TRACE match HTTP TRACE method
3748HTTP_URL_ABS url_reg ^[^/:]*:// match absolute URL with scheme
3749HTTP_URL_SLASH url_beg / match URL begining with "/"
3750HTTP_URL_STAR url * match URL equal to "*"
3751HTTP_CONTENT hdr_val(content-length) gt 0 match an existing content-length
3752---------------+-----------------------------+---------------------------------
3753
3754
Willy Tarreau0ba27502007-12-24 16:55:16 +010037552.3.7) Using ACLs to form conditions
Willy Tarreau6a06a402007-07-15 20:15:28 +02003756------------------------------------
3757
3758Some actions are only performed upon a valid condition. A condition is a
3759combination of ACLs with operators. 3 operators are supported :
3760
3761 - AND (implicit)
3762 - OR (explicit with the "or" keyword or the "||" operator)
3763 - Negation with the exclamation mark ("!")
3764
3765A condition is formed as a disjonctive form :
3766
3767 [!]acl1 [!]acl2 ... [!]acln { or [!]acl1 [!]acl2 ... [!]acln } ...
3768
3769Such conditions are generally used after an "if" or "unless" statement,
3770indicating when the condition will trigger the action.
3771
3772For instance, to block HTTP requests to the "*" URL with methods other than
Willy Tarreau0ba27502007-12-24 16:55:16 +01003773"OPTIONS", as well as POST requests without content-length, and GET or HEAD
3774requests with a content-length greater than 0, and finally every request which
3775is not either GET/HEAD/POST/OPTIONS !
Willy Tarreau6a06a402007-07-15 20:15:28 +02003776
3777 acl missing_cl hdr_cnt(Content-length) eq 0
3778 block if HTTP_URL_STAR !METH_OPTIONS || METH_POST missing_cl
3779 block if METH_GET HTTP_CONTENT
3780 block unless METH_GET or METH_POST or METH_OPTIONS
3781
3782To select a different backend for requests to static contents on the "www" site
3783and to every request on the "img", "video", "download" and "ftp" hosts :
3784
3785 acl url_static path_beg /static /images /img /css
3786 acl url_static path_end .gif .png .jpg .css .js
3787 acl host_www hdr_beg(host) -i www
3788 acl host_static hdr_beg(host) -i img. video. download. ftp.
3789
3790 # now use backend "static" for all static-only hosts, and for static urls
3791 # of host "www". Use backend "www" for the rest.
3792 use_backend static if host_static or host_www url_static
3793 use_backend www if host_www
3794
Willy Tarreau844e3c52008-01-11 16:28:18 +01003795See section 2.2 for detailed help on the "block" and "use_backend" keywords.
Willy Tarreaudbc36f62007-11-30 12:29:11 +01003796
3797
Willy Tarreauc7246fc2007-12-02 17:31:20 +010037982.4) Server options
Willy Tarreau5764b382007-11-30 17:46:49 +01003799-------------------
3800
Willy Tarreau198a7442008-01-17 12:05:32 +01003801The "server" keyword supports a certain number of settings which are all passed
3802as arguments on the server line. The order in which those arguments appear does
3803not count, and they are all optional. Some of those settings are single words
3804(booleans) while others expect one or several values after them. In this case,
3805the values must immediately follow the setting name. All those settings must be
3806specified after the server's address if they are used :
3807
3808 server <name> <address>[:port] [settings ...]
3809
3810The currently supported settings are the following ones.
3811
3812addr <ipv4>
3813 Using the "addr" parameter, it becomes possible to use a different IP address
3814 to send health-checks. On some servers, it may be desirable to dedicate an IP
3815 address to specific component able to perform complex tests which are more
3816 suitable to health-checks than the application. This parameter is ignored if
3817 the "check" parameter is not set. See also the "port" parameter.
3818
3819backup
3820 When "backup" is present on a server line, the server is only used in load
3821 balancing when all other non-backup servers are unavailable. Requests coming
3822 with a persistence cookie referencing the server will always be served
3823 though. By default, only the first operational backup server is used, unless
Willy Tarreauaf85d942008-01-30 10:47:10 +01003824 the "allbackups" option is set in the backend. See also the "allbackups"
Willy Tarreau198a7442008-01-17 12:05:32 +01003825 option.
3826
3827check
3828 This option enables health checks on the server. By default, a server is
3829 always considered available. If "check" is set, the server will receive
3830 periodic health checks to ensure that it is really able to serve requests.
3831 The default address and port to send the tests to are those of the server,
3832 and the default source is the same as the one defined in the backend. It is
3833 possible to change the address using the "addr" parameter, the port using the
3834 "port" parameter, the source address using the "source" address, and the
3835 interval and timers using the "inter", "rise" and "fall" parameters. The
3836 request method is define in the backend using the "httpchk", "smtpchk",
3837 and "ssl-hello-chk" options. Please refer to those options and parameters for
3838 more information.
3839
3840cookie <value>
3841 The "cookie" parameter sets the cookie value assigned to the server to
3842 <value>. This value will be checked in incoming requests, and the first
3843 operational server possessing the same value will be selected. In return, in
3844 cookie insertion or rewrite modes, this value will be assigned to the cookie
3845 sent to the client. There is nothing wrong in having several servers sharing
3846 the same cookie value, and it is in fact somewhat common between normal and
3847 backup servers. See also the "cookie" keyword in backend section.
3848
3849fall <count>
3850 The "fall" parameter states that a server will be considered as dead after
3851 <count> consecutive unsuccessful health checks. This value defaults to 3 if
3852 unspecified. See also the "check", "inter" and "rise" parameters.
3853
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01003854id <value>
3855 Set a persistent value for server ID. Must be unique and larger than 1000, as
3856 smaller values are reserved for auto-assigned ids.
3857
Willy Tarreau198a7442008-01-17 12:05:32 +01003858inter <delay>
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003859fastinter <delay>
3860downinter <delay>
Willy Tarreau198a7442008-01-17 12:05:32 +01003861 The "inter" parameter sets the interval between two consecutive health checks
3862 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003863 It is also possible to use "fastinter" and "downinter" to optimize delays
Willy Tarreau41a340d2008-01-22 12:25:31 +01003864 between checks depending on the server state :
3865
3866 Server state | Interval used
3867 ---------------------------------+-----------------------------------------
3868 UP 100% (non-transitional) | "inter"
3869 ---------------------------------+-----------------------------------------
3870 Transitionally UP (going down), |
3871 Transitionally DOWN (going up), | "fastinter" if set, "inter" otherwise.
3872 or yet unchecked. |
3873 ---------------------------------+-----------------------------------------
3874 DOWN 100% (non-transitional) | "downinter" if set, "inter" otherwise.
3875 ---------------------------------+-----------------------------------------
3876
3877 Just as with every other time-based parameter, they can be entered in any
3878 other explicit unit among { us, ms, s, m, h, d }. The "inter" parameter also
3879 serves as a timeout for health checks sent to servers if "timeout check" is
3880 not set. In order to reduce "resonance" effects when multiple servers are
3881 hosted on the same hardware, the health-checks of all servers are started
3882 with a small time offset between them. It is also possible to add some random
3883 noise in the health checks interval using the global "spread-checks"
3884 keyword. This makes sense for instance when a lot of backends use the same
3885 servers.
Willy Tarreau198a7442008-01-17 12:05:32 +01003886
3887maxconn <maxconn>
3888 The "maxconn" parameter specifies the maximal number of concurrent
3889 connections that will be sent to this server. If the number of incoming
3890 concurrent requests goes higher than this value, they will be queued, waiting
3891 for a connection to be released. This parameter is very important as it can
3892 save fragile servers from going down under extreme loads. If a "minconn"
3893 parameter is specified, the limit becomes dynamic. The default value is "0"
3894 which means unlimited. See also the "minconn" and "maxqueue" parameters, and
3895 the backend's "fullconn" keyword.
3896
3897maxqueue <maxqueue>
3898 The "maxqueue" parameter specifies the maximal number of connections which
3899 will wait in the queue for this server. If this limit is reached, next
3900 requests will be redispatched to other servers instead of indefinitely
3901 waiting to be served. This will break persistence but may allow people to
3902 quickly re-log in when the server they try to connect to is dying. The
3903 default value is "0" which means the queue is unlimited. See also the
3904 "maxconn" and "minconn" parameters.
3905
3906minconn <minconn>
3907 When the "minconn" parameter is set, the maxconn limit becomes a dynamic
3908 limit following the backend's load. The server will always accept at least
3909 <minconn> connections, never more than <maxconn>, and the limit will be on
3910 the ramp between both values when the backend has less than <fullconn>
3911 concurrent connections. This makes it possible to limit the load on the
3912 server during normal loads, but push it further for important loads without
3913 overloading the server during exceptionnal loads. See also the "maxconn"
3914 and "maxqueue" parameters, as well as the "fullconn" backend keyword.
3915
3916port <port>
3917 Using the "port" parameter, it becomes possible to use a different port to
3918 send health-checks. On some servers, it may be desirable to dedicate a port
3919 to a specific component able to perform complex tests which are more suitable
3920 to health-checks than the application. It is common to run a simple script in
3921 inetd for instance. This parameter is ignored if the "check" parameter is not
3922 set. See also the "addr" parameter.
3923
Willy Tarreau21d2af32008-02-14 20:25:24 +01003924redir <prefix>
3925 The "redir" parameter enables the redirection mode for all GET and HEAD
3926 requests addressing this server. This means that instead of having HAProxy
3927 forward the request to the server, it will send an "HTTP 302" response with
3928 the "Location" header composed of this prefix immediately followed by the
3929 requested URI beginning at the leading '/' of the path component. That means
3930 that no trailing slash should be used after <prefix>. All invalid requests
3931 will be rejected, and all non-GET or HEAD requests will be normally served by
3932 the server. Note that since the response is completely forged, no header
3933 mangling nor cookie insertion is possible in the respose. However, cookies in
3934 requests are still analysed, making this solution completely usable to direct
3935 users to a remote location in case of local disaster. Main use consists in
3936 increasing bandwidth for static servers by having the clients directly
3937 connect to them. Note: never use a relative location here, it would cause a
3938 loop between the client and HAProxy!
3939
3940 Example : server srv1 192.168.1.1:80 redir http://image1.mydomain.com check
3941
Willy Tarreau198a7442008-01-17 12:05:32 +01003942rise <count>
3943 The "rise" parameter states that a server will be considered as operational
3944 after <count> consecutive successful health checks. This value defaults to 2
3945 if unspecified. See also the "check", "inter" and "fall" parameters.
3946
Willy Tarreau5764b382007-11-30 17:46:49 +01003947slowstart <start_time_in_ms>
Willy Tarreau198a7442008-01-17 12:05:32 +01003948 The "slowstart" parameter for a server accepts a value in milliseconds which
Willy Tarreau5764b382007-11-30 17:46:49 +01003949 indicates after how long a server which has just come back up will run at
Willy Tarreaubefdff12007-12-02 22:27:38 +01003950 full speed. Just as with every other time-based parameter, it can be entered
3951 in any other explicit unit among { us, ms, s, m, h, d }. The speed grows
3952 linearly from 0 to 100% during this time. The limitation applies to two
3953 parameters :
Willy Tarreau5764b382007-11-30 17:46:49 +01003954
3955 - maxconn: the number of connections accepted by the server will grow from 1
3956 to 100% of the usual dynamic limit defined by (minconn,maxconn,fullconn).
3957
3958 - weight: when the backend uses a dynamic weighted algorithm, the weight
3959 grows linearly from 1 to 100%. In this case, the weight is updated at every
Willy Tarreau198a7442008-01-17 12:05:32 +01003960 health-check. For this reason, it is important that the "inter" parameter
3961 is smaller than the "slowstart", in order to maximize the number of steps.
Willy Tarreau5764b382007-11-30 17:46:49 +01003962
3963 The slowstart never applies when haproxy starts, otherwise it would cause
3964 trouble to running servers. It only applies when a server has been previously
3965 seen as failed.
3966
Willy Tarreau198a7442008-01-17 12:05:32 +01003967source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
3968 The "source" parameter sets the source address which will be used when
3969 connecting to the server. It follows the exact same parameters and principle
3970 as the backend "source" keyword, except that it only applies to the server
3971 referencing it. Please consult the "source" keyword for details.
3972
Krzysztof Piotr Oledzkic8b16fc2008-02-18 01:26:35 +01003973track [<proxy>/]<server>
3974 This option enables ability to set the current state of the server by
3975 tracking another one. Only a server with checks enabled can be tracked
3976 so it is not possible for example to track a server that tracks another
3977 one. If <proxy> is omitted the current one is used. If disable-on-404 is
3978 used, it has to be enabled on both proxies.
3979
Willy Tarreau198a7442008-01-17 12:05:32 +01003980weight <weight>
3981 The "weight" parameter is used to adjust the server's weight relative to
3982 other servers. All servers will receive a load proportional to their weight
3983 relative to the sum of all weights, so the higher the weight, the higher the
3984 load. The default weight is 1, and the maximal value is 255. If this
3985 parameter is used to distribute the load according to server's capacity, it
3986 is recommended to start with values which can both grow and shrink, for
3987 instance between 10 and 100 to leave enough room above and below for later
3988 adjustments.
3989
Willy Tarreauced27012008-01-17 20:35:34 +01003990
39912.5) HTTP header manipulation
3992-----------------------------
3993
3994In HTTP mode, it is possible to rewrite, add or delete some of the request and
3995response headers based on regular expressions. It is also possible to block a
3996request or a response if a particular header matches a regular expression,
3997which is enough to stop most elementary protocol attacks, and to protect
3998against information leak from the internal network. But there is a limitation
3999to this : since HAProxy's HTTP engine does not support keep-alive, only headers
4000passed during the first request of a TCP session will be seen. All subsequent
4001headers will be considered data only and not analyzed. Furthermore, HAProxy
4002never touches data contents, it stops analysis at the end of headers.
4003
4004This section covers common usage of the following keywords, described in detail
4005in section 2.2.1 :
4006
4007 - reqadd <string>
4008 - reqallow <search>
4009 - reqiallow <search>
4010 - reqdel <search>
4011 - reqidel <search>
4012 - reqdeny <search>
4013 - reqideny <search>
4014 - reqpass <search>
4015 - reqipass <search>
4016 - reqrep <search> <replace>
4017 - reqirep <search> <replace>
4018 - reqtarpit <search>
4019 - reqitarpit <search>
4020 - rspadd <string>
4021 - rspdel <search>
4022 - rspidel <search>
4023 - rspdeny <search>
4024 - rspideny <search>
4025 - rsprep <search> <replace>
4026 - rspirep <search> <replace>
4027
4028With all these keywords, the same conventions are used. The <search> parameter
4029is a POSIX extended regular expression (regex) which supports grouping through
4030parenthesis (without the backslash). Spaces and other delimiters must be
4031prefixed with a backslash ('\') to avoid confusion with a field delimiter.
4032Other characters may be prefixed with a backslash to change their meaning :
4033
4034 \t for a tab
4035 \r for a carriage return (CR)
4036 \n for a new line (LF)
4037 \ to mark a space and differentiate it from a delimiter
4038 \# to mark a sharp and differentiate it from a comment
4039 \\ to use a backslash in a regex
4040 \\\\ to use a backslash in the text (*2 for regex, *2 for haproxy)
4041 \xXX to write the ASCII hex code XX as in the C language
4042
4043The <replace> parameter contains the string to be used to replace the largest
4044portion of text matching the regex. It can make use of the special characters
4045above, and can reference a substring which is delimited by parenthesis in the
4046regex, by writing a backslash ('\') immediately followed by one digit from 0 to
Willy Tarreaud2a4aa22008-01-31 15:28:22 +010040479 indicating the group position (0 designating the entire line). This practice
Willy Tarreauced27012008-01-17 20:35:34 +01004048is very common to users of the "sed" program.
4049
4050The <string> parameter represents the string which will systematically be added
4051after the last header line. It can also use special character sequences above.
4052
4053Notes related to these keywords :
4054---------------------------------
4055 - these keywords are not always convenient to allow/deny based on header
4056 contents. It is strongly recommended to use ACLs with the "block" keyword
4057 instead, resulting in far more flexible and manageable rules.
4058
4059 - lines are always considered as a whole. It is not possible to reference
4060 a header name only or a value only. This is important because of the way
4061 headers are written (notably the number of spaces after the colon).
4062
4063 - the first line is always considered as a header, which makes it possible to
4064 rewrite or filter HTTP requests URIs or response codes, but in turn makes
4065 it harder to distinguish between headers and request line. The regex prefix
4066 ^[^\ \t]*[\ \t] matches any HTTP method followed by a space, and the prefix
4067 ^[^ \t:]*: matches any header name followed by a colon.
4068
4069 - for performances reasons, the number of characters added to a request or to
4070 a response is limited at build time to values between 1 and 4 kB. This
4071 should normally be far more than enough for most usages. If it is too short
4072 on occasional usages, it is possible to gain some space by removing some
4073 useless headers before adding new ones.
4074
4075 - keywords beginning with "reqi" and "rspi" are the same as their couterpart
4076 without the 'i' letter except that they ignore case when matching patterns.
4077
4078 - when a request passes through a frontend then a backend, all req* rules
4079 from the frontend will be evaluated, then all req* rules from the backend
4080 will be evaluated. The reverse path is applied to responses.
4081
4082 - req* statements are applied after "block" statements, so that "block" is
4083 always the first one, but before "use_backend" in order to permit rewriting
4084 before switching.
4085
Willy Tarreau5764b382007-11-30 17:46:49 +01004086
Willy Tarreauced27012008-01-17 20:35:34 +010040872.6) Logging
Willy Tarreau844e3c52008-01-11 16:28:18 +01004088------------
4089
4090[to do]
4091
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +010040922.7) CSV format
4093
4094 0. pxname: proxy name
4095 1. svname: service name (FRONTEND for frontend, BACKEND for backend, any name
4096 for server)
4097 2. qcur: current queued requests
4098 3. qmax: max queued requests
4099 4. scur: current sessions
4100 5. smax: max sessions
4101 6. slim: sessions limit
4102 7. stot: total sessions
4103 8. bin: bytes in
4104 9. bout: bytes out
4105 10. dreq: denied requests
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +01004106 11. dresp: denied responses
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01004107 12. ereq: request errors
4108 13. econ: connection errors
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +01004109 14. eresp: response errors
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01004110 15. wretr: retries (warning)
4111 16. wredis: redispatches (warning)
4112 17. status: status (UP/DOWN/...)
4113 18. weight: server weight (server), total weight (backend)
4114 19. act: server is active (server), number of active servers (backend)
4115 20. bck: server is backup (server), number of backup servers (backend)
4116 21. chkfail: number of failed checks
4117 22. chkdown: number of UP->DOWN transitions
4118 23. lastchg: last status change (in seconds)
4119 24. downtime: total downtime (in seconds)
4120 25. qlimit: queue limit
4121 26. pid: process id (0 for first instance, 1 for second, ...)
4122 27. iid: unique proxy id
4123 28. sid: service id (unique inside a proxy)
4124 29. throttle: warm up status
4125 30. lbtot: total number of times a server was selected
4126 31. tracked: id of proxy/server if tracking is enabled
4127 32. type (0=frontend, 1=backend, 2=server)
Willy Tarreau844e3c52008-01-11 16:28:18 +01004128
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +010041292.8) Unix Socket commands
4130
4131 - "show stat [<iid> <type> <sid>]": dump statistics in the cvs format. By
4132 passing id, type and sid it is possible to dump only selected items:
4133 - iid is a proxy id, -1 to dump everything
4134 - type selects type of dumpable objects: 1 for frontend, 2 for backend, 4 for
4135 server, -1 for everything. Values can be ORed, for example:
4136 1+2=3 -> frontend+backend.
4137 1+2+4=7 -> frontend+backend+server.
4138 - sid is a service id, -1 to dump everything from the selected proxy.
4139
4140 - "show info": dump info about current haproxy status.
4141
Willy Tarreau0ba27502007-12-24 16:55:16 +01004142/*
4143 * Local variables:
4144 * fill-column: 79
4145 * End:
4146 */