blob: e79a437f4c4eb69684b44052f9dc8c566fc91684 [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> ]
699 Define the load balancing algorithm to be used in a backend.
700 May be used in sections : defaults | frontend | listen | backend
701 yes | no | yes | yes
702 Arguments :
703 <algorithm> is the algorithm used to select a server when doing load
704 balancing. This only applies when no persistence information
705 is available, or when a connection is redispatched to another
706 server. <algorithm> may be one of the following :
707
708 roundrobin Each server is used in turns, according to their weights.
709 This is the smoothest and fairest algorithm when the server's
710 processing time remains equally distributed. This algorithm
711 is dynamic, which means that server weights may be adjusted
712 on the fly for slow starts for instance.
713
Willy Tarreau2d2a7f82008-03-17 12:07:56 +0100714 leastconn The server with the lowest number of connections receives the
715 connection. Round-robin is performed within groups of servers
716 of the same load to ensure that all servers will be used. Use
717 of this algorithm is recommended where very long sessions are
718 expected, such as LDAP, SQL, TSE, etc... but is not very well
719 suited for protocols using short sessions such as HTTP. This
720 algorithm is dynamic, which means that server weights may be
721 adjusted on the fly for slow starts for instance.
722
Willy Tarreau0ba27502007-12-24 16:55:16 +0100723 source The source IP address is hashed and divided by the total
724 weight of the running servers to designate which server will
725 receive the request. This ensures that the same client IP
726 address will always reach the same server as long as no
727 server goes down or up. If the hash result changes due to the
728 number of running servers changing, many clients will be
729 directed to a different server. This algorithm is generally
730 used in TCP mode where no cookie may be inserted. It may also
731 be used on the Internet to provide a best-effort stickyness
732 to clients which refuse session cookies. This algorithm is
733 static, which means that changing a server's weight on the
734 fly will have no effect.
735
736 uri The left part of the URI (before the question mark) is hashed
737 and divided by the total weight of the running servers. The
738 result designates which server will receive the request. This
739 ensures that a same URI will always be directed to the same
740 server as long as no server goes up or down. This is used
741 with proxy caches and anti-virus proxies in order to maximize
742 the cache hit rate. Note that this algorithm may only be used
743 in an HTTP backend. This algorithm is static, which means
744 that changing a server's weight on the fly will have no
745 effect.
746
747 url_param The URL parameter specified in argument will be looked up in
748 the query string of each HTTP request. If it is found
749 followed by an equal sign ('=') and a value, then the value
750 is hashed and divided by the total weight of the running
751 servers. The result designates which server will receive the
752 request. This is used to track user identifiers in requests
753 and ensure that a same user ID will always be sent to the
754 same server as long as no server goes up or down. If no value
755 is found or if the parameter is not found, then a round robin
756 algorithm is applied. Note that this algorithm may only be
757 used in an HTTP backend. This algorithm is static, which
758 means that changing a server's weight on the fly will have no
759 effect.
760
761 <arguments> is an optional list of arguments which may be needed by some
762 algorithms. Right now, only the "url_param" algorithm supports
763 a mandatory argument.
764
765 The definition of the load balancing algorithm is mandatory for a backend
766 and limited to one per backend.
767
768 Examples :
769 balance roundrobin
770 balance url_param userid
771
772 See also : "dispatch", "cookie", "appsession", "transparent" and "http_proxy".
773
774
775bind [<address>]:<port> [, ...]
Willy Tarreaub1e52e82008-01-13 14:49:51 +0100776bind [<address>]:<port> [, ...] transparent
Willy Tarreau0ba27502007-12-24 16:55:16 +0100777 Define one or several listening addresses and/or ports in a frontend.
778 May be used in sections : defaults | frontend | listen | backend
779 no | yes | yes | no
780 Arguments :
Willy Tarreaub1e52e82008-01-13 14:49:51 +0100781 <address> is optional and can be a host name, an IPv4 address, an IPv6
782 address, or '*'. It designates the address the frontend will
783 listen on. If unset, all IPv4 addresses of the system will be
784 listened on. The same will apply for '*' or the system's
785 special address "0.0.0.0".
786
787 <port> is the TCP port number the proxy will listen on. The port is
788 mandatory. Note that in the case of an IPv6 address, the port
789 is always the number after the last colon (':').
Willy Tarreau0ba27502007-12-24 16:55:16 +0100790
Willy Tarreaub1e52e82008-01-13 14:49:51 +0100791 transparent is an optional keyword which is supported only on certain
792 Linux kernels. It indicates that the addresses will be bound
793 even if they do not belong to the local machine. Any packet
794 targetting any of these addresses will be caught just as if
795 the address was locally configured. This normally requires
796 that IP forwarding is enabled. Caution! do not use this with
797 the default address '*', as it would redirect any traffic for
798 the specified port. This keyword is available only when
799 HAProxy is built with USE_LINUX_TPROXY=1.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100800
801 It is possible to specify a list of address:port combinations delimited by
802 commas. The frontend will then listen on all of these addresses. There is no
803 fixed limit to the number of addresses and ports which can be listened on in
804 a frontend, as well as there is no limit to the number of "bind" statements
805 in a frontend.
806
807 Example :
808 listen http_proxy
809 bind :80,:443
810 bind 10.0.0.1:10080,10.0.0.1:10443
811
812 See also : "source".
813
814
815block { if | unless } <condition>
816 Block a layer 7 request if/unless a condition is matched
817 May be used in sections : defaults | frontend | listen | backend
818 no | yes | yes | yes
819
820 The HTTP request will be blocked very early in the layer 7 processing
821 if/unless <condition> is matched. A 403 error will be returned if the request
822 is blocked. The condition has to reference ACLs (see section 2.3). This is
823 typically used to deny access to certain sensible resources if some
824 conditions are met or not met. There is no fixed limit to the number of
825 "block" statements per instance.
826
827 Example:
828 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
829 acl invalid_src src_port 0:1023
830 acl local_dst hdr(host) -i localhost
831 block if invalid_src || local_dst
832
833 See section 2.3 about ACL usage.
834
835
836capture cookie <name> len <length>
837 Capture and log a cookie in the request and in the response.
838 May be used in sections : defaults | frontend | listen | backend
839 no | yes | yes | no
840 Arguments :
841 <name> is the beginning of the name of the cookie to capture. In order
842 to match the exact name, simply suffix the name with an equal
843 sign ('='). The full name will appear in the logs, which is
844 useful with application servers which adjust both the cookie name
845 and value (eg: ASPSESSIONXXXXX).
846
847 <length> is the maximum number of characters to report in the logs, which
848 include the cookie name, the equal sign and the value, all in the
849 standard "name=value" form. The string will be truncated on the
850 right if it exceeds <length>.
851
852 Only the first cookie is captured. Both the "cookie" request headers and the
853 "set-cookie" response headers are monitored. This is particularly useful to
854 check for application bugs causing session crossing or stealing between
855 users, because generally the user's cookies can only change on a login page.
856
857 When the cookie was not presented by the client, the associated log column
858 will report "-". When a request does not cause a cookie to be assigned by the
859 server, a "-" is reported in the response column.
860
861 The capture is performed in the frontend only because it is necessary that
862 the log format does not change for a given frontend depending on the
863 backends. This may change in the future. Note that there can be only one
864 "capture cookie" statement in a frontend. The maximum capture length is
865 configured in the souces by default to 64 characters. It is not possible to
866 specify a capture in a "defaults" section.
867
868 Example:
869 capture cookie ASPSESSION len 32
870
871 See also : "capture request header", "capture response header" as well as
Willy Tarreauced27012008-01-17 20:35:34 +0100872 section 2.6 about logging.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100873
874
875capture request header <name> len <length>
876 Capture and log the first occurrence of the specified request header.
877 May be used in sections : defaults | frontend | listen | backend
878 no | yes | yes | no
879 Arguments :
880 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +0100881 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +0100882 appear in the requests, with the first letter of each word in
883 upper case. The header name will not appear in the logs, only the
884 value is reported, but the position in the logs is respected.
885
886 <length> is the maximum number of characters to extract from the value and
887 report in the logs. The string will be truncated on the right if
888 it exceeds <length>.
889
890 Only the first value of the first occurrence of the header is captured. The
891 value will be added to the logs between braces ('{}'). If multiple headers
892 are captured, they will be delimited by a vertical bar ('|') and will appear
893 in the same order they were declared in the configuration. Common uses for
894 request header captures include the "Host" field in virtual hosting
895 environments, the "Content-length" when uploads are supported, "User-agent"
896 to quickly differenciate between real users and robots, and "X-Forwarded-For"
897 in proxied environments to find where the request came from.
898
899 There is no limit to the number of captured request headers, but each capture
900 is limited to 64 characters. In order to keep log format consistent for a
901 same frontend, header captures can only be declared in a frontend. It is not
902 possible to specify a capture in a "defaults" section.
903
904 Example:
905 capture request header Host len 15
906 capture request header X-Forwarded-For len 15
907 capture request header Referrer len 15
908
Willy Tarreauced27012008-01-17 20:35:34 +0100909 See also : "capture cookie", "capture response header" as well as section 2.6
Willy Tarreau0ba27502007-12-24 16:55:16 +0100910 about logging.
911
912
913capture response header <name> len <length>
914 Capture and log the first occurrence of the specified response header.
915 May be used in sections : defaults | frontend | listen | backend
916 no | yes | yes | no
917 Arguments :
918 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +0100919 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +0100920 appear in the response, with the first letter of each word in
921 upper case. The header name will not appear in the logs, only the
922 value is reported, but the position in the logs is respected.
923
924 <length> is the maximum number of characters to extract from the value and
925 report in the logs. The string will be truncated on the right if
926 it exceeds <length>.
927
928 Only the first value of the first occurrence of the header is captured. The
929 result will be added to the logs between braces ('{}') after the captured
930 request headers. If multiple headers are captured, they will be delimited by
931 a vertical bar ('|') and will appear in the same order they were declared in
932 the configuration. Common uses for response header captures include the
933 "Content-length" header which indicates how many bytes are expected to be
934 returned, the "Location" header to track redirections.
935
936 There is no limit to the number of captured response headers, but each
937 capture is limited to 64 characters. In order to keep log format consistent
938 for a same frontend, header captures can only be declared in a frontend. It
939 is not possible to specify a capture in a "defaults" section.
940
941 Example:
942 capture response header Content-length len 9
943 capture response header Location len 15
944
Willy Tarreauced27012008-01-17 20:35:34 +0100945 See also : "capture cookie", "capture request header" as well as section 2.6
Willy Tarreau0ba27502007-12-24 16:55:16 +0100946 about logging.
947
948
949clitimeout <timeout>
950 Set the maximum inactivity time on the client side.
951 May be used in sections : defaults | frontend | listen | backend
952 yes | yes | yes | no
953 Arguments :
954 <timeout> is the timeout value is specified in milliseconds by default, but
955 can be in any other unit if the number is suffixed by the unit,
956 as explained at the top of this document.
957
958 The inactivity timeout applies when the client is expected to acknowledge or
959 send data. In HTTP mode, this timeout is particularly important to consider
960 during the first phase, when the client sends the request, and during the
961 response while it is reading data sent by the server. The value is specified
962 in milliseconds by default, but can be in any other unit if the number is
963 suffixed by the unit, as specified at the top of this document. In TCP mode
964 (and to a lesser extent, in HTTP mode), it is highly recommended that the
965 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +0100966 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +0100967 losses by specifying timeouts that are slightly above multiples of 3 seconds
968 (eg: 4 or 5 seconds).
969
970 This parameter is specific to frontends, but can be specified once for all in
971 "defaults" sections. This is in fact one of the easiest solutions not to
972 forget about it. An unspecified timeout results in an infinite timeout, which
973 is not recommended. Such a usage is accepted and works but reports a warning
974 during startup because it may results in accumulation of expired sessions in
975 the system if the system's timeouts are not configured either.
976
977 This parameter is provided for compatibility but is currently deprecated.
978 Please use "timeout client" instead.
979
Willy Tarreau036fae02008-01-06 13:24:40 +0100980 See also : "timeout client", "timeout http-request", "timeout server", and
981 "srvtimeout".
Willy Tarreau0ba27502007-12-24 16:55:16 +0100982
983
984contimeout <timeout>
985 Set the maximum time to wait for a connection attempt to a server to succeed.
986 May be used in sections : defaults | frontend | listen | backend
987 yes | no | yes | yes
988 Arguments :
989 <timeout> is the timeout value is specified in milliseconds by default, but
990 can be in any other unit if the number is suffixed by the unit,
991 as explained at the top of this document.
992
993 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +0100994 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreau0ba27502007-12-24 16:55:16 +0100995 cover one or several TCP packet losses by specifying timeouts that are
996 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
997 connect timeout also presets the queue timeout to the same value if this one
998 has not been specified. Historically, the contimeout was also used to set the
999 tarpit timeout in a listen section, which is not possible in a pure frontend.
1000
1001 This parameter is specific to backends, but can be specified once for all in
1002 "defaults" sections. This is in fact one of the easiest solutions not to
1003 forget about it. An unspecified timeout results in an infinite timeout, which
1004 is not recommended. Such a usage is accepted and works but reports a warning
1005 during startup because it may results in accumulation of failed sessions in
1006 the system if the system's timeouts are not configured either.
1007
1008 This parameter is provided for backwards compatibility but is currently
1009 deprecated. Please use "timeout connect", "timeout queue" or "timeout tarpit"
1010 instead.
1011
1012 See also : "timeout connect", "timeout queue", "timeout tarpit",
1013 "timeout server", "contimeout".
1014
1015
1016cookie <name> [ rewrite|insert|prefix ] [ indirect ] [ nocache ] [ postonly ]
1017 Enable cookie-based persistence in a backend.
1018 May be used in sections : defaults | frontend | listen | backend
1019 yes | no | yes | yes
1020 Arguments :
1021 <name> is the name of the cookie which will be monitored, modified or
1022 inserted in order to bring persistence. This cookie is sent to
1023 the client via a "Set-Cookie" header in the response, and is
1024 brought back by the client in a "Cookie" header in all requests.
1025 Special care should be taken to choose a name which does not
1026 conflict with any likely application cookie. Also, if the same
1027 backends are subject to be used by the same clients (eg:
1028 HTTP/HTTPS), care should be taken to use different cookie names
1029 between all backends if persistence between them is not desired.
1030
1031 rewrite This keyword indicates that the cookie will be provided by the
1032 server and that haproxy will have to modify its value to set the
1033 server's identifier in it. This mode is handy when the management
1034 of complex combinations of "Set-cookie" and "Cache-control"
1035 headers is left to the application. The application can then
1036 decide whether or not it is appropriate to emit a persistence
1037 cookie. Since all responses should be monitored, this mode only
1038 works in HTTP close mode. Unless the application behaviour is
1039 very complex and/or broken, it is advised not to start with this
1040 mode for new deployments. This keyword is incompatible with
1041 "insert" and "prefix".
1042
1043 insert This keyword indicates that the persistence cookie will have to
1044 be inserted by haproxy in the responses. If the server emits a
1045 cookie with the same name, it will be replaced anyway. For this
1046 reason, this mode can be used to upgrade existing configurations
1047 running in the "rewrite" mode. The cookie will only be a session
1048 cookie and will not be stored on the client's disk. Due to
1049 caching effects, it is generally wise to add the "indirect" and
1050 "nocache" or "postonly" keywords (see below). The "insert"
1051 keyword is not compatible with "rewrite" and "prefix".
1052
1053 prefix This keyword indicates that instead of relying on a dedicated
1054 cookie for the persistence, an existing one will be completed.
1055 This may be needed in some specific environments where the client
1056 does not support more than one single cookie and the application
1057 already needs it. In this case, whenever the server sets a cookie
1058 named <name>, it will be prefixed with the server's identifier
1059 and a delimiter. The prefix will be removed from all client
1060 requests so that the server still finds the cookie it emitted.
1061 Since all requests and responses are subject to being modified,
1062 this mode requires the HTTP close mode. The "prefix" keyword is
1063 not compatible with "rewrite" and "insert".
1064
1065 indirect When this option is specified in insert mode, cookies will only
1066 be added when the server was not reached after a direct access,
1067 which means that only when a server is elected after applying a
1068 load-balancing algorithm, or after a redispatch, then the cookie
1069 will be inserted. If the client has all the required information
1070 to connect to the same server next time, no further cookie will
1071 be inserted. In all cases, when the "indirect" option is used in
1072 insert mode, the cookie is always removed from the requests
1073 transmitted to the server. The persistence mechanism then becomes
1074 totally transparent from the application point of view.
1075
1076 nocache This option is recommended in conjunction with the insert mode
1077 when there is a cache between the client and HAProxy, as it
1078 ensures that a cacheable response will be tagged non-cacheable if
1079 a cookie needs to be inserted. This is important because if all
1080 persistence cookies are added on a cacheable home page for
1081 instance, then all customers will then fetch the page from an
1082 outer cache and will all share the same persistence cookie,
1083 leading to one server receiving much more traffic than others.
1084 See also the "insert" and "postonly" options.
1085
1086 postonly This option ensures that cookie insertion will only be performed
1087 on responses to POST requests. It is an alternative to the
1088 "nocache" option, because POST responses are not cacheable, so
1089 this ensures that the persistence cookie will never get cached.
1090 Since most sites do not need any sort of persistence before the
1091 first POST which generally is a login request, this is a very
1092 efficient method to optimize caching without risking to find a
1093 persistence cookie in the cache.
1094 See also the "insert" and "nocache" options.
1095
1096 There can be only one persistence cookie per HTTP backend, and it can be
1097 declared in a defaults section. The value of the cookie will be the value
1098 indicated after the "cookie" keyword in a "server" statement. If no cookie
1099 is declared for a given server, the cookie is not set.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001100
Willy Tarreau0ba27502007-12-24 16:55:16 +01001101 Examples :
1102 cookie JSESSIONID prefix
1103 cookie SRV insert indirect nocache
1104 cookie SRV insert postonly indirect
1105
1106 See also : "appsession", "balance source", "capture cookie", "server".
1107
1108
1109default_backend <backend>
1110 Specify the backend to use when no "use_backend" rule has been matched.
1111 May be used in sections : defaults | frontend | listen | backend
1112 yes | yes | yes | no
1113 Arguments :
1114 <backend> is the name of the backend to use.
1115
1116 When doing content-switching between frontend and backends using the
1117 "use_backend" keyword, it is often useful to indicate which backend will be
1118 used when no rule has matched. It generally is the dynamic backend which
1119 will catch all undetermined requests.
1120
1121 The "default_backend" keyword is also supported in TCP mode frontends to
1122 facilitate the ordering of configurations in frontends and backends,
1123 eventhough it does not make much more sense in case of TCP due to the fact
1124 that use_backend currently does not work in TCP mode.
1125
1126 Example :
1127
1128 use_backend dynamic if url_dyn
1129 use_backend static if url_css url_img extension_img
1130 default_backend dynamic
1131
Willy Tarreau2769aa02007-12-27 18:26:09 +01001132 See also : "use_backend", "reqsetbe", "reqisetbe"
1133
Willy Tarreau0ba27502007-12-24 16:55:16 +01001134
1135disabled
1136 Disable a proxy, frontend or backend.
1137 May be used in sections : defaults | frontend | listen | backend
1138 yes | yes | yes | yes
1139 Arguments : none
1140
1141 The "disabled" keyword is used to disable an instance, mainly in order to
1142 liberate a listening port or to temporarily disable a service. The instance
1143 will still be created and its configuration will be checked, but it will be
1144 created in the "stopped" state and will appear as such in the statistics. It
1145 will not receive any traffic nor will it send any health-checks or logs. It
1146 is possible to disable many instances at once by adding the "disabled"
1147 keyword in a "defaults" section.
1148
1149 See also : "enabled"
1150
1151
1152enabled
1153 Enable a proxy, frontend or backend.
1154 May be used in sections : defaults | frontend | listen | backend
1155 yes | yes | yes | yes
1156 Arguments : none
1157
1158 The "enabled" keyword is used to explicitly enable an instance, when the
1159 defaults has been set to "disabled". This is very rarely used.
1160
1161 See also : "disabled"
1162
1163
1164errorfile <code> <file>
1165 Return a file contents instead of errors generated by HAProxy
1166 May be used in sections : defaults | frontend | listen | backend
1167 yes | yes | yes | yes
1168 Arguments :
1169 <code> is the HTTP status code. Currently, HAProxy is capable of
1170 generating codes 400, 403, 408, 500, 502, 503, and 504.
1171
1172 <file> designates a file containing the full HTTP response. It is
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001173 recommended to follow the common practice of appending ".http" to
Willy Tarreau0ba27502007-12-24 16:55:16 +01001174 the filename so that people do not confuse the response with HTML
1175 error pages.
1176
1177 It is important to understand that this keyword is not meant to rewrite
1178 errors returned by the server, but errors detected and returned by HAProxy.
1179 This is why the list of supported errors is limited to a small set.
1180
1181 The files are returned verbatim on the TCP socket. This allows any trick such
1182 as redirections to another URL or site, as well as tricks to clean cookies,
1183 force enable or disable caching, etc... The package provides default error
1184 files returning the same contents as default errors.
1185
1186 The files are read at the same time as the configuration and kept in memory.
1187 For this reason, the errors continue to be returned even when the process is
1188 chrooted, and no file change is considered while the process is running. A
Willy Tarreauc27debf2008-01-06 08:57:02 +01001189 simple method for developing those files consists in associating them to the
Willy Tarreau0ba27502007-12-24 16:55:16 +01001190 403 status code and interrogating a blocked URL.
1191
1192 See also : "errorloc", "errorloc302", "errorloc303"
1193
Willy Tarreau2769aa02007-12-27 18:26:09 +01001194
1195errorloc <code> <url>
1196errorloc302 <code> <url>
1197 Return an HTTP redirection to a URL instead of errors generated by HAProxy
1198 May be used in sections : defaults | frontend | listen | backend
1199 yes | yes | yes | yes
1200 Arguments :
1201 <code> is the HTTP status code. Currently, HAProxy is capable of
1202 generating codes 400, 403, 408, 500, 502, 503, and 504.
1203
1204 <url> it is the exact contents of the "Location" header. It may contain
1205 either a relative URI to an error page hosted on the same site,
1206 or an absolute URI designating an error page on another site.
1207 Special care should be given to relative URIs to avoid redirect
1208 loops if the URI itself may generate the same error (eg: 500).
1209
1210 It is important to understand that this keyword is not meant to rewrite
1211 errors returned by the server, but errors detected and returned by HAProxy.
1212 This is why the list of supported errors is limited to a small set.
1213
1214 Note that both keyword return the HTTP 302 status code, which tells the
1215 client to fetch the designated URL using the same HTTP method. This can be
1216 quite problematic in case of non-GET methods such as POST, because the URL
1217 sent to the client might not be allowed for something other than GET. To
1218 workaround this problem, please use "errorloc303" which send the HTTP 303
1219 status code, indicating to the client that the URL must be fetched with a GET
1220 request.
1221
1222 See also : "errorfile", "errorloc303"
1223
1224
1225errorloc303 <code> <url>
1226 Return an HTTP redirection to a URL instead of errors generated by HAProxy
1227 May be used in sections : defaults | frontend | listen | backend
1228 yes | yes | yes | yes
1229 Arguments :
1230 <code> is the HTTP status code. Currently, HAProxy is capable of
1231 generating codes 400, 403, 408, 500, 502, 503, and 504.
1232
1233 <url> it is the exact contents of the "Location" header. It may contain
1234 either a relative URI to an error page hosted on the same site,
1235 or an absolute URI designating an error page on another site.
1236 Special care should be given to relative URIs to avoid redirect
1237 loops if the URI itself may generate the same error (eg: 500).
1238
1239 It is important to understand that this keyword is not meant to rewrite
1240 errors returned by the server, but errors detected and returned by HAProxy.
1241 This is why the list of supported errors is limited to a small set.
1242
1243 Note that both keyword return the HTTP 303 status code, which tells the
1244 client to fetch the designated URL using the same HTTP GET method. This
1245 solves the usual problems associated with "errorloc" and the 302 code. It is
1246 possible that some very old browsers designed before HTTP/1.1 do not support
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001247 it, but no such problem has been reported till now.
Willy Tarreau2769aa02007-12-27 18:26:09 +01001248
1249 See also : "errorfile", "errorloc", "errorloc302"
1250
1251
1252fullconn <conns>
1253 Specify at what backend load the servers will reach their maxconn
1254 May be used in sections : defaults | frontend | listen | backend
1255 yes | no | yes | yes
1256 Arguments :
1257 <conns> is the number of connections on the backend which will make the
1258 servers use the maximal number of connections.
1259
Willy Tarreau198a7442008-01-17 12:05:32 +01001260 When a server has a "maxconn" parameter specified, it means that its number
Willy Tarreau2769aa02007-12-27 18:26:09 +01001261 of concurrent connections will never go higher. Additionally, if it has a
Willy Tarreau198a7442008-01-17 12:05:32 +01001262 "minconn" parameter, it indicates a dynamic limit following the backend's
Willy Tarreau2769aa02007-12-27 18:26:09 +01001263 load. The server will then always accept at least <minconn> connections,
1264 never more than <maxconn>, and the limit will be on the ramp between both
1265 values when the backend has less than <conns> concurrent connections. This
1266 makes it possible to limit the load on the servers during normal loads, but
1267 push it further for important loads without overloading the servers during
1268 exceptionnal loads.
1269
1270 Example :
1271 # The servers will accept between 100 and 1000 concurrent connections each
1272 # and the maximum of 1000 will be reached when the backend reaches 10000
1273 # connections.
1274 backend dynamic
1275 fullconn 10000
1276 server srv1 dyn1:80 minconn 100 maxconn 1000
1277 server srv2 dyn2:80 minconn 100 maxconn 1000
1278
1279 See also : "maxconn", "server"
1280
1281
1282grace <time>
1283 Maintain a proxy operational for some time after a soft stop
1284 May be used in sections : defaults | frontend | listen | backend
1285 no | yes | yes | yes
1286 Arguments :
1287 <time> is the time (by default in milliseconds) for which the instance
1288 will remain operational with the frontend sockets still listening
1289 when a soft-stop is received via the SIGUSR1 signal.
1290
1291 This may be used to ensure that the services disappear in a certain order.
1292 This was designed so that frontends which are dedicated to monitoring by an
1293 external equipement fail immediately while other ones remain up for the time
1294 needed by the equipment to detect the failure.
1295
1296 Note that currently, there is very little benefit in using this parameter,
1297 and it may in fact complicate the soft-reconfiguration process more than
1298 simplify it.
1299
Willy Tarreau0ba27502007-12-24 16:55:16 +01001300
1301http-check disable-on-404
1302 Enable a maintenance mode upon HTTP/404 response to health-checks
1303 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau2769aa02007-12-27 18:26:09 +01001304 yes | no | yes | yes
Willy Tarreau0ba27502007-12-24 16:55:16 +01001305 Arguments : none
1306
1307 When this option is set, a server which returns an HTTP code 404 will be
1308 excluded from further load-balancing, but will still receive persistent
1309 connections. This provides a very convenient method for Web administrators
1310 to perform a graceful shutdown of their servers. It is also important to note
1311 that a server which is detected as failed while it was in this mode will not
1312 generate an alert, just a notice. If the server responds 2xx or 3xx again, it
1313 will immediately be reinserted into the farm. The status on the stats page
1314 reports "NOLB" for a server in this mode. It is important to note that this
1315 option only works in conjunction with the "httpchk" option.
1316
Willy Tarreau2769aa02007-12-27 18:26:09 +01001317 See also : "option httpchk"
1318
1319
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01001320id <value>
1321 Set a persistent value for proxy ID. Must be unique and larger than 1000, as
1322 smaller values are reserved for auto-assigned ids.
1323
1324
Willy Tarreau2769aa02007-12-27 18:26:09 +01001325log global
1326log <address> <facility> [<level>]
1327 Enable per-instance logging of events and traffic.
1328 May be used in sections : defaults | frontend | listen | backend
1329 yes | yes | yes | yes
1330 Arguments :
1331 global should be used when the instance's logging parameters are the
1332 same as the global ones. This is the most common usage. "global"
1333 replaces <address>, <facility> and <level> with those of the log
1334 entries found in the "global" section. Only one "log global"
1335 statement may be used per instance, and this form takes no other
1336 parameter.
1337
1338 <address> indicates where to send the logs. It takes the same format as
1339 for the "global" section's logs, and can be one of :
1340
1341 - An IPv4 address optionally followed by a colon (':') and a UDP
1342 port. If no port is specified, 514 is used by default (the
1343 standard syslog port).
1344
1345 - A filesystem path to a UNIX domain socket, keeping in mind
1346 considerations for chroot (be sure the path is accessible
1347 inside the chroot) and uid/gid (be sure the path is
1348 appropriately writeable).
1349
1350 <facility> must be one of the 24 standard syslog facilities :
1351
1352 kern user mail daemon auth syslog lpr news
1353 uucp cron auth2 ftp ntp audit alert cron2
1354 local0 local1 local2 local3 local4 local5 local6 local7
1355
1356 <level> is optional and can be specified to filter outgoing messages. By
1357 default, all messages are sent. If a level is specified, only
1358 messages with a severity at least as important as this level
1359 will be sent. 8 levels are known :
1360
1361 emerg alert crit err warning notice info debug
1362
1363 Note that up to two "log" entries may be specified per instance. However, if
1364 "log global" is used and if the "global" section already contains 2 log
1365 entries, then additional log entries will be ignored.
1366
1367 Also, it is important to keep in mind that it is the frontend which decides
1368 what to log, and that in case of content switching, the log entries from the
1369 backend will be ignored.
1370
1371 Example :
1372 log global
1373 log 127.0.0.1:514 local0 notice
1374
1375
1376maxconn <conns>
1377 Fix the maximum number of concurrent connections on a frontend
1378 May be used in sections : defaults | frontend | listen | backend
1379 yes | yes | yes | no
1380 Arguments :
1381 <conns> is the maximum number of concurrent connections the frontend will
1382 accept to serve. Excess connections will be queued by the system
1383 in the socket's listen queue and will be served once a connection
1384 closes.
1385
1386 If the system supports it, it can be useful on big sites to raise this limit
1387 very high so that haproxy manages connection queues, instead of leaving the
1388 clients with unanswered connection attempts. This value should not exceed the
1389 global maxconn. Also, keep in mind that a connection contains two buffers
1390 of 8kB each, as well as some other data resulting in about 17 kB of RAM being
1391 consumed per established connection. That means that a medium system equipped
1392 with 1GB of RAM can withstand around 40000-50000 concurrent connections if
1393 properly tuned.
1394
1395 Also, when <conns> is set to large values, it is possible that the servers
1396 are not sized to accept such loads, and for this reason it is generally wise
1397 to assign them some reasonable connection limits.
1398
1399 See also : "server", global section's "maxconn", "fullconn"
1400
1401
1402mode { tcp|http|health }
1403 Set the running mode or protocol of the instance
1404 May be used in sections : defaults | frontend | listen | backend
1405 yes | yes | yes | yes
1406 Arguments :
1407 tcp The instance will work in pure TCP mode. A full-duplex connection
1408 will be established between clients and servers, and no layer 7
1409 examination will be performed. This is the default mode. It
1410 should be used for SSL, SSH, SMTP, ...
1411
1412 http The instance will work in HTTP mode. The client request will be
1413 analyzed in depth before connecting to any server. Any request
1414 which is not RFC-compliant will be rejected. Layer 7 filtering,
1415 processing and switching will be possible. This is the mode which
1416 brings HAProxy most of its value.
1417
1418 health The instance will work in "health" mode. It will just reply "OK"
1419 to incoming connections and close the connection. Nothing will be
1420 logged. This mode is used to reply to external components health
1421 checks. This mode is deprecated and should not be used anymore as
1422 it is possible to do the same and even better by combining TCP or
1423 HTTP modes with the "monitor" keyword.
1424
1425 When doing content switching, it is mandatory that the frontend and the
1426 backend are in the same mode (generally HTTP), otherwise the configuration
1427 will be refused.
1428
1429 Example :
1430 defaults http_instances
1431 mode http
1432
1433 See also : "monitor", "monitor-net"
1434
Willy Tarreau0ba27502007-12-24 16:55:16 +01001435
1436monitor fail [if | unless] <condition>
Willy Tarreau2769aa02007-12-27 18:26:09 +01001437 Add a condition to report a failure to a monitor HTTP request.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001438 May be used in sections : defaults | frontend | listen | backend
1439 no | yes | yes | no
Willy Tarreau0ba27502007-12-24 16:55:16 +01001440 Arguments :
1441 if <cond> the monitor request will fail if the condition is satisfied,
1442 and will succeed otherwise. The condition should describe a
1443 combinated test which must induce a failure if all conditions
1444 are met, for instance a low number of servers both in a
1445 backend and its backup.
1446
1447 unless <cond> the monitor request will succeed only if the condition is
1448 satisfied, and will fail otherwise. Such a condition may be
1449 based on a test on the presence of a minimum number of active
1450 servers in a list of backends.
1451
1452 This statement adds a condition which can force the response to a monitor
1453 request to report a failure. By default, when an external component queries
1454 the URI dedicated to monitoring, a 200 response is returned. When one of the
1455 conditions above is met, haproxy will return 503 instead of 200. This is
1456 very useful to report a site failure to an external component which may base
1457 routing advertisements between multiple sites on the availability reported by
1458 haproxy. In this case, one would rely on an ACL involving the "nbsrv"
Willy Tarreau2769aa02007-12-27 18:26:09 +01001459 criterion. Note that "monitor fail" only works in HTTP mode.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001460
1461 Example:
1462 frontend www
Willy Tarreau2769aa02007-12-27 18:26:09 +01001463 mode http
Willy Tarreau0ba27502007-12-24 16:55:16 +01001464 acl site_dead nbsrv(dynamic) lt 2
1465 acl site_dead nbsrv(static) lt 2
1466 monitor-uri /site_alive
1467 monitor fail if site_dead
1468
Willy Tarreau2769aa02007-12-27 18:26:09 +01001469 See also : "monitor-net", "monitor-uri"
1470
1471
1472monitor-net <source>
1473 Declare a source network which is limited to monitor requests
1474 May be used in sections : defaults | frontend | listen | backend
1475 yes | yes | yes | no
1476 Arguments :
1477 <source> is the source IPv4 address or network which will only be able to
1478 get monitor responses to any request. It can be either an IPv4
1479 address, a host name, or an address followed by a slash ('/')
1480 followed by a mask.
1481
1482 In TCP mode, any connection coming from a source matching <source> will cause
1483 the connection to be immediately closed without any log. This allows another
1484 equipement to probe the port and verify that it is still listening, without
1485 forwarding the connection to a remote server.
1486
1487 In HTTP mode, a connection coming from a source matching <source> will be
1488 accepted, the following response will be sent without waiting for a request,
1489 then the connection will be closed : "HTTP/1.0 200 OK". This is normally
1490 enough for any front-end HTTP probe to detect that the service is UP and
1491 running without forwarding the request to a backend server.
1492
1493 Monitor requests are processed very early. It is not possible to block nor
1494 divert them using ACLs. They cannot be logged either, and it is the intended
1495 purpose. They are only used to report HAProxy's health to an upper component,
1496 nothing more. Right now, it is not possible to set failure conditions on
1497 requests caught by "monitor-net".
1498
1499 Example :
1500 # addresses .252 and .253 are just probing us.
1501 frontend www
1502 monitor-net 192.168.0.252/31
1503
1504 See also : "monitor fail", "monitor-uri"
1505
1506
1507monitor-uri <uri>
1508 Intercept a URI used by external components' monitor requests
1509 May be used in sections : defaults | frontend | listen | backend
1510 yes | yes | yes | no
1511 Arguments :
1512 <uri> is the exact URI which we want to intercept to return HAProxy's
1513 health status instead of forwarding the request.
1514
1515 When an HTTP request referencing <uri> will be received on a frontend,
1516 HAProxy will not forward it nor log it, but instead will return either
1517 "HTTP/1.0 200 OK" or "HTTP/1.0 503 Service unavailable", depending on failure
1518 conditions defined with "monitor fail". This is normally enough for any
1519 front-end HTTP probe to detect that the service is UP and running without
1520 forwarding the request to a backend server. Note that the HTTP method, the
1521 version and all headers are ignored, but the request must at least be valid
1522 at the HTTP level. This keyword may only be used with an HTTP-mode frontend.
1523
1524 Monitor requests are processed very early. It is not possible to block nor
1525 divert them using ACLs. They cannot be logged either, and it is the intended
1526 purpose. They are only used to report HAProxy's health to an upper component,
1527 nothing more. However, it is possible to add any number of conditions using
1528 "monitor fail" and ACLs so that the result can be adjusted to whatever check
1529 can be imagined (most often the number of available servers in a backend).
1530
1531 Example :
1532 # Use /haproxy_test to report haproxy's status
1533 frontend www
1534 mode http
1535 monitor-uri /haproxy_test
1536
1537 See also : "monitor fail", "monitor-net"
1538
Willy Tarreau0ba27502007-12-24 16:55:16 +01001539
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001540option abortonclose
1541no option abortonclose
1542 Enable or disable early dropping of aborted requests pending in queues.
1543 May be used in sections : defaults | frontend | listen | backend
1544 yes | no | yes | yes
1545 Arguments : none
1546
1547 In presence of very high loads, the servers will take some time to respond.
1548 The per-instance connection queue will inflate, and the response time will
1549 increase respective to the size of the queue times the average per-session
1550 response time. When clients will wait for more than a few seconds, they will
Willy Tarreau198a7442008-01-17 12:05:32 +01001551 often hit the "STOP" button on their browser, leaving a useless request in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001552 the queue, and slowing down other users, and the servers as well, because the
1553 request will eventually be served, then aborted at the first error
1554 encountered while delivering the response.
1555
1556 As there is no way to distinguish between a full STOP and a simple output
1557 close on the client side, HTTP agents should be conservative and consider
1558 that the client might only have closed its output channel while waiting for
1559 the response. However, this introduces risks of congestion when lots of users
1560 do the same, and is completely useless nowadays because probably no client at
1561 all will close the session while waiting for the response. Some HTTP agents
1562 support this behaviour (Squid, Apache, HAProxy), and others do not (TUX, most
1563 hardware-based load balancers). So the probability for a closed input channel
Willy Tarreau198a7442008-01-17 12:05:32 +01001564 to represent a user hitting the "STOP" button is close to 100%, and the risk
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001565 of being the single component to break rare but valid traffic is extremely
1566 low, which adds to the temptation to be able to abort a session early while
1567 still not served and not pollute the servers.
1568
1569 In HAProxy, the user can choose the desired behaviour using the option
1570 "abortonclose". By default (without the option) the behaviour is HTTP
1571 compliant and aborted requests will be served. But when the option is
1572 specified, a session with an incoming channel closed will be aborted while
1573 it is still possible, either pending in the queue for a connection slot, or
1574 during the connection establishment if the server has not yet acknowledged
1575 the connection request. This considerably reduces the queue size and the load
1576 on saturated servers when users are tempted to click on STOP, which in turn
1577 reduces the response time for other users.
1578
1579 If this option has been enabled in a "defaults" section, it can be disabled
1580 in a specific instance by prepending the "no" keyword before it.
1581
1582 See also : "timeout queue" and server's "maxconn" and "maxqueue" parameters
1583
1584
1585option allbackups
1586no option allbackups
1587 Use either all backup servers at a time or only the first one
1588 May be used in sections : defaults | frontend | listen | backend
1589 yes | no | yes | yes
1590 Arguments : none
1591
1592 By default, the first operational backup server gets all traffic when normal
1593 servers are all down. Sometimes, it may be preferred to use multiple backups
1594 at once, because one will not be enough. When "option allbackups" is enabled,
1595 the load balancing will be performed among all backup servers when all normal
1596 ones are unavailable. The same load balancing algorithm will be used and the
1597 servers' weights will be respected. Thus, there will not be any priority
1598 order between the backup servers anymore.
1599
1600 This option is mostly used with static server farms dedicated to return a
1601 "sorry" page when an application is completely offline.
1602
1603 If this option has been enabled in a "defaults" section, it can be disabled
1604 in a specific instance by prepending the "no" keyword before it.
1605
1606
1607option checkcache
1608no option checkcache
1609 Analyze all server responses and block requests with cachable cookies
1610 May be used in sections : defaults | frontend | listen | backend
1611 yes | no | yes | yes
1612 Arguments : none
1613
1614 Some high-level frameworks set application cookies everywhere and do not
1615 always let enough control to the developer to manage how the responses should
1616 be cached. When a session cookie is returned on a cachable object, there is a
1617 high risk of session crossing or stealing between users traversing the same
1618 caches. In some situations, it is better to block the response than to let
1619 some sensible session information go in the wild.
1620
1621 The option "checkcache" enables deep inspection of all server responses for
1622 strict compliance with HTTP specification in terms of cachability. It
Willy Tarreau198a7442008-01-17 12:05:32 +01001623 carefully checks "Cache-control", "Pragma" and "Set-cookie" headers in server
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001624 response to check if there's a risk of caching a cookie on a client-side
1625 proxy. When this option is enabled, the only responses which can be delivered
Willy Tarreau198a7442008-01-17 12:05:32 +01001626 to the client are :
1627 - all those without "Set-Cookie" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001628 - all those with a return code other than 200, 203, 206, 300, 301, 410,
Willy Tarreau198a7442008-01-17 12:05:32 +01001629 provided that the server has not set a "Cache-control: public" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001630 - all those that come from a POST request, provided that the server has not
1631 set a 'Cache-Control: public' header ;
1632 - those with a 'Pragma: no-cache' header
1633 - those with a 'Cache-control: private' header
1634 - those with a 'Cache-control: no-store' header
1635 - those with a 'Cache-control: max-age=0' header
1636 - those with a 'Cache-control: s-maxage=0' header
1637 - those with a 'Cache-control: no-cache' header
1638 - those with a 'Cache-control: no-cache="set-cookie"' header
1639 - those with a 'Cache-control: no-cache="set-cookie,' header
1640 (allowing other fields after set-cookie)
1641
1642 If a response doesn't respect these requirements, then it will be blocked
Willy Tarreau198a7442008-01-17 12:05:32 +01001643 just as if it was from an "rspdeny" filter, with an "HTTP 502 bad gateway".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001644 The session state shows "PH--" meaning that the proxy blocked the response
1645 during headers processing. Additionnaly, an alert will be sent in the logs so
1646 that admins are informed that there's something to be fixed.
1647
1648 Due to the high impact on the application, the application should be tested
1649 in depth with the option enabled before going to production. It is also a
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001650 good practice to always activate it during tests, even if it is not used in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001651 production, as it will report potentially dangerous application behaviours.
1652
1653 If this option has been enabled in a "defaults" section, it can be disabled
1654 in a specific instance by prepending the "no" keyword before it.
1655
1656
1657option clitcpka
1658no option clitcpka
1659 Enable or disable the sending of TCP keepalive packets on the client side
1660 May be used in sections : defaults | frontend | listen | backend
1661 yes | yes | yes | no
1662 Arguments : none
1663
1664 When there is a firewall or any session-aware component between a client and
1665 a server, and when the protocol involves very long sessions with long idle
1666 periods (eg: remote desktops), there is a risk that one of the intermediate
1667 components decides to expire a session which has remained idle for too long.
1668
1669 Enabling socket-level TCP keep-alives makes the system regularly send packets
1670 to the other end of the connection, leaving it active. The delay between
1671 keep-alive probes is controlled by the system only and depends both on the
1672 operating system and its tuning parameters.
1673
1674 It is important to understand that keep-alive packets are neither emitted nor
1675 received at the application level. It is only the network stacks which sees
1676 them. For this reason, even if one side of the proxy already uses keep-alives
1677 to maintain its connection alive, those keep-alive packets will not be
1678 forwarded to the other side of the proxy.
1679
1680 Please note that this has nothing to do with HTTP keep-alive.
1681
1682 Using option "clitcpka" enables the emission of TCP keep-alive probes on the
1683 client side of a connection, which should help when session expirations are
1684 noticed between HAProxy and a client.
1685
1686 If this option has been enabled in a "defaults" section, it can be disabled
1687 in a specific instance by prepending the "no" keyword before it.
1688
1689 See also : "option srvtcpka", "option tcpka"
1690
1691
Willy Tarreau0ba27502007-12-24 16:55:16 +01001692option contstats
1693 Enable continuous traffic statistics updates
1694 May be used in sections : defaults | frontend | listen | backend
1695 yes | yes | yes | no
1696 Arguments : none
1697
1698 By default, counters used for statistics calculation are incremented
1699 only when a session finishes. It works quite well when serving small
1700 objects, but with big ones (for example large images or archives) or
1701 with A/V streaming, a graph generated from haproxy counters looks like
1702 a hedgehog. With this option enabled counters get incremented continuously,
1703 during a whole session. Recounting touches a hotpath directly so
1704 it is not enabled by default, as it has small performance impact (~0.5%).
1705
1706
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001707option dontlognull
1708no option dontlognull
1709 Enable or disable logging of null connections
1710 May be used in sections : defaults | frontend | listen | backend
1711 yes | yes | yes | no
1712 Arguments : none
1713
1714 In certain environments, there are components which will regularly connect to
1715 various systems to ensure that they are still alive. It can be the case from
1716 another load balancer as well as from monitoring systems. By default, even a
1717 simple port probe or scan will produce a log. If those connections pollute
1718 the logs too much, it is possible to enable option "dontlognull" to indicate
1719 that a connection on which no data has been transferred will not be logged,
1720 which typically corresponds to those probes.
1721
1722 It is generally recommended not to use this option in uncontrolled
1723 environments (eg: internet), otherwise scans and other malicious activities
1724 would not be logged.
1725
1726 If this option has been enabled in a "defaults" section, it can be disabled
1727 in a specific instance by prepending the "no" keyword before it.
1728
Willy Tarreauced27012008-01-17 20:35:34 +01001729 See also : "log", "monitor-net", "monitor-uri" and section 2.6 about logging.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001730
1731
1732option forceclose
1733no option forceclose
1734 Enable or disable active connection closing after response is transferred.
1735 May be used in sections : defaults | frontend | listen | backend
1736 yes | no | yes | yes
1737 Arguments : none
1738
1739 Some HTTP servers do not necessarily close the connections when they receive
1740 the "Connection: close" set by "option httpclose", and if the client does not
1741 close either, then the connection remains open till the timeout expires. This
1742 causes high number of simultaneous connections on the servers and shows high
1743 global session times in the logs.
1744
1745 When this happens, it is possible to use "option forceclose". It will
1746 actively close the outgoing server channel as soon as the server begins to
1747 reply and only if the request buffer is empty. Note that this should NOT be
1748 used if CONNECT requests are expected between the client and the server. This
1749 option implicitly enables the "httpclose" option.
1750
1751 If this option has been enabled in a "defaults" section, it can be disabled
1752 in a specific instance by prepending the "no" keyword before it.
1753
1754 See also : "option httpclose"
1755
1756
Willy Tarreauc27debf2008-01-06 08:57:02 +01001757option forwardfor [ except <network> ]
1758 Enable insertion of the X-Forwarded-For header to requests sent to servers
1759 May be used in sections : defaults | frontend | listen | backend
1760 yes | yes | yes | yes
1761 Arguments :
1762 <network> is an optional argument used to disable this option for sources
1763 matching <network>
1764
1765 Since HAProxy works in reverse-proxy mode, the servers see its IP address as
1766 their client address. This is sometimes annoying when the client's IP address
1767 is expected in server logs. To solve this problem, the well-known HTTP header
1768 "X-Forwarded-For" may be added by HAProxy to all requests sent to the server.
1769 This header contains a value representing the client's IP address. Since this
1770 header is always appended at the end of the existing header list, the server
1771 must be configured to always use the last occurrence of this header only. See
1772 the server's manual to find how to enable use of this standard header.
1773
1774 Sometimes, a same HAProxy instance may be shared between a direct client
1775 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
1776 used to decrypt HTTPS traffic). It is possible to disable the addition of the
1777 header for a known source address or network by adding the "except" keyword
1778 followed by the network address. In this case, any source IP matching the
1779 network will not cause an addition of this header. Most common uses are with
1780 private networks or 127.0.0.1.
1781
1782 This option may be specified either in the frontend or in the backend. If at
1783 least one of them uses it, the header will be added.
1784
1785 It is important to note that as long as HAProxy does not support keep-alive
1786 connections, only the first request of a connection will receive the header.
1787 For this reason, it is important to ensure that "option httpclose" is set
1788 when using this option.
1789
1790 Example :
1791 # Public HTTP address also used by stunnel on the same machine
1792 frontend www
1793 mode http
1794 option forwardfor except 127.0.0.1 # stunnel already adds the header
1795
1796 See also : "option httpclose"
1797
1798
1799option http_proxy
1800no option http_proxy
1801 Enable or disable plain HTTP proxy mode
1802 May be used in sections : defaults | frontend | listen | backend
1803 yes | yes | yes | yes
1804 Arguments : none
1805
1806 It sometimes happens that people need a pure HTTP proxy which understands
1807 basic proxy requests without caching nor any fancy feature. In this case,
1808 it may be worth setting up an HAProxy instance with the "option http_proxy"
1809 set. In this mode, no server is declared, and the connection is forwarded to
1810 the IP address and port found in the URL after the "http://" scheme.
1811
1812 No host address resolution is performed, so this only works when pure IP
1813 addresses are passed. Since this option's usage perimeter is rather limited,
1814 it will probably be used only by experts who know they need exactly it. Last,
1815 if the clients are susceptible of sending keep-alive requests, it will be
1816 needed to add "option http_close" to ensure that all requests will correctly
1817 be analyzed.
1818
1819 If this option has been enabled in a "defaults" section, it can be disabled
1820 in a specific instance by prepending the "no" keyword before it.
1821
1822 Example :
1823 # this backend understands HTTP proxy requests and forwards them directly.
1824 backend direct_forward
1825 option httpclose
1826 option http_proxy
1827
1828 See also : "option httpclose"
1829
1830
1831option httpchk
1832option httpchk <uri>
1833option httpchk <method> <uri>
1834option httpchk <method> <uri> <version>
1835 Enable HTTP protocol to check on the servers health
1836 May be used in sections : defaults | frontend | listen | backend
1837 yes | no | yes | yes
1838 Arguments :
1839 <method> is the optional HTTP method used with the requests. When not set,
1840 the "OPTIONS" method is used, as it generally requires low server
1841 processing and is easy to filter out from the logs. Any method
1842 may be used, though it is not recommended to invent non-standard
1843 ones.
1844
1845 <uri> is the URI referenced in the HTTP requests. It defaults to " / "
1846 which is accessible by default on almost any server, but may be
1847 changed to any other URI. Query strings are permitted.
1848
1849 <version> is the optional HTTP version string. It defaults to "HTTP/1.0"
1850 but some servers might behave incorrectly in HTTP 1.0, so turning
1851 it to HTTP/1.1 may sometimes help. Note that the Host field is
1852 mandatory in HTTP/1.1, and as a trick, it is possible to pass it
1853 after "\r\n" following the version string.
1854
1855 By default, server health checks only consist in trying to establish a TCP
1856 connection. When "option httpchk" is specified, a complete HTTP request is
1857 sent once the TCP connection is established, and responses 2xx and 3xx are
1858 considered valid, while all other ones indicate a server failure, including
1859 the lack of any response.
1860
1861 The port and interval are specified in the server configuration.
1862
1863 This option does not necessarily require an HTTP backend, it also works with
1864 plain TCP backends. This is particularly useful to check simple scripts bound
1865 to some dedicated ports using the inetd daemon.
1866
1867 Examples :
1868 # Relay HTTPS traffic to Apache instance and check service availability
1869 # using HTTP request "OPTIONS * HTTP/1.1" on port 80.
1870 backend https_relay
1871 mode tcp
1872 option httpchk OPTIONS * HTTP/1.1\r\nHost: www
1873 server apache1 192.168.1.1:443 check port 80
1874
1875 See also : "option ssl-hello-chk", "option smtpchk", "http-check" and the
1876 "check", "port" and "interval" server options.
1877
1878
1879option httpclose
1880no option httpclose
1881 Enable or disable passive HTTP connection closing
1882 May be used in sections : defaults | frontend | listen | backend
1883 yes | yes | yes | yes
1884 Arguments : none
1885
1886 As stated in section 2.1, HAProxy does not yes support the HTTP keep-alive
1887 mode. So by default, if a client communicates with a server in this mode, it
1888 will only analyze, log, and process the first request of each connection. To
1889 workaround this limitation, it is possible to specify "option httpclose". It
1890 will check if a "Connection: close" header is already set in each direction,
1891 and will add one if missing. Each end should react to this by actively
1892 closing the TCP connection after each transfer, thus resulting in a switch to
1893 the HTTP close mode. Any "Connection" header different from "close" will also
1894 be removed.
1895
1896 It seldom happens that some servers incorrectly ignore this header and do not
1897 close the connection eventough they reply "Connection: close". For this
1898 reason, they are not compatible with older HTTP 1.0 browsers. If this
1899 happens it is possible to use the "option forceclose" which actively closes
1900 the request connection once the server responds.
1901
1902 This option may be set both in a frontend and in a backend. It is enabled if
1903 at least one of the frontend or backend holding a connection has it enabled.
1904 If "option forceclose" is specified too, it has precedence over "httpclose".
1905
1906 If this option has been enabled in a "defaults" section, it can be disabled
1907 in a specific instance by prepending the "no" keyword before it.
1908
1909 See also : "option forceclose"
1910
1911
1912option httplog
1913 Enable logging of HTTP request, session state and timers
1914 May be used in sections : defaults | frontend | listen | backend
1915 yes | yes | yes | yes
1916 Arguments : none
1917
1918 By default, the log output format is very poor, as it only contains the
1919 source and destination addresses, and the instance name. By specifying
1920 "option httplog", each log line turns into a much richer format including,
1921 but not limited to, the HTTP request, the connection timers, the session
1922 status, the connections numbers, the captured headers and cookies, the
1923 frontend, backend and server name, and of course the source address and
1924 ports.
1925
1926 This option may be set either in the frontend or the backend.
1927
Willy Tarreauced27012008-01-17 20:35:34 +01001928 See also : section 2.6 about logging.
Willy Tarreauc27debf2008-01-06 08:57:02 +01001929
Willy Tarreauc27debf2008-01-06 08:57:02 +01001930
1931option logasap
1932no option logasap
1933 Enable or disable early logging of HTTP requests
1934 May be used in sections : defaults | frontend | listen | backend
1935 yes | yes | yes | no
1936 Arguments : none
1937
1938 By default, HTTP requests are logged upon termination so that the total
1939 transfer time and the number of bytes appear in the logs. When large objects
1940 are being transferred, it may take a while before the request appears in the
1941 logs. Using "option logasap", the request gets logged as soon as the server
1942 sends the complete headers. The only missing information in the logs will be
1943 the total number of bytes which will indicate everything except the amount
1944 of data transferred, and the total time which will not take the transfer
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001945 time into account. In such a situation, it's a good practice to capture the
Willy Tarreauc27debf2008-01-06 08:57:02 +01001946 "Content-Length" response header so that the logs at least indicate how many
1947 bytes are expected to be transferred.
1948
Willy Tarreauced27012008-01-17 20:35:34 +01001949 See also : "option httplog", "capture response header", and section 2.6 about
Willy Tarreauc27debf2008-01-06 08:57:02 +01001950 logging.
1951
1952
Willy Tarreaua453bdd2008-01-08 19:50:52 +01001953option nolinger
1954no option nolinger
1955 Enable or disable immediate session ressource cleaning after close
1956 May be used in sections: defaults | frontend | listen | backend
1957 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01001958 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01001959
1960 When clients or servers abort connections in a dirty way (eg: they are
1961 physically disconnected), the session timeouts triggers and the session is
1962 closed. But it will remain in FIN_WAIT1 state for some time in the system,
1963 using some resources and possibly limiting the ability to establish newer
1964 connections.
1965
1966 When this happens, it is possible to activate "option nolinger" which forces
1967 the system to immediately remove any socket's pending data on close. Thus,
1968 the session is instantly purged from the system's tables. This usually has
1969 side effects such as increased number of TCP resets due to old retransmits
1970 getting immediately rejected. Some firewalls may sometimes complain about
1971 this too.
1972
1973 For this reason, it is not recommended to use this option when not absolutely
1974 needed. You know that you need it when you have thousands of FIN_WAIT1
1975 sessions on your system (TIME_WAIT ones do not count).
1976
1977 This option may be used both on frontends and backends, depending on the side
1978 where it is required. Use it on the frontend for clients, and on the backend
1979 for servers.
1980
1981 If this option has been enabled in a "defaults" section, it can be disabled
1982 in a specific instance by prepending the "no" keyword before it.
1983
1984
1985option persist
1986no option persist
1987 Enable or disable forced persistence on down servers
1988 May be used in sections: defaults | frontend | listen | backend
1989 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01001990 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01001991
1992 When an HTTP request reaches a backend with a cookie which references a dead
1993 server, by default it is redispatched to another server. It is possible to
1994 force the request to be sent to the dead server first using "option persist"
1995 if absolutely needed. A common use case is when servers are under extreme
1996 load and spend their time flapping. In this case, the users would still be
1997 directed to the server they opened the session on, in the hope they would be
1998 correctly served. It is recommended to use "option redispatch" in conjunction
1999 with this option so that in the event it would not be possible to connect to
2000 the server at all (server definitely dead), the client would finally be
2001 redirected to another valid server.
2002
2003 If this option has been enabled in a "defaults" section, it can be disabled
2004 in a specific instance by prepending the "no" keyword before it.
2005
2006 See also : "option redispatch", "retries"
2007
2008
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002009option redispatch
2010no option redispatch
2011 Enable or disable session redistribution in case of connection failure
2012 May be used in sections: defaults | frontend | listen | backend
2013 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002014 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002015
2016 In HTTP mode, if a server designated by a cookie is down, clients may
2017 definitely stick to it because they cannot flush the cookie, so they will not
2018 be able to access the service anymore.
2019
2020 Specifying "option redispatch" will allow the proxy to break their
2021 persistence and redistribute them to a working server.
2022
2023 It also allows to retry last connection to another server in case of multiple
2024 connection failures. Of course, it requires having "retries" set to a nonzero
2025 value.
2026
2027 This form is the preferred form, which replaces both the "redispatch" and
2028 "redisp" keywords.
2029
2030 If this option has been enabled in a "defaults" section, it can be disabled
2031 in a specific instance by prepending the "no" keyword before it.
2032
2033 See also : "redispatch", "retries"
2034
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002035
2036option smtpchk
2037option smtpchk <hello> <domain>
2038 Use SMTP health checks for server testing
2039 May be used in sections : defaults | frontend | listen | backend
2040 yes | no | yes | yes
2041 Arguments :
2042 <hello> is an optional argument. It is the "hello" command to use. It can
2043 be either "HELO" (for SMTP) or "EHLO" (for ESTMP). All other
2044 values will be turned into the default command ("HELO").
2045
2046 <domain> is the domain name to present to the server. It may only be
2047 specified (and is mandatory) if the hello command has been
2048 specified. By default, "localhost" is used.
2049
2050 When "option smtpchk" is set, the health checks will consist in TCP
2051 connections followed by an SMTP command. By default, this command is
2052 "HELO localhost". The server's return code is analyzed and only return codes
2053 starting with a "2" will be considered as valid. All other responses,
2054 including a lack of response will constitute an error and will indicate a
2055 dead server.
2056
2057 This test is meant to be used with SMTP servers or relays. Depending on the
2058 request, it is possible that some servers do not log each connection attempt,
2059 so you may want to experiment to improve the behaviour. Using telnet on port
2060 25 is often easier than adjusting the configuration.
2061
2062 Most often, an incoming SMTP server needs to see the client's IP address for
2063 various purposes, including spam filtering, anti-spoofing and logging. When
2064 possible, it is often wise to masquerade the client's IP address when
2065 connecting to the server using the "usesrc" argument of the "source" keyword,
2066 which requires the cttproxy feature to be compiled in.
2067
2068 Example :
2069 option smtpchk HELO mydomain.org
2070
2071 See also : "option httpchk", "source"
2072
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002073
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002074option srvtcpka
2075no option srvtcpka
2076 Enable or disable the sending of TCP keepalive packets on the server side
2077 May be used in sections : defaults | frontend | listen | backend
2078 yes | no | yes | yes
2079 Arguments : none
2080
2081 When there is a firewall or any session-aware component between a client and
2082 a server, and when the protocol involves very long sessions with long idle
2083 periods (eg: remote desktops), there is a risk that one of the intermediate
2084 components decides to expire a session which has remained idle for too long.
2085
2086 Enabling socket-level TCP keep-alives makes the system regularly send packets
2087 to the other end of the connection, leaving it active. The delay between
2088 keep-alive probes is controlled by the system only and depends both on the
2089 operating system and its tuning parameters.
2090
2091 It is important to understand that keep-alive packets are neither emitted nor
2092 received at the application level. It is only the network stacks which sees
2093 them. For this reason, even if one side of the proxy already uses keep-alives
2094 to maintain its connection alive, those keep-alive packets will not be
2095 forwarded to the other side of the proxy.
2096
2097 Please note that this has nothing to do with HTTP keep-alive.
2098
2099 Using option "srvtcpka" enables the emission of TCP keep-alive probes on the
2100 server side of a connection, which should help when session expirations are
2101 noticed between HAProxy and a server.
2102
2103 If this option has been enabled in a "defaults" section, it can be disabled
2104 in a specific instance by prepending the "no" keyword before it.
2105
2106 See also : "option clitcpka", "option tcpka"
2107
2108
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002109option ssl-hello-chk
2110 Use SSLv3 client hello health checks for server testing
2111 May be used in sections : defaults | frontend | listen | backend
2112 yes | no | yes | yes
2113 Arguments : none
2114
2115 When some SSL-based protocols are relayed in TCP mode through HAProxy, it is
2116 possible to test that the server correctly talks SSL instead of just testing
2117 that it accepts the TCP connection. When "option ssl-hello-chk" is set, pure
2118 SSLv3 client hello messages are sent once the connection is established to
2119 the server, and the response is analyzed to find an SSL server hello message.
2120 The server is considered valid only when the response contains this server
2121 hello message.
2122
2123 All servers tested till there correctly reply to SSLv3 client hello messages,
2124 and most servers tested do not even log the requests containing only hello
2125 messages, which is appreciable.
2126
2127 See also: "option httpchk"
2128
2129
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002130option tcpka
2131 Enable or disable the sending of TCP keepalive packets on both sides
2132 May be used in sections : defaults | frontend | listen | backend
2133 yes | yes | yes | yes
2134 Arguments : none
2135
2136 When there is a firewall or any session-aware component between a client and
2137 a server, and when the protocol involves very long sessions with long idle
2138 periods (eg: remote desktops), there is a risk that one of the intermediate
2139 components decides to expire a session which has remained idle for too long.
2140
2141 Enabling socket-level TCP keep-alives makes the system regularly send packets
2142 to the other end of the connection, leaving it active. The delay between
2143 keep-alive probes is controlled by the system only and depends both on the
2144 operating system and its tuning parameters.
2145
2146 It is important to understand that keep-alive packets are neither emitted nor
2147 received at the application level. It is only the network stacks which sees
2148 them. For this reason, even if one side of the proxy already uses keep-alives
2149 to maintain its connection alive, those keep-alive packets will not be
2150 forwarded to the other side of the proxy.
2151
2152 Please note that this has nothing to do with HTTP keep-alive.
2153
2154 Using option "tcpka" enables the emission of TCP keep-alive probes on both
2155 the client and server sides of a connection. Note that this is meaningful
2156 only in "defaults" or "listen" sections. If this option is used in a
2157 frontend, only the client side will get keep-alives, and if this option is
2158 used in a backend, only the server side will get keep-alives. For this
2159 reason, it is strongly recommended to explicitly use "option clitcpka" and
2160 "option srvtcpka" when the configuration is split between frontends and
2161 backends.
2162
2163 See also : "option clitcpka", "option srvtcpka"
2164
Willy Tarreau844e3c52008-01-11 16:28:18 +01002165
2166option tcplog
2167 Enable advanced logging of TCP connections with session state and timers
2168 May be used in sections : defaults | frontend | listen | backend
2169 yes | yes | yes | yes
2170 Arguments : none
2171
2172 By default, the log output format is very poor, as it only contains the
2173 source and destination addresses, and the instance name. By specifying
2174 "option tcplog", each log line turns into a much richer format including, but
2175 not limited to, the connection timers, the session status, the connections
2176 numbers, the frontend, backend and server name, and of course the source
2177 address and ports. This option is useful for pure TCP proxies in order to
2178 find which of the client or server disconnects or times out. For normal HTTP
2179 proxies, it's better to use "option httplog" which is even more complete.
2180
2181 This option may be set either in the frontend or the backend.
2182
Willy Tarreauced27012008-01-17 20:35:34 +01002183 See also : "option httplog", and section 2.6 about logging.
Willy Tarreau844e3c52008-01-11 16:28:18 +01002184
2185
2186option tcpsplice [ experimental ]
2187 Enable linux kernel-based acceleration of data relaying
2188 May be used in sections : defaults | frontend | listen | backend
2189 yes | yes | yes | yes
2190 Arguments : none
2191
2192 This option is only available when HAProxy has been built for use on Linux
2193 with USE_TCPSPLICE=1. This option requires a kernel patch which is available
2194 on http://www.linux-l7sw.org/.
2195
2196 When "option tcpsplice" is set, as soon as the server's response headers have
2197 been transferred, the session handling is transferred to the kernel which
2198 will forward all subsequent data from the server to the client untill the
2199 session closes. This leads to much faster data transfers between client and
2200 server since the data is not copied twice between kernel and user space, but
2201 there are some limitations such as the lack of information about the number
2202 of bytes transferred and the total transfer time.
2203
2204 This is an experimental feature. It happens to reliably work but issues
2205 caused by corner cases are to be expected.
2206
2207 Note that this option requires that the process permanently runs with
2208 CAP_NETADMIN privileges, which most often translates into running as root.
2209
2210
2211option transparent
2212no option transparent
2213 Enable client-side transparent proxying
2214 May be used in sections : defaults | frontend | listen | backend
2215 yes | yes | yes | no
2216 Arguments : none
2217
2218 This option was introduced in order to provide layer 7 persistence to layer 3
2219 load balancers. The idea is to use the OS's ability to redirect an incoming
2220 connection for a remote address to a local process (here HAProxy), and let
2221 this process know what address was initially requested. When this option is
2222 used, sessions without cookies will be forwarded to the original destination
2223 IP address of the incoming request (which should match that of another
2224 equipment), while requests with cookies will still be forwarded to the
2225 appropriate server.
2226
2227 Note that contrary to a common belief, this option does NOT make HAProxy
2228 present the client's IP to the server when establishing the connection.
2229
2230 Use of this option is really discouraged, and since no really valid use of it
2231 has been reported for years, it will probably be removed in future versions.
2232
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002233 See also: the "usersrc" argument of the "source" keyword, and the
2234 "transparent" option of the "bind" keyword.
Willy Tarreau844e3c52008-01-11 16:28:18 +01002235
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002236
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002237redisp (deprecated)
2238redispatch (deprecated)
2239 Enable or disable session redistribution in case of connection failure
2240 May be used in sections: defaults | frontend | listen | backend
2241 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002242 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002243
2244 In HTTP mode, if a server designated by a cookie is down, clients may
2245 definitely stick to it because they cannot flush the cookie, so they will not
2246 be able to access the service anymore.
2247
2248 Specifying "redispatch" will allow the proxy to break their persistence and
2249 redistribute them to a working server.
2250
2251 It also allows to retry last connection to another server in case of multiple
2252 connection failures. Of course, it requires having "retries" set to a nonzero
2253 value.
2254
2255 This form is deprecated, do not use it in any new configuration, use the new
2256 "option redispatch" instead.
2257
2258 See also : "option redispatch"
2259
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002260
Willy Tarreau303c0352008-01-17 19:01:39 +01002261reqadd <string>
2262 Add a header at the end of the HTTP request
2263 May be used in sections : defaults | frontend | listen | backend
2264 no | yes | yes | yes
2265 Arguments :
2266 <string> is the complete line to be added. Any space or known delimiter
2267 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002268 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002269
2270 A new line consisting in <string> followed by a line feed will be added after
2271 the last header of an HTTP request.
2272
2273 Header transformations only apply to traffic which passes through HAProxy,
2274 and not to traffic generated by HAProxy, such as health-checks or error
2275 responses.
2276
Willy Tarreauced27012008-01-17 20:35:34 +01002277 See also: "rspadd" and section 2.5 about HTTP header manipulation
Willy Tarreau303c0352008-01-17 19:01:39 +01002278
2279
2280reqallow <search>
2281reqiallow <search> (ignore case)
2282 Definitely allow an HTTP request if a line matches a regular expression
2283 May be used in sections : defaults | frontend | listen | backend
2284 no | yes | yes | yes
2285 Arguments :
2286 <search> is the regular expression applied to HTTP headers and to the
2287 request line. This is an extended regular expression. Parenthesis
2288 grouping is supported and no preliminary backslash is required.
2289 Any space or known delimiter must be escaped using a backslash
2290 ('\'). The pattern applies to a full line at a time. The
2291 "reqallow" keyword strictly matches case while "reqiallow"
2292 ignores case.
2293
2294 A request containing any line which matches extended regular expression
2295 <search> will mark the request as allowed, even if any later test would
2296 result in a deny. The test applies both to the request line and to request
2297 headers. Keep in mind that URLs in request line are case-sensitive while
2298 header names are not.
2299
2300 It is easier, faster and more powerful to use ACLs to write access policies.
2301 Reqdeny, reqallow and reqpass should be avoided in new designs.
2302
2303 Example :
2304 # allow www.* but refuse *.local
2305 reqiallow ^Host:\ www\.
2306 reqideny ^Host:\ .*\.local
2307
Willy Tarreauced27012008-01-17 20:35:34 +01002308 See also: "reqdeny", "acl", "block" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002309 manipulation
2310
2311
2312reqdel <search>
2313reqidel <search> (ignore case)
2314 Delete all headers matching a regular expression in an HTTP request
2315 May be used in sections : defaults | frontend | listen | backend
2316 no | yes | yes | yes
2317 Arguments :
2318 <search> is the regular expression applied to HTTP headers and to the
2319 request line. This is an extended regular expression. Parenthesis
2320 grouping is supported and no preliminary backslash is required.
2321 Any space or known delimiter must be escaped using a backslash
2322 ('\'). The pattern applies to a full line at a time. The "reqdel"
2323 keyword strictly matches case while "reqidel" ignores case.
2324
2325 Any header line matching extended regular expression <search> in the request
2326 will be completely deleted. Most common use of this is to remove unwanted
2327 and/or dangerous headers or cookies from a request before passing it to the
2328 next servers.
2329
2330 Header transformations only apply to traffic which passes through HAProxy,
2331 and not to traffic generated by HAProxy, such as health-checks or error
2332 responses. Keep in mind that header names are not case-sensitive.
2333
2334 Example :
2335 # remove X-Forwarded-For header and SERVER cookie
2336 reqidel ^X-Forwarded-For:.*
2337 reqidel ^Cookie:.*SERVER=
2338
Willy Tarreauced27012008-01-17 20:35:34 +01002339 See also: "reqadd", "reqrep", "rspdel" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002340 manipulation
2341
2342
2343reqdeny <search>
2344reqideny <search> (ignore case)
2345 Deny an HTTP request if a line matches a regular expression
2346 May be used in sections : defaults | frontend | listen | backend
2347 no | yes | yes | yes
2348 Arguments :
2349 <search> is the regular expression applied to HTTP headers and to the
2350 request line. This is an extended regular expression. Parenthesis
2351 grouping is supported and no preliminary backslash is required.
2352 Any space or known delimiter must be escaped using a backslash
2353 ('\'). The pattern applies to a full line at a time. The
2354 "reqdeny" keyword strictly matches case while "reqideny" ignores
2355 case.
2356
2357 A request containing any line which matches extended regular expression
2358 <search> will mark the request as denied, even if any later test would
2359 result in an allow. The test applies both to the request line and to request
2360 headers. Keep in mind that URLs in request line are case-sensitive while
2361 header names are not.
2362
Willy Tarreauced27012008-01-17 20:35:34 +01002363 A denied request will generate an "HTTP 403 forbidden" response once the
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002364 complete request has been parsed. This is consistent with what is practiced
Willy Tarreauced27012008-01-17 20:35:34 +01002365 using ACLs.
2366
Willy Tarreau303c0352008-01-17 19:01:39 +01002367 It is easier, faster and more powerful to use ACLs to write access policies.
2368 Reqdeny, reqallow and reqpass should be avoided in new designs.
2369
2370 Example :
2371 # refuse *.local, then allow www.*
2372 reqideny ^Host:\ .*\.local
2373 reqiallow ^Host:\ www\.
2374
Willy Tarreauced27012008-01-17 20:35:34 +01002375 See also: "reqallow", "rspdeny", "acl", "block" and section 2.5 about HTTP
Willy Tarreau303c0352008-01-17 19:01:39 +01002376 header manipulation
2377
2378
2379reqpass <search>
2380reqipass <search> (ignore case)
2381 Ignore any HTTP request line matching a regular expression in next rules
2382 May be used in sections : defaults | frontend | listen | backend
2383 no | yes | yes | yes
2384 Arguments :
2385 <search> is the regular expression applied to HTTP headers and to the
2386 request line. This is an extended regular expression. Parenthesis
2387 grouping is supported and no preliminary backslash is required.
2388 Any space or known delimiter must be escaped using a backslash
2389 ('\'). The pattern applies to a full line at a time. The
2390 "reqpass" keyword strictly matches case while "reqipass" ignores
2391 case.
2392
2393 A request containing any line which matches extended regular expression
2394 <search> will skip next rules, without assigning any deny or allow verdict.
2395 The test applies both to the request line and to request headers. Keep in
2396 mind that URLs in request line are case-sensitive while header names are not.
2397
2398 It is easier, faster and more powerful to use ACLs to write access policies.
2399 Reqdeny, reqallow and reqpass should be avoided in new designs.
2400
2401 Example :
2402 # refuse *.local, then allow www.*, but ignore "www.private.local"
2403 reqipass ^Host:\ www.private\.local
2404 reqideny ^Host:\ .*\.local
2405 reqiallow ^Host:\ www\.
2406
Willy Tarreauced27012008-01-17 20:35:34 +01002407 See also: "reqallow", "reqdeny", "acl", "block" and section 2.5 about HTTP
Willy Tarreau303c0352008-01-17 19:01:39 +01002408 header manipulation
2409
2410
2411reqrep <search> <string>
2412reqirep <search> <string> (ignore case)
2413 Replace a regular expression with a string in an HTTP request line
2414 May be used in sections : defaults | frontend | listen | backend
2415 no | yes | yes | yes
2416 Arguments :
2417 <search> is the regular expression applied to HTTP headers and to the
2418 request line. This is an extended regular expression. Parenthesis
2419 grouping is supported and no preliminary backslash is required.
2420 Any space or known delimiter must be escaped using a backslash
2421 ('\'). The pattern applies to a full line at a time. The "reqrep"
2422 keyword strictly matches case while "reqirep" ignores case.
2423
2424 <string> is the complete line to be added. Any space or known delimiter
2425 must be escaped using a backslash ('\'). References to matched
2426 pattern groups are possible using the common \N form, with N
2427 being a single digit between 0 and 9. Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002428 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002429
2430 Any line matching extended regular expression <search> in the request (both
2431 the request line and header lines) will be completely replaced with <string>.
2432 Most common use of this is to rewrite URLs or domain names in "Host" headers.
2433
2434 Header transformations only apply to traffic which passes through HAProxy,
2435 and not to traffic generated by HAProxy, such as health-checks or error
2436 responses. Note that for increased readability, it is suggested to add enough
2437 spaces between the request and the response. Keep in mind that URLs in
2438 request line are case-sensitive while header names are not.
2439
2440 Example :
2441 # replace "/static/" with "/" at the beginning of any request path.
2442 reqrep ^([^\ ]*)\ /static/(.*) \1\ /\2
2443 # replace "www.mydomain.com" with "www" in the host name.
2444 reqirep ^Host:\ www.mydomain.com Host:\ www
2445
Willy Tarreauced27012008-01-17 20:35:34 +01002446 See also: "reqadd", "reqdel", "rsprep" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002447 manipulation
2448
2449
2450reqtarpit <search>
2451reqitarpit <search> (ignore case)
2452 Tarpit an HTTP request containing a line matching a regular expression
2453 May be used in sections : defaults | frontend | listen | backend
2454 no | yes | yes | yes
2455 Arguments :
2456 <search> is the regular expression applied to HTTP headers and to the
2457 request line. This is an extended regular expression. Parenthesis
2458 grouping is supported and no preliminary backslash is required.
2459 Any space or known delimiter must be escaped using a backslash
2460 ('\'). The pattern applies to a full line at a time. The
2461 "reqtarpit" keyword strictly matches case while "reqitarpit"
2462 ignores case.
2463
2464 A request containing any line which matches extended regular expression
2465 <search> will be tarpitted, which means that it will connect to nowhere, will
Willy Tarreauced27012008-01-17 20:35:34 +01002466 be kept open for a pre-defined time, then will return an HTTP error 500 so
2467 that the attacker does not suspect it has been tarpitted. The status 500 will
2468 be reported in the logs, but the completion flags will indicate "PT". The
Willy Tarreau303c0352008-01-17 19:01:39 +01002469 delay is defined by "timeout tarpit", or "timeout connect" if the former is
2470 not set.
2471
2472 The goal of the tarpit is to slow down robots attacking servers with
2473 identifiable requests. Many robots limit their outgoing number of connections
2474 and stay connected waiting for a reply which can take several minutes to
2475 come. Depending on the environment and attack, it may be particularly
2476 efficient at reducing the load on the network and firewalls.
2477
2478 Example :
2479 # ignore user-agents reporting any flavour of "Mozilla" or "MSIE", but
2480 # block all others.
2481 reqipass ^User-Agent:\.*(Mozilla|MSIE)
2482 reqitarpit ^User-Agent:
2483
Willy Tarreauced27012008-01-17 20:35:34 +01002484 See also: "reqallow", "reqdeny", "reqpass", and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002485 manipulation
2486
2487
2488rspadd <string>
2489 Add a header at the end of the HTTP response
2490 May be used in sections : defaults | frontend | listen | backend
2491 no | yes | yes | yes
2492 Arguments :
2493 <string> is the complete line to be added. Any space or known delimiter
2494 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002495 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002496
2497 A new line consisting in <string> followed by a line feed will be added after
2498 the last header of an HTTP response.
2499
2500 Header transformations only apply to traffic which passes through HAProxy,
2501 and not to traffic generated by HAProxy, such as health-checks or error
2502 responses.
2503
Willy Tarreauced27012008-01-17 20:35:34 +01002504 See also: "reqadd" and section 2.5 about HTTP header manipulation
Willy Tarreau303c0352008-01-17 19:01:39 +01002505
2506
2507rspdel <search>
2508rspidel <search> (ignore case)
2509 Delete all headers matching a regular expression in an HTTP response
2510 May be used in sections : defaults | frontend | listen | backend
2511 no | yes | yes | yes
2512 Arguments :
2513 <search> is the regular expression applied to HTTP headers and to the
2514 response line. This is an extended regular expression, so
2515 parenthesis grouping is supported and no preliminary backslash
2516 is required. Any space or known delimiter must be escaped using
2517 a backslash ('\'). The pattern applies to a full line at a time.
2518 The "rspdel" keyword strictly matches case while "rspidel"
2519 ignores case.
2520
2521 Any header line matching extended regular expression <search> in the response
2522 will be completely deleted. Most common use of this is to remove unwanted
2523 and/or sensible headers or cookies from a response before passing it to the
2524 client.
2525
2526 Header transformations only apply to traffic which passes through HAProxy,
2527 and not to traffic generated by HAProxy, such as health-checks or error
2528 responses. Keep in mind that header names are not case-sensitive.
2529
2530 Example :
2531 # remove the Server header from responses
2532 reqidel ^Server:.*
2533
Willy Tarreauced27012008-01-17 20:35:34 +01002534 See also: "rspadd", "rsprep", "reqdel" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002535 manipulation
2536
2537
2538rspdeny <search>
2539rspideny <search> (ignore case)
2540 Block an HTTP response if a line matches a regular expression
2541 May be used in sections : defaults | frontend | listen | backend
2542 no | yes | yes | yes
2543 Arguments :
2544 <search> is the regular expression applied to HTTP headers and to the
2545 response line. This is an extended regular expression, so
2546 parenthesis grouping is supported and no preliminary backslash
2547 is required. Any space or known delimiter must be escaped using
2548 a backslash ('\'). The pattern applies to a full line at a time.
2549 The "rspdeny" keyword strictly matches case while "rspideny"
2550 ignores case.
2551
2552 A response containing any line which matches extended regular expression
2553 <search> will mark the request as denied. The test applies both to the
2554 response line and to response headers. Keep in mind that header names are not
2555 case-sensitive.
2556
2557 Main use of this keyword is to prevent sensitive information leak and to
Willy Tarreauced27012008-01-17 20:35:34 +01002558 block the response before it reaches the client. If a response is denied, it
2559 will be replaced with an HTTP 502 error so that the client never retrieves
2560 any sensitive data.
Willy Tarreau303c0352008-01-17 19:01:39 +01002561
2562 It is easier, faster and more powerful to use ACLs to write access policies.
2563 Rspdeny should be avoided in new designs.
2564
2565 Example :
2566 # Ensure that no content type matching ms-word will leak
2567 rspideny ^Content-type:\.*/ms-word
2568
Willy Tarreauced27012008-01-17 20:35:34 +01002569 See also: "reqdeny", "acl", "block" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002570 manipulation
2571
2572
2573rsprep <search> <string>
2574rspirep <search> <string> (ignore case)
2575 Replace a regular expression with a string in an HTTP response line
2576 May be used in sections : defaults | frontend | listen | backend
2577 no | yes | yes | yes
2578 Arguments :
2579 <search> is the regular expression applied to HTTP headers and to the
2580 response line. This is an extended regular expression, so
2581 parenthesis grouping is supported and no preliminary backslash
2582 is required. Any space or known delimiter must be escaped using
2583 a backslash ('\'). The pattern applies to a full line at a time.
2584 The "rsprep" keyword strictly matches case while "rspirep"
2585 ignores case.
2586
2587 <string> is the complete line to be added. Any space or known delimiter
2588 must be escaped using a backslash ('\'). References to matched
2589 pattern groups are possible using the common \N form, with N
2590 being a single digit between 0 and 9. Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002591 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002592
2593 Any line matching extended regular expression <search> in the response (both
2594 the response line and header lines) will be completely replaced with
2595 <string>. Most common use of this is to rewrite Location headers.
2596
2597 Header transformations only apply to traffic which passes through HAProxy,
2598 and not to traffic generated by HAProxy, such as health-checks or error
2599 responses. Note that for increased readability, it is suggested to add enough
2600 spaces between the request and the response. Keep in mind that header names
2601 are not case-sensitive.
2602
2603 Example :
2604 # replace "Location: 127.0.0.1:8080" with "Location: www.mydomain.com"
2605 rspirep ^Location:\ 127.0.0.1:8080 Location:\ www.mydomain.com
2606
Willy Tarreauced27012008-01-17 20:35:34 +01002607 See also: "rspadd", "rspdel", "reqrep" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002608 manipulation
2609
2610
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002611server <name> <address>[:port] [param*]
2612 Declare a server in a backend
2613 May be used in sections : defaults | frontend | listen | backend
2614 no | no | yes | yes
2615 Arguments :
2616 <name> is the internal name assigned to this server. This name will
2617 appear in logs and alerts.
2618
2619 <address> is the IPv4 address of the server. Alternatively, a resolvable
2620 hostname is supported, but this name will be resolved during
2621 start-up.
2622
2623 <ports> is an optional port specification. If set, all connections will
2624 be sent to this port. If unset, the same port the client
2625 connected to will be used. The port may also be prefixed by a "+"
2626 or a "-". In this case, the server's port will be determined by
2627 adding this value to the client's port.
2628
2629 <param*> is a list of parameters for this server. The "server" keywords
2630 accepts an important number of options and has a complete section
2631 dedicated to it. Please refer to section 2.4 for more details.
2632
2633 Examples :
2634 server first 10.1.1.1:1080 cookie first check inter 1000
2635 server second 10.1.1.2:1080 cookie second check inter 1000
2636
2637 See also : section 2.4 about server options
2638
2639
2640source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
2641 Set the source address for outgoing connections
2642 May be used in sections : defaults | frontend | listen | backend
2643 yes | no | yes | yes
2644 Arguments :
2645 <addr> is the IPv4 address HAProxy will bind to before connecting to a
2646 server. This address is also used as a source for health checks.
2647 The default value of 0.0.0.0 means that the system will select
2648 the most appropriate address to reach its destination.
2649
2650 <port> is an optional port. It is normally not needed but may be useful
2651 in some very specific contexts. The default value of zero means
2652 the system will select a free port.
2653
2654 <addr2> is the IP address to present to the server when connections are
2655 forwarded in full transparent proxy mode. This is currently only
2656 supported on some patched Linux kernels. When this address is
2657 specified, clients connecting to the server will be presented
2658 with this address, while health checks will still use the address
2659 <addr>.
2660
2661 <port2> is the optional port to present to the server when connections
2662 are forwarded in full transparent proxy mode (see <addr2> above).
2663 The default value of zero means the system will select a free
2664 port.
2665
2666 The "source" keyword is useful in complex environments where a specific
2667 address only is allowed to connect to the servers. It may be needed when a
2668 private address must be used through a public gateway for instance, and it is
2669 known that the system cannot determine the adequate source address by itself.
2670
2671 An extension which is available on certain patched Linux kernels may be used
2672 through the "usesrc" optional keyword. It makes it possible to connect to the
2673 servers with an IP address which does not belong to the system itself. This
2674 is called "full transparent proxy mode". For this to work, the destination
2675 servers have to route their traffic back to this address through the machine
2676 running HAProxy, and IP forwarding must generally be enabled on this machine.
2677
2678 In this "full transparent proxy" mode, it is possible to force a specific IP
2679 address to be presented to the servers. This is not much used in fact. A more
2680 common use is to tell HAProxy to present the client's IP address. For this,
2681 there are two methods :
2682
2683 - present the client's IP and port addresses. This is the most transparent
2684 mode, but it can cause problems when IP connection tracking is enabled on
2685 the machine, because a same connection may be seen twice with different
2686 states. However, this solution presents the huge advantage of not
2687 limiting the system to the 64k outgoing address+port couples, because all
2688 of the client ranges may be used.
2689
2690 - present only the client's IP address and select a spare port. This
2691 solution is still quite elegant but slightly less transparent (downstream
2692 firewalls logs will not match upstream's). It also presents the downside
2693 of limiting the number of concurrent connections to the usual 64k ports.
2694 However, since the upstream and downstream ports are different, local IP
2695 connection tracking on the machine will not be upset by the reuse of the
2696 same session.
2697
2698 Note that depending on the transparent proxy technology used, it may be
2699 required to force the source address. In fact, cttproxy version 2 requires an
2700 IP address in <addr> above, and does not support setting of "0.0.0.0" as the
2701 IP address because it creates NAT entries which much match the exact outgoing
2702 address. Tproxy version 4 and some other kernel patches which work in pure
2703 forwarding mode generally will not have this limitation.
2704
2705 This option sets the default source for all servers in the backend. It may
2706 also be specified in a "defaults" section. Finer source address specification
2707 is possible at the server level using the "source" server option. Refer to
2708 section 2.4 for more information.
2709
2710 Examples :
2711 backend private
2712 # Connect to the servers using our 192.168.1.200 source address
2713 source 192.168.1.200
2714
2715 backend transparent_ssl1
2716 # Connect to the SSL farm from the client's source address
2717 source 192.168.1.200 usesrc clientip
2718
2719 backend transparent_ssl2
2720 # Connect to the SSL farm from the client's source address and port
2721 # not recommended if IP conntrack is present on the local machine.
2722 source 192.168.1.200 usesrc client
2723
2724 backend transparent_ssl3
2725 # Connect to the SSL farm from the client's source address. It
2726 # is more conntrack-friendly.
2727 source 192.168.1.200 usesrc clientip
2728
2729 backend transparent_smtp
2730 # Connect to the SMTP farm from the client's source address/port
2731 # with Tproxy version 4.
2732 source 0.0.0.0 usesrc clientip
2733
2734 See also : the "source" server option in section 2.4, the Tproxy patches for
2735 the Linux kernel on www.balabit.com, the "bind" keyword.
2736
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002737
Willy Tarreau844e3c52008-01-11 16:28:18 +01002738srvtimeout <timeout> (deprecated)
2739 Set the maximum inactivity time on the server side.
2740 May be used in sections : defaults | frontend | listen | backend
2741 yes | no | yes | yes
2742 Arguments :
2743 <timeout> is the timeout value specified in milliseconds by default, but
2744 can be in any other unit if the number is suffixed by the unit,
2745 as explained at the top of this document.
2746
2747 The inactivity timeout applies when the server is expected to acknowledge or
2748 send data. In HTTP mode, this timeout is particularly important to consider
2749 during the first phase of the server's response, when it has to send the
2750 headers, as it directly represents the server's processing time for the
2751 request. To find out what value to put there, it's often good to start with
2752 what would be considered as unacceptable response times, then check the logs
2753 to observe the response time distribution, and adjust the value accordingly.
2754
2755 The value is specified in milliseconds by default, but can be in any other
2756 unit if the number is suffixed by the unit, as specified at the top of this
2757 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
2758 recommended that the client timeout remains equal to the server timeout in
2759 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002760 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01002761 packet losses by specifying timeouts that are slightly above multiples of 3
2762 seconds (eg: 4 or 5 seconds minimum).
2763
2764 This parameter is specific to backends, but can be specified once for all in
2765 "defaults" sections. This is in fact one of the easiest solutions not to
2766 forget about it. An unspecified timeout results in an infinite timeout, which
2767 is not recommended. Such a usage is accepted and works but reports a warning
2768 during startup because it may results in accumulation of expired sessions in
2769 the system if the system's timeouts are not configured either.
2770
2771 This parameter is provided for compatibility but is currently deprecated.
2772 Please use "timeout server" instead.
2773
2774 See also : "timeout server", "timeout client" and "clitimeout".
2775
2776
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002777stats auth <user>:<passwd>
2778 Enable statistics with authentication and grant access to an account
2779 May be used in sections : defaults | frontend | listen | backend
2780 yes | no | yes | yes
2781 Arguments :
2782 <user> is a user name to grant access to
2783
2784 <passwd> is the cleartext password associated to this user
2785
2786 This statement enables statistics with default settings, and restricts access
2787 to declared users only. It may be repeated as many times as necessary to
2788 allow as many users as desired. When a user tries to access the statistics
2789 without a valid account, a "401 Forbidden" response will be returned so that
2790 the browser asks the user to provide a valid user and password. The real
2791 which will be returned to the browser is configurable using "stats realm".
2792
2793 Since the authentication method is HTTP Basic Authentication, the passwords
2794 circulate in cleartext on the network. Thus, it was decided that the
2795 configuration file would also use cleartext passwords to remind the users
2796 that those ones should not be sensible and not shared with any other account.
2797
2798 It is also possible to reduce the scope of the proxies which appear in the
2799 report using "stats scope".
2800
2801 Though this statement alone is enough to enable statistics reporting, it is
2802 recommended to set all other settings in order to avoid relying on default
2803 unobvious parameters.
2804
2805 Example :
2806 # public access (limited to this backend only)
2807 backend public_www
2808 server srv1 192.168.0.1:80
2809 stats enable
2810 stats hide-version
2811 stats scope .
2812 stats uri /admin?stats
2813 stats realm Haproxy\ Statistics
2814 stats auth admin1:AdMiN123
2815 stats auth admin2:AdMiN321
2816
2817 # internal monitoring access (unlimited)
2818 backend private_monitoring
2819 stats enable
2820 stats uri /admin?stats
2821 stats refresh 5s
2822
2823 See also : "stats enable", "stats realm", "stats scope", "stats uri"
2824
2825
2826stats enable
2827 Enable statistics reporting with default settings
2828 May be used in sections : defaults | frontend | listen | backend
2829 yes | no | yes | yes
2830 Arguments : none
2831
2832 This statement enables statistics reporting with default settings defined
2833 at build time. Unless stated otherwise, these settings are used :
2834 - stats uri : /haproxy?stats
2835 - stats realm : "HAProxy Statistics"
2836 - stats auth : no authentication
2837 - stats scope : no restriction
2838
2839 Though this statement alone is enough to enable statistics reporting, it is
2840 recommended to set all other settings in order to avoid relying on default
2841 unobvious parameters.
2842
2843 Example :
2844 # public access (limited to this backend only)
2845 backend public_www
2846 server srv1 192.168.0.1:80
2847 stats enable
2848 stats hide-version
2849 stats scope .
2850 stats uri /admin?stats
2851 stats realm Haproxy\ Statistics
2852 stats auth admin1:AdMiN123
2853 stats auth admin2:AdMiN321
2854
2855 # internal monitoring access (unlimited)
2856 backend private_monitoring
2857 stats enable
2858 stats uri /admin?stats
2859 stats refresh 5s
2860
2861 See also : "stats auth", "stats realm", "stats uri"
2862
2863
2864stats realm <realm>
2865 Enable statistics and set authentication realm
2866 May be used in sections : defaults | frontend | listen | backend
2867 yes | no | yes | yes
2868 Arguments :
2869 <realm> is the name of the HTTP Basic Authentication realm reported to
2870 the browser. The browser uses it to display it in the pop-up
2871 inviting the user to enter a valid username and password.
2872
2873 The realm is read as a single word, so any spaces in it should be escaped
2874 using a backslash ('\').
2875
2876 This statement is useful only in conjunction with "stats auth" since it is
2877 only related to authentication.
2878
2879 Though this statement alone is enough to enable statistics reporting, it is
2880 recommended to set all other settings in order to avoid relying on default
2881 unobvious parameters.
2882
2883 Example :
2884 # public access (limited to this backend only)
2885 backend public_www
2886 server srv1 192.168.0.1:80
2887 stats enable
2888 stats hide-version
2889 stats scope .
2890 stats uri /admin?stats
2891 stats realm Haproxy\ Statistics
2892 stats auth admin1:AdMiN123
2893 stats auth admin2:AdMiN321
2894
2895 # internal monitoring access (unlimited)
2896 backend private_monitoring
2897 stats enable
2898 stats uri /admin?stats
2899 stats refresh 5s
2900
2901 See also : "stats auth", "stats enable", "stats uri"
2902
2903
2904stats refresh <delay>
2905 Enable statistics with automatic refresh
2906 May be used in sections : defaults | frontend | listen | backend
2907 yes | no | yes | yes
2908 Arguments :
2909 <delay> is the suggested refresh delay, specified in seconds, which will
2910 be returned to the browser consulting the report page. While the
2911 browser is free to apply any delay, it will generally respect it
2912 and refresh the page this every seconds. The refresh interval may
2913 be specified in any other non-default time unit, by suffixing the
2914 unit after the value, as explained at the top of this document.
2915
2916 This statement is useful on monitoring displays with a permanent page
2917 reporting the load balancer's activity. When set, the HTML report page will
2918 include a link "refresh"/"stop refresh" so that the user can select whether
2919 he wants automatic refresh of the page or not.
2920
2921 Though this statement alone is enough to enable statistics reporting, it is
2922 recommended to set all other settings in order to avoid relying on default
2923 unobvious parameters.
2924
2925 Example :
2926 # public access (limited to this backend only)
2927 backend public_www
2928 server srv1 192.168.0.1:80
2929 stats enable
2930 stats hide-version
2931 stats scope .
2932 stats uri /admin?stats
2933 stats realm Haproxy\ Statistics
2934 stats auth admin1:AdMiN123
2935 stats auth admin2:AdMiN321
2936
2937 # internal monitoring access (unlimited)
2938 backend private_monitoring
2939 stats enable
2940 stats uri /admin?stats
2941 stats refresh 5s
2942
2943 See also : "stats auth", "stats enable", "stats realm", "stats uri"
2944
2945
2946stats scope { <name> | "." }
2947 Enable statistics and limit access scope
2948 May be used in sections : defaults | frontend | listen | backend
2949 yes | no | yes | yes
2950 Arguments :
2951 <name> is the name of a listen, frontend or backend section to be
2952 reported. The special name "." (a single dot) designates the
2953 section in which the statement appears.
2954
2955 When this statement is specified, only the sections enumerated with this
2956 statement will appear in the report. All other ones will be hidden. This
2957 statement may appear as many times as needed if multiple sections need to be
2958 reported. Please note that the name checking is performed as simple string
2959 comparisons, and that it is never checked that a give section name really
2960 exists.
2961
2962 Though this statement alone is enough to enable statistics reporting, it is
2963 recommended to set all other settings in order to avoid relying on default
2964 unobvious parameters.
2965
2966 Example :
2967 # public access (limited to this backend only)
2968 backend public_www
2969 server srv1 192.168.0.1:80
2970 stats enable
2971 stats hide-version
2972 stats scope .
2973 stats uri /admin?stats
2974 stats realm Haproxy\ Statistics
2975 stats auth admin1:AdMiN123
2976 stats auth admin2:AdMiN321
2977
2978 # internal monitoring access (unlimited)
2979 backend private_monitoring
2980 stats enable
2981 stats uri /admin?stats
2982 stats refresh 5s
2983
2984 See also : "stats auth", "stats enable", "stats realm", "stats uri"
2985
2986
2987stats uri <prefix>
2988 Enable statistics and define the URI prefix to access them
2989 May be used in sections : defaults | frontend | listen | backend
2990 yes | no | yes | yes
2991 Arguments :
2992 <prefix> is the prefix of any URI which will be redirected to stats. This
2993 prefix may contain a question mark ('?') to indicate part of a
2994 query string.
2995
2996 The statistics URI is intercepted on the relayed traffic, so it appears as a
2997 page within the normal application. It is strongly advised to ensure that the
2998 selected URI will never appear in the application, otherwise it will never be
2999 possible to reach it in the application.
3000
3001 The default URI compiled in haproxy is "/haproxy?stats", but this may be
3002 changed at build time, so it's better to always explictly specify it here.
3003 It is generally a good idea to include a question mark in the URI so that
3004 intermediate proxies refrain from caching the results. Also, since any string
3005 beginning with the prefix will be accepted as a stats request, the question
3006 mark helps ensuring that no valid URI will begin with the same words.
3007
3008 It is sometimes very convenient to use "/" as the URI prefix, and put that
3009 statement in a "listen" instance of its own. That makes it easy to dedicate
3010 an address or a port to statistics only.
3011
3012 Though this statement alone is enough to enable statistics reporting, it is
3013 recommended to set all other settings in order to avoid relying on default
3014 unobvious parameters.
3015
3016 Example :
3017 # public access (limited to this backend only)
3018 backend public_www
3019 server srv1 192.168.0.1:80
3020 stats enable
3021 stats hide-version
3022 stats scope .
3023 stats uri /admin?stats
3024 stats realm Haproxy\ Statistics
3025 stats auth admin1:AdMiN123
3026 stats auth admin2:AdMiN321
3027
3028 # internal monitoring access (unlimited)
3029 backend private_monitoring
3030 stats enable
3031 stats uri /admin?stats
3032 stats refresh 5s
3033
3034 See also : "stats auth", "stats enable", "stats realm"
3035
3036
3037stats hide-version
3038 Enable statistics and hide HAProxy version reporting
3039 May be used in sections : defaults | frontend | listen | backend
3040 yes | no | yes | yes
3041 Arguments : none
3042
3043 By default, the stats page reports some useful status information along with
3044 the statistics. Among them is HAProxy's version. However, it is generally
3045 considered dangerous to report precise version to anyone, as it can help them
3046 target known weaknesses with specific attacks. The "stats hide-version"
3047 statement removes the version from the statistics report. This is recommended
3048 for public sites or any site with a weak login/password.
3049
3050 Though this statement alone is enough to enable statistics reporting, it is
3051 recommended to set all other settings in order to avoid relying on default
3052 unobvious parameters.
3053
3054 Example :
3055 # public access (limited to this backend only)
3056 backend public_www
3057 server srv1 192.168.0.1:80
3058 stats enable
3059 stats hide-version
3060 stats scope .
3061 stats uri /admin?stats
3062 stats realm Haproxy\ Statistics
3063 stats auth admin1:AdMiN123
3064 stats auth admin2:AdMiN321
3065
3066 # internal monitoring access (unlimited)
3067 backend private_monitoring
3068 stats enable
3069 stats uri /admin?stats
3070 stats refresh 5s
3071
3072 See also : "stats auth", "stats enable", "stats realm", "stats uri"
3073
3074
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003075timeout check <timeout>
3076 Set additional check timeout, but only after a connection has been already
3077 established.
3078
3079 May be used in sections: defaults | frontend | listen | backend
3080 yes | no | yes | yes
3081 Arguments:
3082 <timeout> is the timeout value specified in milliseconds by default, but
3083 can be in any other unit if the number is suffixed by the unit,
3084 as explained at the top of this document.
3085
3086 If set, haproxy uses min("timeout connect", "inter") as a connect timeout
3087 for check and "timeout check" as an additional read timeout. The "min" is
3088 used so that people running with *very* long "timeout connect" (eg. those
3089 who needed this due to the queue or tarpit) do not slow down their checks.
3090 Of course it is better to use "check queue" and "check tarpit" instead of
3091 long "timeout connect".
3092
3093 If "timeout check" is not set haproxy uses "inter" for complete check
3094 timeout (connect + read) exactly like all <1.3.15 version.
3095
3096 In most cases check request is much simpler and faster to handle than normal
3097 requests and people may want to kick out laggy servers so this timeout should
Willy Tarreau41a340d2008-01-22 12:25:31 +01003098 be smaller than "timeout server".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003099
3100 This parameter is specific to backends, but can be specified once for all in
3101 "defaults" sections. This is in fact one of the easiest solutions not to
3102 forget about it.
3103
Willy Tarreau41a340d2008-01-22 12:25:31 +01003104 See also: "timeout connect", "timeout queue", "timeout server",
3105 "timeout tarpit".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003106
3107
Willy Tarreau0ba27502007-12-24 16:55:16 +01003108timeout client <timeout>
3109timeout clitimeout <timeout> (deprecated)
3110 Set the maximum inactivity time on the client side.
3111 May be used in sections : defaults | frontend | listen | backend
3112 yes | yes | yes | no
3113 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003114 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01003115 can be in any other unit if the number is suffixed by the unit,
3116 as explained at the top of this document.
3117
3118 The inactivity timeout applies when the client is expected to acknowledge or
3119 send data. In HTTP mode, this timeout is particularly important to consider
3120 during the first phase, when the client sends the request, and during the
3121 response while it is reading data sent by the server. The value is specified
3122 in milliseconds by default, but can be in any other unit if the number is
3123 suffixed by the unit, as specified at the top of this document. In TCP mode
3124 (and to a lesser extent, in HTTP mode), it is highly recommended that the
3125 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003126 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01003127 losses by specifying timeouts that are slightly above multiples of 3 seconds
3128 (eg: 4 or 5 seconds).
3129
3130 This parameter is specific to frontends, but can be specified once for all in
3131 "defaults" sections. This is in fact one of the easiest solutions not to
3132 forget about it. An unspecified timeout results in an infinite timeout, which
3133 is not recommended. Such a usage is accepted and works but reports a warning
3134 during startup because it may results in accumulation of expired sessions in
3135 the system if the system's timeouts are not configured either.
3136
3137 This parameter replaces the old, deprecated "clitimeout". It is recommended
3138 to use it to write new configurations. The form "timeout clitimeout" is
3139 provided only by backwards compatibility but its use is strongly discouraged.
3140
3141 See also : "clitimeout", "timeout server".
3142
3143
3144timeout connect <timeout>
3145timeout contimeout <timeout> (deprecated)
3146 Set the maximum time to wait for a connection attempt to a server to succeed.
3147 May be used in sections : defaults | frontend | listen | backend
3148 yes | no | yes | yes
3149 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003150 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01003151 can be in any other unit if the number is suffixed by the unit,
3152 as explained at the top of this document.
3153
3154 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003155 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreau0ba27502007-12-24 16:55:16 +01003156 cover one or several TCP packet losses by specifying timeouts that are
3157 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003158 connect timeout also presets both queue and tarpit timeouts to the same value
3159 if these have not been specified.
Willy Tarreau0ba27502007-12-24 16:55:16 +01003160
3161 This parameter is specific to backends, but can be specified once for all in
3162 "defaults" sections. This is in fact one of the easiest solutions not to
3163 forget about it. An unspecified timeout results in an infinite timeout, which
3164 is not recommended. Such a usage is accepted and works but reports a warning
3165 during startup because it may results in accumulation of failed sessions in
3166 the system if the system's timeouts are not configured either.
3167
3168 This parameter replaces the old, deprecated "contimeout". It is recommended
3169 to use it to write new configurations. The form "timeout contimeout" is
3170 provided only by backwards compatibility but its use is strongly discouraged.
3171
Willy Tarreau41a340d2008-01-22 12:25:31 +01003172 See also: "timeout check", "timeout queue", "timeout server", "contimeout",
3173 "timeout tarpit".
Willy Tarreau0ba27502007-12-24 16:55:16 +01003174
3175
Willy Tarreau036fae02008-01-06 13:24:40 +01003176timeout http-request <timeout>
3177 Set the maximum allowed time to wait for a complete HTTP request
3178 May be used in sections : defaults | frontend | listen | backend
3179 yes | yes | yes | no
3180 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003181 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau036fae02008-01-06 13:24:40 +01003182 can be in any other unit if the number is suffixed by the unit,
3183 as explained at the top of this document.
3184
3185 In order to offer DoS protection, it may be required to lower the maximum
3186 accepted time to receive a complete HTTP request without affecting the client
3187 timeout. This helps protecting against established connections on which
3188 nothing is sent. The client timeout cannot offer a good protection against
3189 this abuse because it is an inactivity timeout, which means that if the
3190 attacker sends one character every now and then, the timeout will not
3191 trigger. With the HTTP request timeout, no matter what speed the client
3192 types, the request will be aborted if it does not complete in time.
3193
3194 Note that this timeout only applies to the header part of the request, and
3195 not to any data. As soon as the empty line is received, this timeout is not
3196 used anymore.
3197
3198 Generally it is enough to set it to a few seconds, as most clients send the
3199 full request immediately upon connection. Add 3 or more seconds to cover TCP
3200 retransmits but that's all. Setting it to very low values (eg: 50 ms) will
3201 generally work on local networks as long as there are no packet losses. This
3202 will prevent people from sending bare HTTP requests using telnet.
3203
3204 If this parameter is not set, the client timeout still applies between each
3205 chunk of the incoming request.
3206
3207 See also : "timeout client".
3208
Willy Tarreau844e3c52008-01-11 16:28:18 +01003209
3210timeout queue <timeout>
3211 Set the maximum time to wait in the queue for a connection slot to be free
3212 May be used in sections : defaults | frontend | listen | backend
3213 yes | no | yes | yes
3214 Arguments :
3215 <timeout> is the timeout value specified in milliseconds by default, but
3216 can be in any other unit if the number is suffixed by the unit,
3217 as explained at the top of this document.
3218
3219 When a server's maxconn is reached, connections are left pending in a queue
3220 which may be server-specific or global to the backend. In order not to wait
3221 indefinitely, a timeout is applied to requests pending in the queue. If the
3222 timeout is reached, it is considered that the request will almost never be
3223 served, so it is dropped and a 503 error is returned to the client.
3224
3225 The "timeout queue" statement allows to fix the maximum time for a request to
3226 be left pending in a queue. If unspecified, the same value as the backend's
3227 connection timeout ("timeout connect") is used, for backwards compatibility
3228 with older versions with no "timeout queue" parameter.
3229
3230 See also : "timeout connect", "contimeout".
3231
3232
3233timeout server <timeout>
3234timeout srvtimeout <timeout> (deprecated)
3235 Set the maximum inactivity time on the server side.
3236 May be used in sections : defaults | frontend | listen | backend
3237 yes | no | yes | yes
3238 Arguments :
3239 <timeout> is the timeout value specified in milliseconds by default, but
3240 can be in any other unit if the number is suffixed by the unit,
3241 as explained at the top of this document.
3242
3243 The inactivity timeout applies when the server is expected to acknowledge or
3244 send data. In HTTP mode, this timeout is particularly important to consider
3245 during the first phase of the server's response, when it has to send the
3246 headers, as it directly represents the server's processing time for the
3247 request. To find out what value to put there, it's often good to start with
3248 what would be considered as unacceptable response times, then check the logs
3249 to observe the response time distribution, and adjust the value accordingly.
3250
3251 The value is specified in milliseconds by default, but can be in any other
3252 unit if the number is suffixed by the unit, as specified at the top of this
3253 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
3254 recommended that the client timeout remains equal to the server timeout in
3255 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003256 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01003257 packet losses by specifying timeouts that are slightly above multiples of 3
3258 seconds (eg: 4 or 5 seconds minimum).
3259
3260 This parameter is specific to backends, but can be specified once for all in
3261 "defaults" sections. This is in fact one of the easiest solutions not to
3262 forget about it. An unspecified timeout results in an infinite timeout, which
3263 is not recommended. Such a usage is accepted and works but reports a warning
3264 during startup because it may results in accumulation of expired sessions in
3265 the system if the system's timeouts are not configured either.
3266
3267 This parameter replaces the old, deprecated "srvtimeout". It is recommended
3268 to use it to write new configurations. The form "timeout srvtimeout" is
3269 provided only by backwards compatibility but its use is strongly discouraged.
3270
3271 See also : "srvtimeout", "timeout client".
3272
3273
3274timeout tarpit <timeout>
3275 Set the duration for which tapitted connections will be maintained
3276 May be used in sections : defaults | frontend | listen | backend
3277 yes | yes | yes | yes
3278 Arguments :
3279 <timeout> is the tarpit duration specified in milliseconds by default, but
3280 can be in any other unit if the number is suffixed by the unit,
3281 as explained at the top of this document.
3282
3283 When a connection is tarpitted using "reqtarpit", it is maintained open with
3284 no activity for a certain amount of time, then closed. "timeout tarpit"
3285 defines how long it will be maintained open.
3286
3287 The value is specified in milliseconds by default, but can be in any other
3288 unit if the number is suffixed by the unit, as specified at the top of this
3289 document. If unspecified, the same value as the backend's connection timeout
3290 ("timeout connect") is used, for backwards compatibility with older versions
3291 with no "timeout tapit" parameter.
3292
3293 See also : "timeout connect", "contimeout".
3294
3295
3296transparent (deprecated)
3297 Enable client-side transparent proxying
3298 May be used in sections : defaults | frontend | listen | backend
3299 yes | yes | yes | no
3300 Arguments : none
3301
3302 This keyword was introduced in order to provide layer 7 persistence to layer
3303 3 load balancers. The idea is to use the OS's ability to redirect an incoming
3304 connection for a remote address to a local process (here HAProxy), and let
3305 this process know what address was initially requested. When this option is
3306 used, sessions without cookies will be forwarded to the original destination
3307 IP address of the incoming request (which should match that of another
3308 equipment), while requests with cookies will still be forwarded to the
3309 appropriate server.
3310
3311 The "transparent" keyword is deprecated, use "option transparent" instead.
3312
3313 Note that contrary to a common belief, this option does NOT make HAProxy
3314 present the client's IP to the server when establishing the connection.
3315
3316 Use of this option is really discouraged, and since no really valid use of it
3317 has been reported for years, it will probably be removed in future versions.
3318
3319 See also: "option transparent"
3320
3321
3322use_backend <backend> if <condition>
3323use_backend <backend> unless <condition>
3324 Switch to a specific backend if/unless a Layer 7 condition is matched.
3325 May be used in sections : defaults | frontend | listen | backend
3326 no | yes | yes | no
3327 Arguments :
3328 <backend> is the name of a valid backend or "listen" section.
3329
3330 <condition> is a condition composed of ACLs, as described in section 2.3.
3331
3332 When doing content-switching, connections arrive on a frontend and are then
3333 dispatched to various backends depending on a number of conditions. The
3334 relation between the conditions and the backends is described with the
3335 "use_backend" keyword. This is supported only in HTTP mode.
3336
3337 There may be as many "use_backend" rules as desired. All of these rules are
3338 evaluated in their declaration order, and the first one which matches will
3339 assign the backend.
3340
3341 In the first form, the backend will be used if the condition is met. In the
3342 second form, the backend will be used if the condition is not met. If no
3343 condition is valid, the backend defined with "default_backend" will be used.
3344 If no default backend is defined, either the servers in the same section are
3345 used (in case of a "listen" section) or, in case of a frontend, no server is
3346 used and a 503 service unavailable response is returned.
3347
3348 See also: "default_backend" and section 2.3 about ACLs.
3349
Willy Tarreau036fae02008-01-06 13:24:40 +01003350
Willy Tarreau0ba27502007-12-24 16:55:16 +010033512.3) Using ACLs
Willy Tarreau6a06a402007-07-15 20:15:28 +02003352---------------
3353
3354The use of Access Control Lists (ACL) provides a flexible solution to perform
Willy Tarreau0ba27502007-12-24 16:55:16 +01003355content switching and generally to take decisions based on content extracted
3356from the request, the response or any environmental status. The principle is
3357simple :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003358
3359 - define test criteria with sets of values
3360 - perform actions only if a set of tests is valid
3361
3362The actions generally consist in blocking the request, or selecting a backend.
3363
3364In order to define a test, the "acl" keyword is used. The syntax is :
3365
3366 acl <aclname> <criterion> [flags] [operator] <value> ...
3367
Willy Tarreau0ba27502007-12-24 16:55:16 +01003368This creates a new ACL <aclname> or completes an existing one with new tests.
3369Those tests apply to the portion of request/response specified in <criterion>
Willy Tarreau6a06a402007-07-15 20:15:28 +02003370and may be adjusted with optional flags [flags]. Some criteria also support
3371an operator which may be specified before the set of values. The values are
3372of the type supported by the criterion, and are separated by spaces.
3373
Willy Tarreau0ba27502007-12-24 16:55:16 +01003374ACL names must be formed from upper and lower case letters, digits, '-' (dash),
3375'_' (underscore) , '.' (dot) and ':' (colon). ACL names are case-sensitive,
3376which means that "my_acl" and "My_Acl" are two different ACLs.
3377
3378There is no enforced limit to the number of ACLs. The unused ones do not affect
Willy Tarreau6a06a402007-07-15 20:15:28 +02003379performance, they just consume a small amount of memory.
3380
Willy Tarreau0ba27502007-12-24 16:55:16 +01003381The following ACL flags are currently supported :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003382
3383 -i : ignore case during matching.
3384 -- : force end of flags. Useful when a string looks like one of the flags.
3385
3386Supported types of values are :
Willy Tarreau0ba27502007-12-24 16:55:16 +01003387
Willy Tarreau6a06a402007-07-15 20:15:28 +02003388 - integers or integer ranges
3389 - strings
3390 - regular expressions
3391 - IP addresses and networks
3392
3393
Willy Tarreau0ba27502007-12-24 16:55:16 +010033942.3.1) Matching integers
Willy Tarreau6a06a402007-07-15 20:15:28 +02003395------------------------
3396
3397Matching integers is special in that ranges and operators are permitted. Note
3398that integer matching only applies to positive values. A range is a value
3399expressed with a lower and an upper bound separated with a colon, both of which
3400may be omitted.
3401
3402For instance, "1024:65535" is a valid range to represent a range of
3403unprivileged ports, and "1024:" would also work. "0:1023" is a valid
3404representation of privileged ports, and ":1023" would also work.
3405
3406For an easier usage, comparison operators are also supported. Note that using
Willy Tarreau0ba27502007-12-24 16:55:16 +01003407operators with ranges does not make much sense and is strongly discouraged.
3408Similarly, it does not make much sense to perform order comparisons with a set
3409of values.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003410
Willy Tarreau0ba27502007-12-24 16:55:16 +01003411Available operators for integer matching are :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003412
3413 eq : true if the tested value equals at least one value
3414 ge : true if the tested value is greater than or equal to at least one value
3415 gt : true if the tested value is greater than at least one value
3416 le : true if the tested value is less than or equal to at least one value
3417 lt : true if the tested value is less than at least one value
3418
Willy Tarreau0ba27502007-12-24 16:55:16 +01003419For instance, the following ACL matches any negative Content-Length header :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003420
3421 acl negative-length hdr_val(content-length) lt 0
3422
3423
Willy Tarreau0ba27502007-12-24 16:55:16 +010034242.3.2) Matching strings
Willy Tarreau6a06a402007-07-15 20:15:28 +02003425-----------------------
3426
3427String matching applies to verbatim strings as they are passed, with the
3428exception of the backslash ("\") which makes it possible to escape some
3429characters such as the space. If the "-i" flag is passed before the first
3430string, then the matching will be performed ignoring the case. In order
3431to match the string "-i", either set it second, or pass the "--" flag
Willy Tarreau0ba27502007-12-24 16:55:16 +01003432before the first string. Same applies of course to match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02003433
3434
Willy Tarreau0ba27502007-12-24 16:55:16 +010034352.3.3) Matching regular expressions (regexes)
Willy Tarreau6a06a402007-07-15 20:15:28 +02003436---------------------------------------------
3437
3438Just like with string matching, regex matching applies to verbatim strings as
3439they are passed, with the exception of the backslash ("\") which makes it
3440possible to escape some characters such as the space. If the "-i" flag is
3441passed before the first regex, then the matching will be performed ignoring
3442the case. In order to match the string "-i", either set it second, or pass
Willy Tarreau0ba27502007-12-24 16:55:16 +01003443the "--" flag before the first string. Same principle applies of course to
3444match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02003445
3446
Willy Tarreau0ba27502007-12-24 16:55:16 +010034472.3.4) Matching IPv4 addresses
3448------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02003449
3450IPv4 addresses values can be specified either as plain addresses or with a
3451netmask appended, in which case the IPv4 address matches whenever it is
3452within the network. Plain addresses may also be replaced with a resolvable
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003453host name, but this practice is generally discouraged as it makes it more
Willy Tarreau0ba27502007-12-24 16:55:16 +01003454difficult to read and debug configurations. If hostnames are used, you should
3455at least ensure that they are present in /etc/hosts so that the configuration
3456does not depend on any random DNS match at the moment the configuration is
3457parsed.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003458
3459
Willy Tarreau0ba27502007-12-24 16:55:16 +010034602.3.5) Available matching criteria
Willy Tarreau6a06a402007-07-15 20:15:28 +02003461----------------------------------
3462
Willy Tarreau0ba27502007-12-24 16:55:16 +010034632.3.5.1) Matching at Layer 4 and below
3464--------------------------------------
3465
3466A first set of criteria applies to information which does not require any
3467analysis of the request or response contents. Those generally include TCP/IP
3468addresses and ports, as well as internal values independant on the stream.
3469
Willy Tarreau6a06a402007-07-15 20:15:28 +02003470always_false
3471 This one never matches. All values and flags are ignored. It may be used as
3472 a temporary replacement for another one when adjusting configurations.
3473
3474always_true
3475 This one always matches. All values and flags are ignored. It may be used as
3476 a temporary replacement for another one when adjusting configurations.
3477
3478src <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003479 Applies to the client's IPv4 address. It is usually used to limit access to
Willy Tarreau6a06a402007-07-15 20:15:28 +02003480 certain resources such as statistics. Note that it is the TCP-level source
3481 address which is used, and not the address of a client behind a proxy.
3482
3483src_port <integer>
3484 Applies to the client's TCP source port. This has a very limited usage.
3485
3486dst <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003487 Applies to the local IPv4 address the client connected to. It can be used to
Willy Tarreau6a06a402007-07-15 20:15:28 +02003488 switch to a different backend for some alternative addresses.
3489
3490dst_port <integer>
3491 Applies to the local port the client connected to. It can be used to switch
3492 to a different backend for some alternative ports.
3493
3494dst_conn <integer>
3495 Applies to the number of currently established connections on the frontend,
3496 including the one being evaluated. It can be used to either return a sorry
Willy Tarreau0ba27502007-12-24 16:55:16 +01003497 page before hard-blocking, or to use a specific backend to drain new requests
Willy Tarreau6a06a402007-07-15 20:15:28 +02003498 when the farm is considered saturated.
3499
Willy Tarreau0ba27502007-12-24 16:55:16 +01003500nbsrv <integer>
3501nbsrv(backend) <integer>
3502 Returns true when the number of usable servers of either the current backend
3503 or the named backend matches the values or ranges specified. This is used to
3504 switch to an alternate backend when the number of servers is too low to
3505 to handle some load. It is useful to report a failure when combined with
3506 "monitor fail".
3507
3508
35092.3.5.2) Matching at Layer 7
3510----------------------------
3511
3512A second set of criteria applies to information which can be found at the
3513application layer (layer 7). Those require that a full HTTP request has been
3514read, and are only evaluated then. They may require slightly more CPU resources
3515than the layer 4 ones, but not much since the request and response are indexed.
3516
Willy Tarreau6a06a402007-07-15 20:15:28 +02003517method <string>
3518 Applies to the method in the HTTP request, eg: "GET". Some predefined ACL
3519 already check for most common methods.
3520
3521req_ver <string>
3522 Applies to the version string in the HTTP request, eg: "1.0". Some predefined
3523 ACL already check for versions 1.0 and 1.1.
3524
3525path <string>
3526 Returns true when the path part of the request, which starts at the first
3527 slash and ends before the question mark, equals one of the strings. It may be
3528 used to match known files, such as /favicon.ico.
3529
3530path_beg <string>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003531 Returns true when the path begins with one of the strings. This can be used
3532 to send certain directory names to alternative backends.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003533
3534path_end <string>
3535 Returns true when the path ends with one of the strings. This may be used to
3536 control file name extension.
3537
3538path_sub <string>
3539 Returns true when the path contains one of the strings. It can be used to
3540 detect particular patterns in paths, such as "../" for example. See also
3541 "path_dir".
3542
3543path_dir <string>
3544 Returns true when one of the strings is found isolated or delimited with
3545 slashes in the path. This is used to perform filename or directory name
3546 matching without the risk of wrong match due to colliding prefixes. See also
3547 "url_dir" and "path_sub".
3548
3549path_dom <string>
3550 Returns true when one of the strings is found isolated or delimited with dots
3551 in the path. This may be used to perform domain name matching in proxy
3552 requests. See also "path_sub" and "url_dom".
3553
3554path_reg <regex>
3555 Returns true when the path matches one of the regular expressions. It can be
3556 used any time, but it is important to remember that regex matching is slower
3557 than other methods. See also "url_reg" and all "path_" criteria.
3558
3559url <string>
3560 Applies to the whole URL passed in the request. The only real use is to match
3561 "*", for which there already is a predefined ACL.
3562
3563url_beg <string>
3564 Returns true when the URL begins with one of the strings. This can be used to
3565 check whether a URL begins with a slash or with a protocol scheme.
3566
3567url_end <string>
3568 Returns true when the URL ends with one of the strings. It has very limited
3569 use. "path_end" should be used instead for filename matching.
3570
3571url_sub <string>
3572 Returns true when the URL contains one of the strings. It can be used to
3573 detect particular patterns in query strings for example. See also "path_sub".
3574
3575url_dir <string>
3576 Returns true when one of the strings is found isolated or delimited with
3577 slashes in the URL. This is used to perform filename or directory name
3578 matching without the risk of wrong match due to colliding prefixes. See also
3579 "path_dir" and "url_sub".
3580
3581url_dom <string>
3582 Returns true when one of the strings is found isolated or delimited with dots
3583 in the URL. This is used to perform domain name matching without the risk of
3584 wrong match due to colliding prefixes. See also "url_sub".
3585
3586url_reg <regex>
3587 Returns true when the URL matches one of the regular expressions. It can be
3588 used any time, but it is important to remember that regex matching is slower
3589 than other methods. See also "path_reg" and all "url_" criteria.
3590
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01003591url_ip <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003592 Applies to the IP address specified in the absolute URI in an HTTP request.
3593 It can be used to prevent access to certain resources such as local network.
Willy Tarreau198a7442008-01-17 12:05:32 +01003594 It is useful with option "http_proxy".
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01003595
3596url_port <integer>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003597 Applies to the port specified in the absolute URI in an HTTP request. It can
3598 be used to prevent access to certain resources. It is useful with option
Willy Tarreau198a7442008-01-17 12:05:32 +01003599 "http_proxy". Note that if the port is not specified in the request, port 80
Willy Tarreau0ba27502007-12-24 16:55:16 +01003600 is assumed.
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01003601
Willy Tarreau6a06a402007-07-15 20:15:28 +02003602hdr <string>
3603hdr(header) <string>
3604 Note: all the "hdr*" matching criteria either apply to all headers, or to a
3605 particular header whose name is passed between parenthesis and without any
Willy Tarreau0ba27502007-12-24 16:55:16 +01003606 space. The header name is not case-sensitive. The header matching complies
3607 with RFC2616, and treats as separate headers all values delimited by commas.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003608
3609 The "hdr" criteria returns true if any of the headers matching the criteria
Willy Tarreau0ba27502007-12-24 16:55:16 +01003610 match any of the strings. This can be used to check exact for values. For
Willy Tarreau6a06a402007-07-15 20:15:28 +02003611 instance, checking that "connection: close" is set :
3612
3613 hdr(Connection) -i close
3614
3615hdr_beg <string>
3616hdr_beg(header) <string>
3617 Returns true when one of the headers begins with one of the strings. See
3618 "hdr" for more information on header matching.
3619
3620hdr_end <string>
3621hdr_end(header) <string>
3622 Returns true when one of the headers ends with one of the strings. See "hdr"
3623 for more information on header matching.
3624
3625hdr_sub <string>
3626hdr_sub(header) <string>
3627 Returns true when one of the headers contains one of the strings. See "hdr"
3628 for more information on header matching.
3629
3630hdr_dir <string>
3631hdr_dir(header) <string>
3632 Returns true when one of the headers contains one of the strings either
3633 isolated or delimited by slashes. This is used to perform filename or
3634 directory name matching, and may be used with Referer. See "hdr" for more
3635 information on header matching.
3636
3637hdr_dom <string>
3638hdr_dom(header) <string>
3639 Returns true when one of the headers contains one of the strings either
3640 isolated or delimited by dots. This is used to perform domain name matching,
3641 and may be used with the Host header. See "hdr" for more information on
3642 header matching.
3643
3644hdr_reg <regex>
3645hdr_reg(header) <regex>
3646 Returns true when one of the headers matches of the regular expressions. It
3647 can be used at any time, but it is important to remember that regex matching
3648 is slower than other methods. See also other "hdr_" criteria, as well as
3649 "hdr" for more information on header matching.
3650
3651hdr_val <integer>
3652hdr_val(header) <integer>
3653 Returns true when one of the headers starts with a number which matches the
3654 values or ranges specified. This may be used to limit content-length to
3655 acceptable values for example. See "hdr" for more information on header
3656 matching.
3657
3658hdr_cnt <integer>
3659hdr_cnt(header) <integer>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003660 Returns true when the number of occurrence of the specified header matches
3661 the values or ranges specified. It is important to remember that one header
3662 line may count as several headers if it has several values. This is used to
3663 detect presence, absence or abuse of a specific header, as well as to block
3664 request smugling attacks by rejecting requests which contain more than one
3665 of certain headers. See "hdr" for more information on header matching.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003666
3667
Willy Tarreau0ba27502007-12-24 16:55:16 +010036682.3.6) Pre-defined ACLs
Willy Tarreau6a06a402007-07-15 20:15:28 +02003669-----------------------
3670
3671Some predefined ACLs are hard-coded so that they do not have to be declared in
3672every frontend which needs them. They all have their names in upper case in
Willy Tarreau0ba27502007-12-24 16:55:16 +01003673order to avoid confusion. Their equivalence is provided below. Please note that
3674only the first three ones are not layer 7 based.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003675
3676ACL name Equivalent to Usage
3677---------------+-----------------------------+---------------------------------
3678TRUE always_true 1 always match
3679FALSE always_false 0 never match
3680LOCALHOST src 127.0.0.1/8 match connection from local host
3681HTTP_1.0 req_ver 1.0 match HTTP version 1.0
3682HTTP_1.1 req_ver 1.1 match HTTP version 1.1
3683METH_CONNECT method CONNECT match HTTP CONNECT method
3684METH_GET method GET HEAD match HTTP GET or HEAD method
3685METH_HEAD method HEAD match HTTP HEAD method
3686METH_OPTIONS method OPTIONS match HTTP OPTIONS method
3687METH_POST method POST match HTTP POST method
3688METH_TRACE method TRACE match HTTP TRACE method
3689HTTP_URL_ABS url_reg ^[^/:]*:// match absolute URL with scheme
3690HTTP_URL_SLASH url_beg / match URL begining with "/"
3691HTTP_URL_STAR url * match URL equal to "*"
3692HTTP_CONTENT hdr_val(content-length) gt 0 match an existing content-length
3693---------------+-----------------------------+---------------------------------
3694
3695
Willy Tarreau0ba27502007-12-24 16:55:16 +010036962.3.7) Using ACLs to form conditions
Willy Tarreau6a06a402007-07-15 20:15:28 +02003697------------------------------------
3698
3699Some actions are only performed upon a valid condition. A condition is a
3700combination of ACLs with operators. 3 operators are supported :
3701
3702 - AND (implicit)
3703 - OR (explicit with the "or" keyword or the "||" operator)
3704 - Negation with the exclamation mark ("!")
3705
3706A condition is formed as a disjonctive form :
3707
3708 [!]acl1 [!]acl2 ... [!]acln { or [!]acl1 [!]acl2 ... [!]acln } ...
3709
3710Such conditions are generally used after an "if" or "unless" statement,
3711indicating when the condition will trigger the action.
3712
3713For instance, to block HTTP requests to the "*" URL with methods other than
Willy Tarreau0ba27502007-12-24 16:55:16 +01003714"OPTIONS", as well as POST requests without content-length, and GET or HEAD
3715requests with a content-length greater than 0, and finally every request which
3716is not either GET/HEAD/POST/OPTIONS !
Willy Tarreau6a06a402007-07-15 20:15:28 +02003717
3718 acl missing_cl hdr_cnt(Content-length) eq 0
3719 block if HTTP_URL_STAR !METH_OPTIONS || METH_POST missing_cl
3720 block if METH_GET HTTP_CONTENT
3721 block unless METH_GET or METH_POST or METH_OPTIONS
3722
3723To select a different backend for requests to static contents on the "www" site
3724and to every request on the "img", "video", "download" and "ftp" hosts :
3725
3726 acl url_static path_beg /static /images /img /css
3727 acl url_static path_end .gif .png .jpg .css .js
3728 acl host_www hdr_beg(host) -i www
3729 acl host_static hdr_beg(host) -i img. video. download. ftp.
3730
3731 # now use backend "static" for all static-only hosts, and for static urls
3732 # of host "www". Use backend "www" for the rest.
3733 use_backend static if host_static or host_www url_static
3734 use_backend www if host_www
3735
Willy Tarreau844e3c52008-01-11 16:28:18 +01003736See section 2.2 for detailed help on the "block" and "use_backend" keywords.
Willy Tarreaudbc36f62007-11-30 12:29:11 +01003737
3738
Willy Tarreauc7246fc2007-12-02 17:31:20 +010037392.4) Server options
Willy Tarreau5764b382007-11-30 17:46:49 +01003740-------------------
3741
Willy Tarreau198a7442008-01-17 12:05:32 +01003742The "server" keyword supports a certain number of settings which are all passed
3743as arguments on the server line. The order in which those arguments appear does
3744not count, and they are all optional. Some of those settings are single words
3745(booleans) while others expect one or several values after them. In this case,
3746the values must immediately follow the setting name. All those settings must be
3747specified after the server's address if they are used :
3748
3749 server <name> <address>[:port] [settings ...]
3750
3751The currently supported settings are the following ones.
3752
3753addr <ipv4>
3754 Using the "addr" parameter, it becomes possible to use a different IP address
3755 to send health-checks. On some servers, it may be desirable to dedicate an IP
3756 address to specific component able to perform complex tests which are more
3757 suitable to health-checks than the application. This parameter is ignored if
3758 the "check" parameter is not set. See also the "port" parameter.
3759
3760backup
3761 When "backup" is present on a server line, the server is only used in load
3762 balancing when all other non-backup servers are unavailable. Requests coming
3763 with a persistence cookie referencing the server will always be served
3764 though. By default, only the first operational backup server is used, unless
Willy Tarreauaf85d942008-01-30 10:47:10 +01003765 the "allbackups" option is set in the backend. See also the "allbackups"
Willy Tarreau198a7442008-01-17 12:05:32 +01003766 option.
3767
3768check
3769 This option enables health checks on the server. By default, a server is
3770 always considered available. If "check" is set, the server will receive
3771 periodic health checks to ensure that it is really able to serve requests.
3772 The default address and port to send the tests to are those of the server,
3773 and the default source is the same as the one defined in the backend. It is
3774 possible to change the address using the "addr" parameter, the port using the
3775 "port" parameter, the source address using the "source" address, and the
3776 interval and timers using the "inter", "rise" and "fall" parameters. The
3777 request method is define in the backend using the "httpchk", "smtpchk",
3778 and "ssl-hello-chk" options. Please refer to those options and parameters for
3779 more information.
3780
3781cookie <value>
3782 The "cookie" parameter sets the cookie value assigned to the server to
3783 <value>. This value will be checked in incoming requests, and the first
3784 operational server possessing the same value will be selected. In return, in
3785 cookie insertion or rewrite modes, this value will be assigned to the cookie
3786 sent to the client. There is nothing wrong in having several servers sharing
3787 the same cookie value, and it is in fact somewhat common between normal and
3788 backup servers. See also the "cookie" keyword in backend section.
3789
3790fall <count>
3791 The "fall" parameter states that a server will be considered as dead after
3792 <count> consecutive unsuccessful health checks. This value defaults to 3 if
3793 unspecified. See also the "check", "inter" and "rise" parameters.
3794
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01003795id <value>
3796 Set a persistent value for server ID. Must be unique and larger than 1000, as
3797 smaller values are reserved for auto-assigned ids.
3798
Willy Tarreau198a7442008-01-17 12:05:32 +01003799inter <delay>
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003800fastinter <delay>
3801downinter <delay>
Willy Tarreau198a7442008-01-17 12:05:32 +01003802 The "inter" parameter sets the interval between two consecutive health checks
3803 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003804 It is also possible to use "fastinter" and "downinter" to optimize delays
Willy Tarreau41a340d2008-01-22 12:25:31 +01003805 between checks depending on the server state :
3806
3807 Server state | Interval used
3808 ---------------------------------+-----------------------------------------
3809 UP 100% (non-transitional) | "inter"
3810 ---------------------------------+-----------------------------------------
3811 Transitionally UP (going down), |
3812 Transitionally DOWN (going up), | "fastinter" if set, "inter" otherwise.
3813 or yet unchecked. |
3814 ---------------------------------+-----------------------------------------
3815 DOWN 100% (non-transitional) | "downinter" if set, "inter" otherwise.
3816 ---------------------------------+-----------------------------------------
3817
3818 Just as with every other time-based parameter, they can be entered in any
3819 other explicit unit among { us, ms, s, m, h, d }. The "inter" parameter also
3820 serves as a timeout for health checks sent to servers if "timeout check" is
3821 not set. In order to reduce "resonance" effects when multiple servers are
3822 hosted on the same hardware, the health-checks of all servers are started
3823 with a small time offset between them. It is also possible to add some random
3824 noise in the health checks interval using the global "spread-checks"
3825 keyword. This makes sense for instance when a lot of backends use the same
3826 servers.
Willy Tarreau198a7442008-01-17 12:05:32 +01003827
3828maxconn <maxconn>
3829 The "maxconn" parameter specifies the maximal number of concurrent
3830 connections that will be sent to this server. If the number of incoming
3831 concurrent requests goes higher than this value, they will be queued, waiting
3832 for a connection to be released. This parameter is very important as it can
3833 save fragile servers from going down under extreme loads. If a "minconn"
3834 parameter is specified, the limit becomes dynamic. The default value is "0"
3835 which means unlimited. See also the "minconn" and "maxqueue" parameters, and
3836 the backend's "fullconn" keyword.
3837
3838maxqueue <maxqueue>
3839 The "maxqueue" parameter specifies the maximal number of connections which
3840 will wait in the queue for this server. If this limit is reached, next
3841 requests will be redispatched to other servers instead of indefinitely
3842 waiting to be served. This will break persistence but may allow people to
3843 quickly re-log in when the server they try to connect to is dying. The
3844 default value is "0" which means the queue is unlimited. See also the
3845 "maxconn" and "minconn" parameters.
3846
3847minconn <minconn>
3848 When the "minconn" parameter is set, the maxconn limit becomes a dynamic
3849 limit following the backend's load. The server will always accept at least
3850 <minconn> connections, never more than <maxconn>, and the limit will be on
3851 the ramp between both values when the backend has less than <fullconn>
3852 concurrent connections. This makes it possible to limit the load on the
3853 server during normal loads, but push it further for important loads without
3854 overloading the server during exceptionnal loads. See also the "maxconn"
3855 and "maxqueue" parameters, as well as the "fullconn" backend keyword.
3856
3857port <port>
3858 Using the "port" parameter, it becomes possible to use a different port to
3859 send health-checks. On some servers, it may be desirable to dedicate a port
3860 to a specific component able to perform complex tests which are more suitable
3861 to health-checks than the application. It is common to run a simple script in
3862 inetd for instance. This parameter is ignored if the "check" parameter is not
3863 set. See also the "addr" parameter.
3864
Willy Tarreau21d2af32008-02-14 20:25:24 +01003865redir <prefix>
3866 The "redir" parameter enables the redirection mode for all GET and HEAD
3867 requests addressing this server. This means that instead of having HAProxy
3868 forward the request to the server, it will send an "HTTP 302" response with
3869 the "Location" header composed of this prefix immediately followed by the
3870 requested URI beginning at the leading '/' of the path component. That means
3871 that no trailing slash should be used after <prefix>. All invalid requests
3872 will be rejected, and all non-GET or HEAD requests will be normally served by
3873 the server. Note that since the response is completely forged, no header
3874 mangling nor cookie insertion is possible in the respose. However, cookies in
3875 requests are still analysed, making this solution completely usable to direct
3876 users to a remote location in case of local disaster. Main use consists in
3877 increasing bandwidth for static servers by having the clients directly
3878 connect to them. Note: never use a relative location here, it would cause a
3879 loop between the client and HAProxy!
3880
3881 Example : server srv1 192.168.1.1:80 redir http://image1.mydomain.com check
3882
Willy Tarreau198a7442008-01-17 12:05:32 +01003883rise <count>
3884 The "rise" parameter states that a server will be considered as operational
3885 after <count> consecutive successful health checks. This value defaults to 2
3886 if unspecified. See also the "check", "inter" and "fall" parameters.
3887
Willy Tarreau5764b382007-11-30 17:46:49 +01003888slowstart <start_time_in_ms>
Willy Tarreau198a7442008-01-17 12:05:32 +01003889 The "slowstart" parameter for a server accepts a value in milliseconds which
Willy Tarreau5764b382007-11-30 17:46:49 +01003890 indicates after how long a server which has just come back up will run at
Willy Tarreaubefdff12007-12-02 22:27:38 +01003891 full speed. Just as with every other time-based parameter, it can be entered
3892 in any other explicit unit among { us, ms, s, m, h, d }. The speed grows
3893 linearly from 0 to 100% during this time. The limitation applies to two
3894 parameters :
Willy Tarreau5764b382007-11-30 17:46:49 +01003895
3896 - maxconn: the number of connections accepted by the server will grow from 1
3897 to 100% of the usual dynamic limit defined by (minconn,maxconn,fullconn).
3898
3899 - weight: when the backend uses a dynamic weighted algorithm, the weight
3900 grows linearly from 1 to 100%. In this case, the weight is updated at every
Willy Tarreau198a7442008-01-17 12:05:32 +01003901 health-check. For this reason, it is important that the "inter" parameter
3902 is smaller than the "slowstart", in order to maximize the number of steps.
Willy Tarreau5764b382007-11-30 17:46:49 +01003903
3904 The slowstart never applies when haproxy starts, otherwise it would cause
3905 trouble to running servers. It only applies when a server has been previously
3906 seen as failed.
3907
Willy Tarreau198a7442008-01-17 12:05:32 +01003908source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
3909 The "source" parameter sets the source address which will be used when
3910 connecting to the server. It follows the exact same parameters and principle
3911 as the backend "source" keyword, except that it only applies to the server
3912 referencing it. Please consult the "source" keyword for details.
3913
Krzysztof Piotr Oledzkic8b16fc2008-02-18 01:26:35 +01003914track [<proxy>/]<server>
3915 This option enables ability to set the current state of the server by
3916 tracking another one. Only a server with checks enabled can be tracked
3917 so it is not possible for example to track a server that tracks another
3918 one. If <proxy> is omitted the current one is used. If disable-on-404 is
3919 used, it has to be enabled on both proxies.
3920
Willy Tarreau198a7442008-01-17 12:05:32 +01003921weight <weight>
3922 The "weight" parameter is used to adjust the server's weight relative to
3923 other servers. All servers will receive a load proportional to their weight
3924 relative to the sum of all weights, so the higher the weight, the higher the
3925 load. The default weight is 1, and the maximal value is 255. If this
3926 parameter is used to distribute the load according to server's capacity, it
3927 is recommended to start with values which can both grow and shrink, for
3928 instance between 10 and 100 to leave enough room above and below for later
3929 adjustments.
3930
Willy Tarreauced27012008-01-17 20:35:34 +01003931
39322.5) HTTP header manipulation
3933-----------------------------
3934
3935In HTTP mode, it is possible to rewrite, add or delete some of the request and
3936response headers based on regular expressions. It is also possible to block a
3937request or a response if a particular header matches a regular expression,
3938which is enough to stop most elementary protocol attacks, and to protect
3939against information leak from the internal network. But there is a limitation
3940to this : since HAProxy's HTTP engine does not support keep-alive, only headers
3941passed during the first request of a TCP session will be seen. All subsequent
3942headers will be considered data only and not analyzed. Furthermore, HAProxy
3943never touches data contents, it stops analysis at the end of headers.
3944
3945This section covers common usage of the following keywords, described in detail
3946in section 2.2.1 :
3947
3948 - reqadd <string>
3949 - reqallow <search>
3950 - reqiallow <search>
3951 - reqdel <search>
3952 - reqidel <search>
3953 - reqdeny <search>
3954 - reqideny <search>
3955 - reqpass <search>
3956 - reqipass <search>
3957 - reqrep <search> <replace>
3958 - reqirep <search> <replace>
3959 - reqtarpit <search>
3960 - reqitarpit <search>
3961 - rspadd <string>
3962 - rspdel <search>
3963 - rspidel <search>
3964 - rspdeny <search>
3965 - rspideny <search>
3966 - rsprep <search> <replace>
3967 - rspirep <search> <replace>
3968
3969With all these keywords, the same conventions are used. The <search> parameter
3970is a POSIX extended regular expression (regex) which supports grouping through
3971parenthesis (without the backslash). Spaces and other delimiters must be
3972prefixed with a backslash ('\') to avoid confusion with a field delimiter.
3973Other characters may be prefixed with a backslash to change their meaning :
3974
3975 \t for a tab
3976 \r for a carriage return (CR)
3977 \n for a new line (LF)
3978 \ to mark a space and differentiate it from a delimiter
3979 \# to mark a sharp and differentiate it from a comment
3980 \\ to use a backslash in a regex
3981 \\\\ to use a backslash in the text (*2 for regex, *2 for haproxy)
3982 \xXX to write the ASCII hex code XX as in the C language
3983
3984The <replace> parameter contains the string to be used to replace the largest
3985portion of text matching the regex. It can make use of the special characters
3986above, and can reference a substring which is delimited by parenthesis in the
3987regex, by writing a backslash ('\') immediately followed by one digit from 0 to
Willy Tarreaud2a4aa22008-01-31 15:28:22 +010039889 indicating the group position (0 designating the entire line). This practice
Willy Tarreauced27012008-01-17 20:35:34 +01003989is very common to users of the "sed" program.
3990
3991The <string> parameter represents the string which will systematically be added
3992after the last header line. It can also use special character sequences above.
3993
3994Notes related to these keywords :
3995---------------------------------
3996 - these keywords are not always convenient to allow/deny based on header
3997 contents. It is strongly recommended to use ACLs with the "block" keyword
3998 instead, resulting in far more flexible and manageable rules.
3999
4000 - lines are always considered as a whole. It is not possible to reference
4001 a header name only or a value only. This is important because of the way
4002 headers are written (notably the number of spaces after the colon).
4003
4004 - the first line is always considered as a header, which makes it possible to
4005 rewrite or filter HTTP requests URIs or response codes, but in turn makes
4006 it harder to distinguish between headers and request line. The regex prefix
4007 ^[^\ \t]*[\ \t] matches any HTTP method followed by a space, and the prefix
4008 ^[^ \t:]*: matches any header name followed by a colon.
4009
4010 - for performances reasons, the number of characters added to a request or to
4011 a response is limited at build time to values between 1 and 4 kB. This
4012 should normally be far more than enough for most usages. If it is too short
4013 on occasional usages, it is possible to gain some space by removing some
4014 useless headers before adding new ones.
4015
4016 - keywords beginning with "reqi" and "rspi" are the same as their couterpart
4017 without the 'i' letter except that they ignore case when matching patterns.
4018
4019 - when a request passes through a frontend then a backend, all req* rules
4020 from the frontend will be evaluated, then all req* rules from the backend
4021 will be evaluated. The reverse path is applied to responses.
4022
4023 - req* statements are applied after "block" statements, so that "block" is
4024 always the first one, but before "use_backend" in order to permit rewriting
4025 before switching.
4026
Willy Tarreau5764b382007-11-30 17:46:49 +01004027
Willy Tarreauced27012008-01-17 20:35:34 +010040282.6) Logging
Willy Tarreau844e3c52008-01-11 16:28:18 +01004029------------
4030
4031[to do]
4032
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +010040332.7) CSV format
4034
4035 0. pxname: proxy name
4036 1. svname: service name (FRONTEND for frontend, BACKEND for backend, any name
4037 for server)
4038 2. qcur: current queued requests
4039 3. qmax: max queued requests
4040 4. scur: current sessions
4041 5. smax: max sessions
4042 6. slim: sessions limit
4043 7. stot: total sessions
4044 8. bin: bytes in
4045 9. bout: bytes out
4046 10. dreq: denied requests
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +01004047 11. dresp: denied responses
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01004048 12. ereq: request errors
4049 13. econ: connection errors
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +01004050 14. eresp: response errors
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01004051 15. wretr: retries (warning)
4052 16. wredis: redispatches (warning)
4053 17. status: status (UP/DOWN/...)
4054 18. weight: server weight (server), total weight (backend)
4055 19. act: server is active (server), number of active servers (backend)
4056 20. bck: server is backup (server), number of backup servers (backend)
4057 21. chkfail: number of failed checks
4058 22. chkdown: number of UP->DOWN transitions
4059 23. lastchg: last status change (in seconds)
4060 24. downtime: total downtime (in seconds)
4061 25. qlimit: queue limit
4062 26. pid: process id (0 for first instance, 1 for second, ...)
4063 27. iid: unique proxy id
4064 28. sid: service id (unique inside a proxy)
4065 29. throttle: warm up status
4066 30. lbtot: total number of times a server was selected
4067 31. tracked: id of proxy/server if tracking is enabled
4068 32. type (0=frontend, 1=backend, 2=server)
Willy Tarreau844e3c52008-01-11 16:28:18 +01004069
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +010040702.8) Unix Socket commands
4071
4072 - "show stat [<iid> <type> <sid>]": dump statistics in the cvs format. By
4073 passing id, type and sid it is possible to dump only selected items:
4074 - iid is a proxy id, -1 to dump everything
4075 - type selects type of dumpable objects: 1 for frontend, 2 for backend, 4 for
4076 server, -1 for everything. Values can be ORed, for example:
4077 1+2=3 -> frontend+backend.
4078 1+2+4=7 -> frontend+backend+server.
4079 - sid is a service id, -1 to dump everything from the selected proxy.
4080
4081 - "show info": dump info about current haproxy status.
4082
Willy Tarreau0ba27502007-12-24 16:55:16 +01004083/*
4084 * Local variables:
4085 * fill-column: 79
4086 * End:
4087 */