blob: 65404f5649951b0cb4f3d952cfb51f631a8c8a54 [file] [log] [blame]
Willy Tarreau6a06a402007-07-15 20:15:28 +02001 ----------------------
2 HAProxy
3 Configuration Manual
4 ----------------------
Willy Tarreaub1e52e82008-01-13 14:49:51 +01005 version 1.3.15
Willy Tarreau6a06a402007-07-15 20:15:28 +02006 willy tarreau
Willy Tarreau7b4c5ae2008-04-19 21:06:14 +02007 2008/04/19
Willy Tarreau6a06a402007-07-15 20:15:28 +02008
9
10This document covers the configuration language as implemented in the version
11specified above. It does not provide any hint, example or advice. For such
Willy Tarreau0ba27502007-12-24 16:55:16 +010012documentation, please refer to the Reference Manual or the Architecture Manual.
Willy Tarreau6a06a402007-07-15 20:15:28 +020013
Willy Tarreau41a340d2008-01-22 12:25:31 +010014Note to documentation contributors : this document is formated with 80 columns
15per line, with even number of spaces for indentation and without tabs. Please
16follow these rules strictly so that it remains easily printable everywhere. If
17a line needs to be printed verbatim and does not fit, please end each line with
18a backslash ('\') and continue on next line.
Willy Tarreau6a06a402007-07-15 20:15:28 +020019
20HAProxy's configuration process involves 3 major sources of parameters :
21
22 - the arguments from the command-line, which always take precedence
23 - the "global" section, which sets process-wide parameters
24 - the proxies sections which can take form of "defaults", "listen",
25 "frontend" and "backend".
26
Willy Tarreau0ba27502007-12-24 16:55:16 +010027The configuration file syntax consists in lines beginning with a keyword
28referenced in this manual, optionally followed by one or several parameters
29delimited by spaces. If spaces have to be entered in strings, then they must be
30preceeded by a backslash ('\') to be escaped. Backslashes also have to be
31escaped by doubling them.
32
33Some parameters involve values representating time, such as timeouts. These
34values are generally expressed in milliseconds (unless explicitly stated
35otherwise) but may be expressed in any other unit by suffixing the unit to the
36numeric value. It is important to consider this because it will not be repeated
37for every keyword. Supported units are :
38
39 - us : microseconds. 1 microsecond = 1/1000000 second
40 - ms : milliseconds. 1 millisecond = 1/1000 second. This is the default.
41 - s : seconds. 1s = 1000ms
42 - m : minutes. 1m = 60s = 60000ms
43 - h : hours. 1h = 60m = 3600s = 3600000ms
44 - d : days. 1d = 24h = 1440m = 86400s = 86400000ms
45
46
Willy Tarreau6a06a402007-07-15 20:15:28 +0200471. Global parameters
48--------------------
49
50Parameters in the "global" section are process-wide and often OS-specific. They
51are generally set once for all and do not need being changed once correct. Some
52of them have command-line equivalents.
53
54The following keywords are supported in the "global" section :
55
56 * Process management and security
57 - chroot
58 - daemon
59 - gid
60 - group
61 - log
62 - nbproc
63 - pidfile
64 - uid
65 - ulimit-n
66 - user
Willy Tarreaufbee7132007-10-18 13:53:22 +020067 - stats
Willy Tarreau6a06a402007-07-15 20:15:28 +020068
69 * Performance tuning
70 - maxconn
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 -
Willy Tarreaub463dfb2008-06-07 23:08:56 +0200571redirect - X X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100572redisp X - X X (deprecated)
573redispatch X - X X (deprecated)
Willy Tarreau6a06a402007-07-15 20:15:28 +0200574reqadd - X X X
575reqallow - X X X
576reqdel - X X X
577reqdeny - X X X
578reqiallow - X X X
579reqidel - X X X
580reqideny - X X X
581reqipass - X X X
582reqirep - X X X
583reqisetbe - X X X
584reqitarpit - X X X
585reqpass - X X X
586reqrep - X X X
587reqsetbe - X X X
588reqtarpit - X X X
589retries X - X X
590rspadd - X X X
591rspdel - X X X
592rspdeny - X X X
593rspidel - X X X
594rspideny - X X X
595rspirep - X X X
596rsprep - X X X
597server - - X X
598source X - X X
Willy Tarreaue219db72007-12-03 01:30:13 +0100599srvtimeout X - X X (deprecated)
Willy Tarreau24e779b2007-07-24 23:43:37 +0200600stats auth X - X X
601stats enable X - X X
602stats realm X - X X
Willy Tarreaubbd42122007-07-25 07:26:38 +0200603stats refresh X - X X
Willy Tarreau24e779b2007-07-24 23:43:37 +0200604stats scope X - X X
605stats uri X - X X
Krzysztof Oledzkid9db9272007-10-15 10:05:11 +0200606stats hide-version X - X X
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +0100607timeout check X - X X
Willy Tarreaue219db72007-12-03 01:30:13 +0100608timeout client X X X -
609timeout clitimeout X X X - (deprecated)
610timeout connect X - X X
611timeout contimeout X - X X (deprecated)
Willy Tarreau844e3c52008-01-11 16:28:18 +0100612timeout http-request X X X -
Willy Tarreaue219db72007-12-03 01:30:13 +0100613timeout queue X - X X
614timeout server X - X X
615timeout srvtimeout X - X X (deprecated)
Willy Tarreau51c9bde2008-01-06 13:40:03 +0100616timeout tarpit X X X X
Willy Tarreau844e3c52008-01-11 16:28:18 +0100617transparent X X X - (deprecated)
Willy Tarreau6a06a402007-07-15 20:15:28 +0200618use_backend - X X -
Willy Tarreau6a06a402007-07-15 20:15:28 +0200619----------------------+----------+----------+---------+---------
620keyword defaults frontend listen backend
621
Willy Tarreau0ba27502007-12-24 16:55:16 +0100622
6232.2.1) Alphabetically sorted keywords reference
624-----------------------------------------------
625
626This section provides a description of each keyword and its usage.
627
628
629acl <aclname> <criterion> [flags] [operator] <value> ...
630 Declare or complete an access list.
631 May be used in sections : defaults | frontend | listen | backend
632 no | yes | yes | yes
633 Example:
634 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
635 acl invalid_src src_port 0:1023
636 acl local_dst hdr(host) -i localhost
637
638 See section 2.3 about ACL usage.
639
640
641appsession <cookie> len <length> timeout <holdtime>
642 Define session stickiness on an existing application cookie.
643 May be used in sections : defaults | frontend | listen | backend
644 no | no | yes | yes
645 Arguments :
646 <cookie> this is the name of the cookie used by the application and which
647 HAProxy will have to learn for each new session.
648
649 <length> this is the number of characters that will be memorized and
650 checked in each cookie value.
651
652 <holdtime> this is the time after which the cookie will be removed from
653 memory if unused. If no unit is specified, this time is in
654 milliseconds.
655
656 When an application cookie is defined in a backend, HAProxy will check when
657 the server sets such a cookie, and will store its value in a table, and
658 associate it with the server's identifier. Up to <length> characters from
659 the value will be retained. On each connection, haproxy will look for this
660 cookie both in the "Cookie:" headers, and as a URL parameter in the query
661 string. If a known value is found, the client will be directed to the server
662 associated with this value. Otherwise, the load balancing algorithm is
663 applied. Cookies are automatically removed from memory when they have been
664 unused for a duration longer than <holdtime>.
665
666 The definition of an application cookie is limited to one per backend.
667
668 Example :
669 appsession JSESSIONID len 52 timeout 3h
670
671 See also : "cookie", "capture cookie" and "balance".
672
673
Willy Tarreauc73ce2b2008-01-06 10:55:10 +0100674backlog <conns>
675 Give hints to the system about the approximate listen backlog desired size
676 May be used in sections : defaults | frontend | listen | backend
677 yes | yes | yes | no
678 Arguments :
679 <conns> is the number of pending connections. Depending on the operating
680 system, it may represent the number of already acknowledged
681 connections, of non-acknowledged ones, or both.
682
683 In order to protect against SYN flood attacks, one solution is to increase
684 the system's SYN backlog size. Depending on the system, sometimes it is just
685 tunable via a system parameter, sometimes it is not adjustable at all, and
686 sometimes the system relies on hints given by the application at the time of
687 the listen() syscall. By default, HAProxy passes the frontend's maxconn value
688 to the listen() syscall. On systems which can make use of this value, it can
689 sometimes be useful to be able to specify a different value, hence this
690 backlog parameter.
691
692 On Linux 2.4, the parameter is ignored by the system. On Linux 2.6, it is
693 used as a hint and the system accepts up to the smallest greater power of
694 two, and never more than some limits (usually 32768).
695
696 See also : "maxconn" and the target operating system's tuning guide.
697
698
Willy Tarreau0ba27502007-12-24 16:55:16 +0100699balance <algorithm> [ <arguments> ]
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +0200700balance url_param <param> [check_post [<max_wait>]]
Willy Tarreau0ba27502007-12-24 16:55:16 +0100701 Define the load balancing algorithm to be used in a backend.
702 May be used in sections : defaults | frontend | listen | backend
703 yes | no | yes | yes
704 Arguments :
705 <algorithm> is the algorithm used to select a server when doing load
706 balancing. This only applies when no persistence information
707 is available, or when a connection is redispatched to another
708 server. <algorithm> may be one of the following :
709
710 roundrobin Each server is used in turns, according to their weights.
711 This is the smoothest and fairest algorithm when the server's
712 processing time remains equally distributed. This algorithm
713 is dynamic, which means that server weights may be adjusted
714 on the fly for slow starts for instance.
715
Willy Tarreau2d2a7f82008-03-17 12:07:56 +0100716 leastconn The server with the lowest number of connections receives the
717 connection. Round-robin is performed within groups of servers
718 of the same load to ensure that all servers will be used. Use
719 of this algorithm is recommended where very long sessions are
720 expected, such as LDAP, SQL, TSE, etc... but is not very well
721 suited for protocols using short sessions such as HTTP. This
722 algorithm is dynamic, which means that server weights may be
723 adjusted on the fly for slow starts for instance.
724
Willy Tarreau0ba27502007-12-24 16:55:16 +0100725 source The source IP address is hashed and divided by the total
726 weight of the running servers to designate which server will
727 receive the request. This ensures that the same client IP
728 address will always reach the same server as long as no
729 server goes down or up. If the hash result changes due to the
730 number of running servers changing, many clients will be
731 directed to a different server. This algorithm is generally
732 used in TCP mode where no cookie may be inserted. It may also
733 be used on the Internet to provide a best-effort stickyness
734 to clients which refuse session cookies. This algorithm is
735 static, which means that changing a server's weight on the
736 fly will have no effect.
737
738 uri The left part of the URI (before the question mark) is hashed
739 and divided by the total weight of the running servers. The
740 result designates which server will receive the request. This
741 ensures that a same URI will always be directed to the same
742 server as long as no server goes up or down. This is used
743 with proxy caches and anti-virus proxies in order to maximize
744 the cache hit rate. Note that this algorithm may only be used
745 in an HTTP backend. This algorithm is static, which means
746 that changing a server's weight on the fly will have no
747 effect.
748
Marek Majkowski9c30fc12008-04-27 23:25:55 +0200749 This algorithm support two optional parameters "len" and
750 "depth", both followed by a positive integer number. These
751 options may be helpful when it is needed to balance servers
752 based on the beginning of the URI only. The "len" parameter
753 indicates that the algorithm should only consider that many
754 characters at the beginning of the URI to compute the hash.
755 Note that having "len" set to 1 rarely makes sense since most
756 URIs start with a leading "/".
757
758 The "depth" parameter indicates the maximum directory depth
759 to be used to compute the hash. One level is counted for each
760 slash in the request. If both parameters are specified, the
761 evaluation stops when either is reached.
762
Willy Tarreau0ba27502007-12-24 16:55:16 +0100763 url_param The URL parameter specified in argument will be looked up in
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +0200764 the query string of each HTTP GET request.
765
766 If the modifier "check_post" is used, then an HTTP POST
767 request entity will be searched for the parameter argument,
768 when the question mark indicating a query string ('?') is not
769 present in the URL. Optionally, specify a number of octets to
770 wait for before attempting to search the message body. If the
771 entity can not be searched, then round robin is used for each
772 request. For instance, if your clients always send the LB
773 parameter in the first 128 bytes, then specify that. The
774 default is 48. The entity data will not be scanned until the
775 required number of octets have arrived at the gateway, this
776 is the minimum of: (default/max_wait, Content-Length or first
777 chunk length). If Content-Length is missing or zero, it does
778 not need to wait for more data than the client promised to
779 send. When Content-Length is present and larger than
780 <max_wait>, then waiting is limited to <max_wait> and it is
781 assumed that this will be enough data to search for the
782 presence of the parameter. In the unlikely event that
783 Transfer-Encoding: chunked is used, only the first chunk is
784 scanned. Parameter values separated by a chunk boundary, may
785 be randomly balanced if at all.
786
787 If the parameter is found followed by an equal sign ('=') and
788 a value, then the value is hashed and divided by the total
789 weight of the running servers. The result designates which
790 server will receive the request.
791
792 This is used to track user identifiers in requests and ensure
793 that a same user ID will always be sent to the same server as
794 long as no server goes up or down. If no value is found or if
795 the parameter is not found, then a round robin algorithm is
796 applied. Note that this algorithm may only be used in an HTTP
797 backend. This algorithm is static, which means that changing a
798 server's weight on the fly will have no effect.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100799
800 <arguments> is an optional list of arguments which may be needed by some
Marek Majkowski9c30fc12008-04-27 23:25:55 +0200801 algorithms. Right now, only "url_param" and "uri" support an
802 optional argument.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +0200803
Marek Majkowski9c30fc12008-04-27 23:25:55 +0200804 balance uri [len <len>] [depth <depth>]
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +0200805 balance url_param <param> [check_post [<max_wait>]]
Willy Tarreau0ba27502007-12-24 16:55:16 +0100806
807 The definition of the load balancing algorithm is mandatory for a backend
808 and limited to one per backend.
809
810 Examples :
811 balance roundrobin
812 balance url_param userid
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +0200813 balance url_param session_id check_post 64
814
815 Note: the following caveats and limitations on using the "check_post"
816 extension with "url_param" must be considered :
817
818 - all POST requests are eligable for consideration, because there is no way
819 to determine if the parameters will be found in the body or entity which
820 may contain binary data. Therefore another method may be required to
821 restrict consideration of POST requests that have no URL parameters in
822 the body. (see acl reqideny http_end)
823
824 - using a <max_wait> value larger than the request buffer size does not
825 make sense and is useless. The buffer size is set at build time, and
826 defaults to 16 kB.
827
828 - Content-Encoding is not supported, the parameter search will probably
829 fail; and load balancing will fall back to Round Robin.
830
831 - Expect: 100-continue is not supported, load balancing will fall back to
832 Round Robin.
833
834 - Transfer-Encoding (RFC2616 3.6.1) is only supported in the first chunk.
835 If the entire parameter value is not present in the first chunk, the
836 selection of server is undefined (actually, defined by how little
837 actually appeared in the first chunk).
838
839 - This feature does not support generation of a 100, 411 or 501 response.
840
841 - In some cases, requesting "check_post" MAY attempt to scan the entire
842 contents of a message body. Scaning normally terminates when linear
843 white space or control characters are found, indicating the end of what
844 might be a URL parameter list. This is probably not a concern with SGML
845 type message bodies.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100846
847 See also : "dispatch", "cookie", "appsession", "transparent" and "http_proxy".
848
849
850bind [<address>]:<port> [, ...]
Willy Tarreaub1e52e82008-01-13 14:49:51 +0100851bind [<address>]:<port> [, ...] transparent
Willy Tarreau0ba27502007-12-24 16:55:16 +0100852 Define one or several listening addresses and/or ports in a frontend.
853 May be used in sections : defaults | frontend | listen | backend
854 no | yes | yes | no
855 Arguments :
Willy Tarreaub1e52e82008-01-13 14:49:51 +0100856 <address> is optional and can be a host name, an IPv4 address, an IPv6
857 address, or '*'. It designates the address the frontend will
858 listen on. If unset, all IPv4 addresses of the system will be
859 listened on. The same will apply for '*' or the system's
860 special address "0.0.0.0".
861
862 <port> is the TCP port number the proxy will listen on. The port is
863 mandatory. Note that in the case of an IPv6 address, the port
864 is always the number after the last colon (':').
Willy Tarreau0ba27502007-12-24 16:55:16 +0100865
Willy Tarreaub1e52e82008-01-13 14:49:51 +0100866 transparent is an optional keyword which is supported only on certain
867 Linux kernels. It indicates that the addresses will be bound
868 even if they do not belong to the local machine. Any packet
869 targetting any of these addresses will be caught just as if
870 the address was locally configured. This normally requires
871 that IP forwarding is enabled. Caution! do not use this with
872 the default address '*', as it would redirect any traffic for
873 the specified port. This keyword is available only when
874 HAProxy is built with USE_LINUX_TPROXY=1.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100875
876 It is possible to specify a list of address:port combinations delimited by
877 commas. The frontend will then listen on all of these addresses. There is no
878 fixed limit to the number of addresses and ports which can be listened on in
879 a frontend, as well as there is no limit to the number of "bind" statements
880 in a frontend.
881
882 Example :
883 listen http_proxy
884 bind :80,:443
885 bind 10.0.0.1:10080,10.0.0.1:10443
886
887 See also : "source".
888
889
890block { if | unless } <condition>
891 Block a layer 7 request if/unless a condition is matched
892 May be used in sections : defaults | frontend | listen | backend
893 no | yes | yes | yes
894
895 The HTTP request will be blocked very early in the layer 7 processing
896 if/unless <condition> is matched. A 403 error will be returned if the request
897 is blocked. The condition has to reference ACLs (see section 2.3). This is
898 typically used to deny access to certain sensible resources if some
899 conditions are met or not met. There is no fixed limit to the number of
900 "block" statements per instance.
901
902 Example:
903 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
904 acl invalid_src src_port 0:1023
905 acl local_dst hdr(host) -i localhost
906 block if invalid_src || local_dst
907
908 See section 2.3 about ACL usage.
909
910
911capture cookie <name> len <length>
912 Capture and log a cookie in the request and in the response.
913 May be used in sections : defaults | frontend | listen | backend
914 no | yes | yes | no
915 Arguments :
916 <name> is the beginning of the name of the cookie to capture. In order
917 to match the exact name, simply suffix the name with an equal
918 sign ('='). The full name will appear in the logs, which is
919 useful with application servers which adjust both the cookie name
920 and value (eg: ASPSESSIONXXXXX).
921
922 <length> is the maximum number of characters to report in the logs, which
923 include the cookie name, the equal sign and the value, all in the
924 standard "name=value" form. The string will be truncated on the
925 right if it exceeds <length>.
926
927 Only the first cookie is captured. Both the "cookie" request headers and the
928 "set-cookie" response headers are monitored. This is particularly useful to
929 check for application bugs causing session crossing or stealing between
930 users, because generally the user's cookies can only change on a login page.
931
932 When the cookie was not presented by the client, the associated log column
933 will report "-". When a request does not cause a cookie to be assigned by the
934 server, a "-" is reported in the response column.
935
936 The capture is performed in the frontend only because it is necessary that
937 the log format does not change for a given frontend depending on the
938 backends. This may change in the future. Note that there can be only one
939 "capture cookie" statement in a frontend. The maximum capture length is
940 configured in the souces by default to 64 characters. It is not possible to
941 specify a capture in a "defaults" section.
942
943 Example:
944 capture cookie ASPSESSION len 32
945
946 See also : "capture request header", "capture response header" as well as
Willy Tarreauced27012008-01-17 20:35:34 +0100947 section 2.6 about logging.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100948
949
950capture request header <name> len <length>
951 Capture and log the first occurrence of the specified request header.
952 May be used in sections : defaults | frontend | listen | backend
953 no | yes | yes | no
954 Arguments :
955 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +0100956 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +0100957 appear in the requests, with the first letter of each word in
958 upper case. The header name will not appear in the logs, only the
959 value is reported, but the position in the logs is respected.
960
961 <length> is the maximum number of characters to extract from the value and
962 report in the logs. The string will be truncated on the right if
963 it exceeds <length>.
964
965 Only the first value of the first occurrence of the header is captured. The
966 value will be added to the logs between braces ('{}'). If multiple headers
967 are captured, they will be delimited by a vertical bar ('|') and will appear
968 in the same order they were declared in the configuration. Common uses for
969 request header captures include the "Host" field in virtual hosting
970 environments, the "Content-length" when uploads are supported, "User-agent"
971 to quickly differenciate between real users and robots, and "X-Forwarded-For"
972 in proxied environments to find where the request came from.
973
974 There is no limit to the number of captured request headers, but each capture
975 is limited to 64 characters. In order to keep log format consistent for a
976 same frontend, header captures can only be declared in a frontend. It is not
977 possible to specify a capture in a "defaults" section.
978
979 Example:
980 capture request header Host len 15
981 capture request header X-Forwarded-For len 15
982 capture request header Referrer len 15
983
Willy Tarreauced27012008-01-17 20:35:34 +0100984 See also : "capture cookie", "capture response header" as well as section 2.6
Willy Tarreau0ba27502007-12-24 16:55:16 +0100985 about logging.
986
987
988capture response header <name> len <length>
989 Capture and log the first occurrence of the specified response header.
990 May be used in sections : defaults | frontend | listen | backend
991 no | yes | yes | no
992 Arguments :
993 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +0100994 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +0100995 appear in the response, with the first letter of each word in
996 upper case. The header name will not appear in the logs, only the
997 value is reported, but the position in the logs is respected.
998
999 <length> is the maximum number of characters to extract from the value and
1000 report in the logs. The string will be truncated on the right if
1001 it exceeds <length>.
1002
1003 Only the first value of the first occurrence of the header is captured. The
1004 result will be added to the logs between braces ('{}') after the captured
1005 request headers. If multiple headers are captured, they will be delimited by
1006 a vertical bar ('|') and will appear in the same order they were declared in
1007 the configuration. Common uses for response header captures include the
1008 "Content-length" header which indicates how many bytes are expected to be
1009 returned, the "Location" header to track redirections.
1010
1011 There is no limit to the number of captured response headers, but each
1012 capture is limited to 64 characters. In order to keep log format consistent
1013 for a same frontend, header captures can only be declared in a frontend. It
1014 is not possible to specify a capture in a "defaults" section.
1015
1016 Example:
1017 capture response header Content-length len 9
1018 capture response header Location len 15
1019
Willy Tarreauced27012008-01-17 20:35:34 +01001020 See also : "capture cookie", "capture request header" as well as section 2.6
Willy Tarreau0ba27502007-12-24 16:55:16 +01001021 about logging.
1022
1023
1024clitimeout <timeout>
1025 Set the maximum inactivity time on the client side.
1026 May be used in sections : defaults | frontend | listen | backend
1027 yes | yes | yes | no
1028 Arguments :
1029 <timeout> is the timeout value is specified in milliseconds by default, but
1030 can be in any other unit if the number is suffixed by the unit,
1031 as explained at the top of this document.
1032
1033 The inactivity timeout applies when the client is expected to acknowledge or
1034 send data. In HTTP mode, this timeout is particularly important to consider
1035 during the first phase, when the client sends the request, and during the
1036 response while it is reading data sent by the server. The value is specified
1037 in milliseconds by default, but can be in any other unit if the number is
1038 suffixed by the unit, as specified at the top of this document. In TCP mode
1039 (and to a lesser extent, in HTTP mode), it is highly recommended that the
1040 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001041 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01001042 losses by specifying timeouts that are slightly above multiples of 3 seconds
1043 (eg: 4 or 5 seconds).
1044
1045 This parameter is specific to frontends, but can be specified once for all in
1046 "defaults" sections. This is in fact one of the easiest solutions not to
1047 forget about it. An unspecified timeout results in an infinite timeout, which
1048 is not recommended. Such a usage is accepted and works but reports a warning
1049 during startup because it may results in accumulation of expired sessions in
1050 the system if the system's timeouts are not configured either.
1051
1052 This parameter is provided for compatibility but is currently deprecated.
1053 Please use "timeout client" instead.
1054
Willy Tarreau036fae02008-01-06 13:24:40 +01001055 See also : "timeout client", "timeout http-request", "timeout server", and
1056 "srvtimeout".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001057
1058
1059contimeout <timeout>
1060 Set the maximum time to wait for a connection attempt to a server to succeed.
1061 May be used in sections : defaults | frontend | listen | backend
1062 yes | no | yes | yes
1063 Arguments :
1064 <timeout> is the timeout value is specified in milliseconds by default, but
1065 can be in any other unit if the number is suffixed by the unit,
1066 as explained at the top of this document.
1067
1068 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001069 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreau0ba27502007-12-24 16:55:16 +01001070 cover one or several TCP packet losses by specifying timeouts that are
1071 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
1072 connect timeout also presets the queue timeout to the same value if this one
1073 has not been specified. Historically, the contimeout was also used to set the
1074 tarpit timeout in a listen section, which is not possible in a pure frontend.
1075
1076 This parameter is specific to backends, but can be specified once for all in
1077 "defaults" sections. This is in fact one of the easiest solutions not to
1078 forget about it. An unspecified timeout results in an infinite timeout, which
1079 is not recommended. Such a usage is accepted and works but reports a warning
1080 during startup because it may results in accumulation of failed sessions in
1081 the system if the system's timeouts are not configured either.
1082
1083 This parameter is provided for backwards compatibility but is currently
1084 deprecated. Please use "timeout connect", "timeout queue" or "timeout tarpit"
1085 instead.
1086
1087 See also : "timeout connect", "timeout queue", "timeout tarpit",
1088 "timeout server", "contimeout".
1089
1090
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02001091cookie <name> [ rewrite|insert|prefix ] [ indirect ] [ nocache ] [ postonly ] [domain <domain>]
Willy Tarreau0ba27502007-12-24 16:55:16 +01001092 Enable cookie-based persistence in a backend.
1093 May be used in sections : defaults | frontend | listen | backend
1094 yes | no | yes | yes
1095 Arguments :
1096 <name> is the name of the cookie which will be monitored, modified or
1097 inserted in order to bring persistence. This cookie is sent to
1098 the client via a "Set-Cookie" header in the response, and is
1099 brought back by the client in a "Cookie" header in all requests.
1100 Special care should be taken to choose a name which does not
1101 conflict with any likely application cookie. Also, if the same
1102 backends are subject to be used by the same clients (eg:
1103 HTTP/HTTPS), care should be taken to use different cookie names
1104 between all backends if persistence between them is not desired.
1105
1106 rewrite This keyword indicates that the cookie will be provided by the
1107 server and that haproxy will have to modify its value to set the
1108 server's identifier in it. This mode is handy when the management
1109 of complex combinations of "Set-cookie" and "Cache-control"
1110 headers is left to the application. The application can then
1111 decide whether or not it is appropriate to emit a persistence
1112 cookie. Since all responses should be monitored, this mode only
1113 works in HTTP close mode. Unless the application behaviour is
1114 very complex and/or broken, it is advised not to start with this
1115 mode for new deployments. This keyword is incompatible with
1116 "insert" and "prefix".
1117
1118 insert This keyword indicates that the persistence cookie will have to
1119 be inserted by haproxy in the responses. If the server emits a
1120 cookie with the same name, it will be replaced anyway. For this
1121 reason, this mode can be used to upgrade existing configurations
1122 running in the "rewrite" mode. The cookie will only be a session
1123 cookie and will not be stored on the client's disk. Due to
1124 caching effects, it is generally wise to add the "indirect" and
1125 "nocache" or "postonly" keywords (see below). The "insert"
1126 keyword is not compatible with "rewrite" and "prefix".
1127
1128 prefix This keyword indicates that instead of relying on a dedicated
1129 cookie for the persistence, an existing one will be completed.
1130 This may be needed in some specific environments where the client
1131 does not support more than one single cookie and the application
1132 already needs it. In this case, whenever the server sets a cookie
1133 named <name>, it will be prefixed with the server's identifier
1134 and a delimiter. The prefix will be removed from all client
1135 requests so that the server still finds the cookie it emitted.
1136 Since all requests and responses are subject to being modified,
1137 this mode requires the HTTP close mode. The "prefix" keyword is
1138 not compatible with "rewrite" and "insert".
1139
1140 indirect When this option is specified in insert mode, cookies will only
1141 be added when the server was not reached after a direct access,
1142 which means that only when a server is elected after applying a
1143 load-balancing algorithm, or after a redispatch, then the cookie
1144 will be inserted. If the client has all the required information
1145 to connect to the same server next time, no further cookie will
1146 be inserted. In all cases, when the "indirect" option is used in
1147 insert mode, the cookie is always removed from the requests
1148 transmitted to the server. The persistence mechanism then becomes
1149 totally transparent from the application point of view.
1150
1151 nocache This option is recommended in conjunction with the insert mode
1152 when there is a cache between the client and HAProxy, as it
1153 ensures that a cacheable response will be tagged non-cacheable if
1154 a cookie needs to be inserted. This is important because if all
1155 persistence cookies are added on a cacheable home page for
1156 instance, then all customers will then fetch the page from an
1157 outer cache and will all share the same persistence cookie,
1158 leading to one server receiving much more traffic than others.
1159 See also the "insert" and "postonly" options.
1160
1161 postonly This option ensures that cookie insertion will only be performed
1162 on responses to POST requests. It is an alternative to the
1163 "nocache" option, because POST responses are not cacheable, so
1164 this ensures that the persistence cookie will never get cached.
1165 Since most sites do not need any sort of persistence before the
1166 first POST which generally is a login request, this is a very
1167 efficient method to optimize caching without risking to find a
1168 persistence cookie in the cache.
1169 See also the "insert" and "nocache" options.
1170
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02001171 domain This option allows to specify the domain at which a cookie is
1172 inserted. It requires exactly one paramater: a valid domain
1173 name.
1174
Willy Tarreau0ba27502007-12-24 16:55:16 +01001175 There can be only one persistence cookie per HTTP backend, and it can be
1176 declared in a defaults section. The value of the cookie will be the value
1177 indicated after the "cookie" keyword in a "server" statement. If no cookie
1178 is declared for a given server, the cookie is not set.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001179
Willy Tarreau0ba27502007-12-24 16:55:16 +01001180 Examples :
1181 cookie JSESSIONID prefix
1182 cookie SRV insert indirect nocache
1183 cookie SRV insert postonly indirect
1184
1185 See also : "appsession", "balance source", "capture cookie", "server".
1186
1187
1188default_backend <backend>
1189 Specify the backend to use when no "use_backend" rule has been matched.
1190 May be used in sections : defaults | frontend | listen | backend
1191 yes | yes | yes | no
1192 Arguments :
1193 <backend> is the name of the backend to use.
1194
1195 When doing content-switching between frontend and backends using the
1196 "use_backend" keyword, it is often useful to indicate which backend will be
1197 used when no rule has matched. It generally is the dynamic backend which
1198 will catch all undetermined requests.
1199
1200 The "default_backend" keyword is also supported in TCP mode frontends to
1201 facilitate the ordering of configurations in frontends and backends,
1202 eventhough it does not make much more sense in case of TCP due to the fact
1203 that use_backend currently does not work in TCP mode.
1204
1205 Example :
1206
1207 use_backend dynamic if url_dyn
1208 use_backend static if url_css url_img extension_img
1209 default_backend dynamic
1210
Willy Tarreau2769aa02007-12-27 18:26:09 +01001211 See also : "use_backend", "reqsetbe", "reqisetbe"
1212
Willy Tarreau0ba27502007-12-24 16:55:16 +01001213
1214disabled
1215 Disable a proxy, frontend or backend.
1216 May be used in sections : defaults | frontend | listen | backend
1217 yes | yes | yes | yes
1218 Arguments : none
1219
1220 The "disabled" keyword is used to disable an instance, mainly in order to
1221 liberate a listening port or to temporarily disable a service. The instance
1222 will still be created and its configuration will be checked, but it will be
1223 created in the "stopped" state and will appear as such in the statistics. It
1224 will not receive any traffic nor will it send any health-checks or logs. It
1225 is possible to disable many instances at once by adding the "disabled"
1226 keyword in a "defaults" section.
1227
1228 See also : "enabled"
1229
1230
1231enabled
1232 Enable a proxy, frontend or backend.
1233 May be used in sections : defaults | frontend | listen | backend
1234 yes | yes | yes | yes
1235 Arguments : none
1236
1237 The "enabled" keyword is used to explicitly enable an instance, when the
1238 defaults has been set to "disabled". This is very rarely used.
1239
1240 See also : "disabled"
1241
1242
1243errorfile <code> <file>
1244 Return a file contents instead of errors generated by HAProxy
1245 May be used in sections : defaults | frontend | listen | backend
1246 yes | yes | yes | yes
1247 Arguments :
1248 <code> is the HTTP status code. Currently, HAProxy is capable of
1249 generating codes 400, 403, 408, 500, 502, 503, and 504.
1250
1251 <file> designates a file containing the full HTTP response. It is
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001252 recommended to follow the common practice of appending ".http" to
Willy Tarreau0ba27502007-12-24 16:55:16 +01001253 the filename so that people do not confuse the response with HTML
1254 error pages.
1255
1256 It is important to understand that this keyword is not meant to rewrite
1257 errors returned by the server, but errors detected and returned by HAProxy.
1258 This is why the list of supported errors is limited to a small set.
1259
1260 The files are returned verbatim on the TCP socket. This allows any trick such
1261 as redirections to another URL or site, as well as tricks to clean cookies,
1262 force enable or disable caching, etc... The package provides default error
1263 files returning the same contents as default errors.
1264
1265 The files are read at the same time as the configuration and kept in memory.
1266 For this reason, the errors continue to be returned even when the process is
1267 chrooted, and no file change is considered while the process is running. A
Willy Tarreauc27debf2008-01-06 08:57:02 +01001268 simple method for developing those files consists in associating them to the
Willy Tarreau0ba27502007-12-24 16:55:16 +01001269 403 status code and interrogating a blocked URL.
1270
1271 See also : "errorloc", "errorloc302", "errorloc303"
1272
Willy Tarreau2769aa02007-12-27 18:26:09 +01001273
1274errorloc <code> <url>
1275errorloc302 <code> <url>
1276 Return an HTTP redirection to a URL instead of errors generated by HAProxy
1277 May be used in sections : defaults | frontend | listen | backend
1278 yes | yes | yes | yes
1279 Arguments :
1280 <code> is the HTTP status code. Currently, HAProxy is capable of
1281 generating codes 400, 403, 408, 500, 502, 503, and 504.
1282
1283 <url> it is the exact contents of the "Location" header. It may contain
1284 either a relative URI to an error page hosted on the same site,
1285 or an absolute URI designating an error page on another site.
1286 Special care should be given to relative URIs to avoid redirect
1287 loops if the URI itself may generate the same error (eg: 500).
1288
1289 It is important to understand that this keyword is not meant to rewrite
1290 errors returned by the server, but errors detected and returned by HAProxy.
1291 This is why the list of supported errors is limited to a small set.
1292
1293 Note that both keyword return the HTTP 302 status code, which tells the
1294 client to fetch the designated URL using the same HTTP method. This can be
1295 quite problematic in case of non-GET methods such as POST, because the URL
1296 sent to the client might not be allowed for something other than GET. To
1297 workaround this problem, please use "errorloc303" which send the HTTP 303
1298 status code, indicating to the client that the URL must be fetched with a GET
1299 request.
1300
1301 See also : "errorfile", "errorloc303"
1302
1303
1304errorloc303 <code> <url>
1305 Return an HTTP redirection to a URL instead of errors generated by HAProxy
1306 May be used in sections : defaults | frontend | listen | backend
1307 yes | yes | yes | yes
1308 Arguments :
1309 <code> is the HTTP status code. Currently, HAProxy is capable of
1310 generating codes 400, 403, 408, 500, 502, 503, and 504.
1311
1312 <url> it is the exact contents of the "Location" header. It may contain
1313 either a relative URI to an error page hosted on the same site,
1314 or an absolute URI designating an error page on another site.
1315 Special care should be given to relative URIs to avoid redirect
1316 loops if the URI itself may generate the same error (eg: 500).
1317
1318 It is important to understand that this keyword is not meant to rewrite
1319 errors returned by the server, but errors detected and returned by HAProxy.
1320 This is why the list of supported errors is limited to a small set.
1321
1322 Note that both keyword return the HTTP 303 status code, which tells the
1323 client to fetch the designated URL using the same HTTP GET method. This
1324 solves the usual problems associated with "errorloc" and the 302 code. It is
1325 possible that some very old browsers designed before HTTP/1.1 do not support
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001326 it, but no such problem has been reported till now.
Willy Tarreau2769aa02007-12-27 18:26:09 +01001327
1328 See also : "errorfile", "errorloc", "errorloc302"
1329
1330
1331fullconn <conns>
1332 Specify at what backend load the servers will reach their maxconn
1333 May be used in sections : defaults | frontend | listen | backend
1334 yes | no | yes | yes
1335 Arguments :
1336 <conns> is the number of connections on the backend which will make the
1337 servers use the maximal number of connections.
1338
Willy Tarreau198a7442008-01-17 12:05:32 +01001339 When a server has a "maxconn" parameter specified, it means that its number
Willy Tarreau2769aa02007-12-27 18:26:09 +01001340 of concurrent connections will never go higher. Additionally, if it has a
Willy Tarreau198a7442008-01-17 12:05:32 +01001341 "minconn" parameter, it indicates a dynamic limit following the backend's
Willy Tarreau2769aa02007-12-27 18:26:09 +01001342 load. The server will then always accept at least <minconn> connections,
1343 never more than <maxconn>, and the limit will be on the ramp between both
1344 values when the backend has less than <conns> concurrent connections. This
1345 makes it possible to limit the load on the servers during normal loads, but
1346 push it further for important loads without overloading the servers during
1347 exceptionnal loads.
1348
1349 Example :
1350 # The servers will accept between 100 and 1000 concurrent connections each
1351 # and the maximum of 1000 will be reached when the backend reaches 10000
1352 # connections.
1353 backend dynamic
1354 fullconn 10000
1355 server srv1 dyn1:80 minconn 100 maxconn 1000
1356 server srv2 dyn2:80 minconn 100 maxconn 1000
1357
1358 See also : "maxconn", "server"
1359
1360
1361grace <time>
1362 Maintain a proxy operational for some time after a soft stop
1363 May be used in sections : defaults | frontend | listen | backend
1364 no | yes | yes | yes
1365 Arguments :
1366 <time> is the time (by default in milliseconds) for which the instance
1367 will remain operational with the frontend sockets still listening
1368 when a soft-stop is received via the SIGUSR1 signal.
1369
1370 This may be used to ensure that the services disappear in a certain order.
1371 This was designed so that frontends which are dedicated to monitoring by an
1372 external equipement fail immediately while other ones remain up for the time
1373 needed by the equipment to detect the failure.
1374
1375 Note that currently, there is very little benefit in using this parameter,
1376 and it may in fact complicate the soft-reconfiguration process more than
1377 simplify it.
1378
Willy Tarreau0ba27502007-12-24 16:55:16 +01001379
1380http-check disable-on-404
1381 Enable a maintenance mode upon HTTP/404 response to health-checks
1382 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau2769aa02007-12-27 18:26:09 +01001383 yes | no | yes | yes
Willy Tarreau0ba27502007-12-24 16:55:16 +01001384 Arguments : none
1385
1386 When this option is set, a server which returns an HTTP code 404 will be
1387 excluded from further load-balancing, but will still receive persistent
1388 connections. This provides a very convenient method for Web administrators
1389 to perform a graceful shutdown of their servers. It is also important to note
1390 that a server which is detected as failed while it was in this mode will not
1391 generate an alert, just a notice. If the server responds 2xx or 3xx again, it
1392 will immediately be reinserted into the farm. The status on the stats page
1393 reports "NOLB" for a server in this mode. It is important to note that this
1394 option only works in conjunction with the "httpchk" option.
1395
Willy Tarreau2769aa02007-12-27 18:26:09 +01001396 See also : "option httpchk"
1397
1398
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01001399id <value>
1400 Set a persistent value for proxy ID. Must be unique and larger than 1000, as
1401 smaller values are reserved for auto-assigned ids.
1402
1403
Willy Tarreau2769aa02007-12-27 18:26:09 +01001404log global
1405log <address> <facility> [<level>]
1406 Enable per-instance logging of events and traffic.
1407 May be used in sections : defaults | frontend | listen | backend
1408 yes | yes | yes | yes
1409 Arguments :
1410 global should be used when the instance's logging parameters are the
1411 same as the global ones. This is the most common usage. "global"
1412 replaces <address>, <facility> and <level> with those of the log
1413 entries found in the "global" section. Only one "log global"
1414 statement may be used per instance, and this form takes no other
1415 parameter.
1416
1417 <address> indicates where to send the logs. It takes the same format as
1418 for the "global" section's logs, and can be one of :
1419
1420 - An IPv4 address optionally followed by a colon (':') and a UDP
1421 port. If no port is specified, 514 is used by default (the
1422 standard syslog port).
1423
1424 - A filesystem path to a UNIX domain socket, keeping in mind
1425 considerations for chroot (be sure the path is accessible
1426 inside the chroot) and uid/gid (be sure the path is
1427 appropriately writeable).
1428
1429 <facility> must be one of the 24 standard syslog facilities :
1430
1431 kern user mail daemon auth syslog lpr news
1432 uucp cron auth2 ftp ntp audit alert cron2
1433 local0 local1 local2 local3 local4 local5 local6 local7
1434
1435 <level> is optional and can be specified to filter outgoing messages. By
1436 default, all messages are sent. If a level is specified, only
1437 messages with a severity at least as important as this level
1438 will be sent. 8 levels are known :
1439
1440 emerg alert crit err warning notice info debug
1441
1442 Note that up to two "log" entries may be specified per instance. However, if
1443 "log global" is used and if the "global" section already contains 2 log
1444 entries, then additional log entries will be ignored.
1445
1446 Also, it is important to keep in mind that it is the frontend which decides
1447 what to log, and that in case of content switching, the log entries from the
1448 backend will be ignored.
1449
1450 Example :
1451 log global
1452 log 127.0.0.1:514 local0 notice
1453
1454
1455maxconn <conns>
1456 Fix the maximum number of concurrent connections on a frontend
1457 May be used in sections : defaults | frontend | listen | backend
1458 yes | yes | yes | no
1459 Arguments :
1460 <conns> is the maximum number of concurrent connections the frontend will
1461 accept to serve. Excess connections will be queued by the system
1462 in the socket's listen queue and will be served once a connection
1463 closes.
1464
1465 If the system supports it, it can be useful on big sites to raise this limit
1466 very high so that haproxy manages connection queues, instead of leaving the
1467 clients with unanswered connection attempts. This value should not exceed the
1468 global maxconn. Also, keep in mind that a connection contains two buffers
1469 of 8kB each, as well as some other data resulting in about 17 kB of RAM being
1470 consumed per established connection. That means that a medium system equipped
1471 with 1GB of RAM can withstand around 40000-50000 concurrent connections if
1472 properly tuned.
1473
1474 Also, when <conns> is set to large values, it is possible that the servers
1475 are not sized to accept such loads, and for this reason it is generally wise
1476 to assign them some reasonable connection limits.
1477
1478 See also : "server", global section's "maxconn", "fullconn"
1479
1480
1481mode { tcp|http|health }
1482 Set the running mode or protocol of the instance
1483 May be used in sections : defaults | frontend | listen | backend
1484 yes | yes | yes | yes
1485 Arguments :
1486 tcp The instance will work in pure TCP mode. A full-duplex connection
1487 will be established between clients and servers, and no layer 7
1488 examination will be performed. This is the default mode. It
1489 should be used for SSL, SSH, SMTP, ...
1490
1491 http The instance will work in HTTP mode. The client request will be
1492 analyzed in depth before connecting to any server. Any request
1493 which is not RFC-compliant will be rejected. Layer 7 filtering,
1494 processing and switching will be possible. This is the mode which
1495 brings HAProxy most of its value.
1496
1497 health The instance will work in "health" mode. It will just reply "OK"
1498 to incoming connections and close the connection. Nothing will be
1499 logged. This mode is used to reply to external components health
1500 checks. This mode is deprecated and should not be used anymore as
1501 it is possible to do the same and even better by combining TCP or
1502 HTTP modes with the "monitor" keyword.
1503
1504 When doing content switching, it is mandatory that the frontend and the
1505 backend are in the same mode (generally HTTP), otherwise the configuration
1506 will be refused.
1507
1508 Example :
1509 defaults http_instances
1510 mode http
1511
1512 See also : "monitor", "monitor-net"
1513
Willy Tarreau0ba27502007-12-24 16:55:16 +01001514
1515monitor fail [if | unless] <condition>
Willy Tarreau2769aa02007-12-27 18:26:09 +01001516 Add a condition to report a failure to a monitor HTTP request.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001517 May be used in sections : defaults | frontend | listen | backend
1518 no | yes | yes | no
Willy Tarreau0ba27502007-12-24 16:55:16 +01001519 Arguments :
1520 if <cond> the monitor request will fail if the condition is satisfied,
1521 and will succeed otherwise. The condition should describe a
1522 combinated test which must induce a failure if all conditions
1523 are met, for instance a low number of servers both in a
1524 backend and its backup.
1525
1526 unless <cond> the monitor request will succeed only if the condition is
1527 satisfied, and will fail otherwise. Such a condition may be
1528 based on a test on the presence of a minimum number of active
1529 servers in a list of backends.
1530
1531 This statement adds a condition which can force the response to a monitor
1532 request to report a failure. By default, when an external component queries
1533 the URI dedicated to monitoring, a 200 response is returned. When one of the
1534 conditions above is met, haproxy will return 503 instead of 200. This is
1535 very useful to report a site failure to an external component which may base
1536 routing advertisements between multiple sites on the availability reported by
1537 haproxy. In this case, one would rely on an ACL involving the "nbsrv"
Willy Tarreau2769aa02007-12-27 18:26:09 +01001538 criterion. Note that "monitor fail" only works in HTTP mode.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001539
1540 Example:
1541 frontend www
Willy Tarreau2769aa02007-12-27 18:26:09 +01001542 mode http
Willy Tarreau0ba27502007-12-24 16:55:16 +01001543 acl site_dead nbsrv(dynamic) lt 2
1544 acl site_dead nbsrv(static) lt 2
1545 monitor-uri /site_alive
1546 monitor fail if site_dead
1547
Willy Tarreau2769aa02007-12-27 18:26:09 +01001548 See also : "monitor-net", "monitor-uri"
1549
1550
1551monitor-net <source>
1552 Declare a source network which is limited to monitor requests
1553 May be used in sections : defaults | frontend | listen | backend
1554 yes | yes | yes | no
1555 Arguments :
1556 <source> is the source IPv4 address or network which will only be able to
1557 get monitor responses to any request. It can be either an IPv4
1558 address, a host name, or an address followed by a slash ('/')
1559 followed by a mask.
1560
1561 In TCP mode, any connection coming from a source matching <source> will cause
1562 the connection to be immediately closed without any log. This allows another
1563 equipement to probe the port and verify that it is still listening, without
1564 forwarding the connection to a remote server.
1565
1566 In HTTP mode, a connection coming from a source matching <source> will be
1567 accepted, the following response will be sent without waiting for a request,
1568 then the connection will be closed : "HTTP/1.0 200 OK". This is normally
1569 enough for any front-end HTTP probe to detect that the service is UP and
1570 running without forwarding the request to a backend server.
1571
1572 Monitor requests are processed very early. It is not possible to block nor
1573 divert them using ACLs. They cannot be logged either, and it is the intended
1574 purpose. They are only used to report HAProxy's health to an upper component,
1575 nothing more. Right now, it is not possible to set failure conditions on
1576 requests caught by "monitor-net".
1577
1578 Example :
1579 # addresses .252 and .253 are just probing us.
1580 frontend www
1581 monitor-net 192.168.0.252/31
1582
1583 See also : "monitor fail", "monitor-uri"
1584
1585
1586monitor-uri <uri>
1587 Intercept a URI used by external components' monitor requests
1588 May be used in sections : defaults | frontend | listen | backend
1589 yes | yes | yes | no
1590 Arguments :
1591 <uri> is the exact URI which we want to intercept to return HAProxy's
1592 health status instead of forwarding the request.
1593
1594 When an HTTP request referencing <uri> will be received on a frontend,
1595 HAProxy will not forward it nor log it, but instead will return either
1596 "HTTP/1.0 200 OK" or "HTTP/1.0 503 Service unavailable", depending on failure
1597 conditions defined with "monitor fail". This is normally enough for any
1598 front-end HTTP probe to detect that the service is UP and running without
1599 forwarding the request to a backend server. Note that the HTTP method, the
1600 version and all headers are ignored, but the request must at least be valid
1601 at the HTTP level. This keyword may only be used with an HTTP-mode frontend.
1602
1603 Monitor requests are processed very early. It is not possible to block nor
1604 divert them using ACLs. They cannot be logged either, and it is the intended
1605 purpose. They are only used to report HAProxy's health to an upper component,
1606 nothing more. However, it is possible to add any number of conditions using
1607 "monitor fail" and ACLs so that the result can be adjusted to whatever check
1608 can be imagined (most often the number of available servers in a backend).
1609
1610 Example :
1611 # Use /haproxy_test to report haproxy's status
1612 frontend www
1613 mode http
1614 monitor-uri /haproxy_test
1615
1616 See also : "monitor fail", "monitor-net"
1617
Willy Tarreau0ba27502007-12-24 16:55:16 +01001618
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001619option abortonclose
1620no option abortonclose
1621 Enable or disable early dropping of aborted requests pending in queues.
1622 May be used in sections : defaults | frontend | listen | backend
1623 yes | no | yes | yes
1624 Arguments : none
1625
1626 In presence of very high loads, the servers will take some time to respond.
1627 The per-instance connection queue will inflate, and the response time will
1628 increase respective to the size of the queue times the average per-session
1629 response time. When clients will wait for more than a few seconds, they will
Willy Tarreau198a7442008-01-17 12:05:32 +01001630 often hit the "STOP" button on their browser, leaving a useless request in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001631 the queue, and slowing down other users, and the servers as well, because the
1632 request will eventually be served, then aborted at the first error
1633 encountered while delivering the response.
1634
1635 As there is no way to distinguish between a full STOP and a simple output
1636 close on the client side, HTTP agents should be conservative and consider
1637 that the client might only have closed its output channel while waiting for
1638 the response. However, this introduces risks of congestion when lots of users
1639 do the same, and is completely useless nowadays because probably no client at
1640 all will close the session while waiting for the response. Some HTTP agents
1641 support this behaviour (Squid, Apache, HAProxy), and others do not (TUX, most
1642 hardware-based load balancers). So the probability for a closed input channel
Willy Tarreau198a7442008-01-17 12:05:32 +01001643 to represent a user hitting the "STOP" button is close to 100%, and the risk
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001644 of being the single component to break rare but valid traffic is extremely
1645 low, which adds to the temptation to be able to abort a session early while
1646 still not served and not pollute the servers.
1647
1648 In HAProxy, the user can choose the desired behaviour using the option
1649 "abortonclose". By default (without the option) the behaviour is HTTP
1650 compliant and aborted requests will be served. But when the option is
1651 specified, a session with an incoming channel closed will be aborted while
1652 it is still possible, either pending in the queue for a connection slot, or
1653 during the connection establishment if the server has not yet acknowledged
1654 the connection request. This considerably reduces the queue size and the load
1655 on saturated servers when users are tempted to click on STOP, which in turn
1656 reduces the response time for other users.
1657
1658 If this option has been enabled in a "defaults" section, it can be disabled
1659 in a specific instance by prepending the "no" keyword before it.
1660
1661 See also : "timeout queue" and server's "maxconn" and "maxqueue" parameters
1662
1663
1664option allbackups
1665no option allbackups
1666 Use either all backup servers at a time or only the first one
1667 May be used in sections : defaults | frontend | listen | backend
1668 yes | no | yes | yes
1669 Arguments : none
1670
1671 By default, the first operational backup server gets all traffic when normal
1672 servers are all down. Sometimes, it may be preferred to use multiple backups
1673 at once, because one will not be enough. When "option allbackups" is enabled,
1674 the load balancing will be performed among all backup servers when all normal
1675 ones are unavailable. The same load balancing algorithm will be used and the
1676 servers' weights will be respected. Thus, there will not be any priority
1677 order between the backup servers anymore.
1678
1679 This option is mostly used with static server farms dedicated to return a
1680 "sorry" page when an application is completely offline.
1681
1682 If this option has been enabled in a "defaults" section, it can be disabled
1683 in a specific instance by prepending the "no" keyword before it.
1684
1685
1686option checkcache
1687no option checkcache
1688 Analyze all server responses and block requests with cachable cookies
1689 May be used in sections : defaults | frontend | listen | backend
1690 yes | no | yes | yes
1691 Arguments : none
1692
1693 Some high-level frameworks set application cookies everywhere and do not
1694 always let enough control to the developer to manage how the responses should
1695 be cached. When a session cookie is returned on a cachable object, there is a
1696 high risk of session crossing or stealing between users traversing the same
1697 caches. In some situations, it is better to block the response than to let
1698 some sensible session information go in the wild.
1699
1700 The option "checkcache" enables deep inspection of all server responses for
1701 strict compliance with HTTP specification in terms of cachability. It
Willy Tarreau198a7442008-01-17 12:05:32 +01001702 carefully checks "Cache-control", "Pragma" and "Set-cookie" headers in server
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001703 response to check if there's a risk of caching a cookie on a client-side
1704 proxy. When this option is enabled, the only responses which can be delivered
Willy Tarreau198a7442008-01-17 12:05:32 +01001705 to the client are :
1706 - all those without "Set-Cookie" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001707 - all those with a return code other than 200, 203, 206, 300, 301, 410,
Willy Tarreau198a7442008-01-17 12:05:32 +01001708 provided that the server has not set a "Cache-control: public" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001709 - all those that come from a POST request, provided that the server has not
1710 set a 'Cache-Control: public' header ;
1711 - those with a 'Pragma: no-cache' header
1712 - those with a 'Cache-control: private' header
1713 - those with a 'Cache-control: no-store' header
1714 - those with a 'Cache-control: max-age=0' header
1715 - those with a 'Cache-control: s-maxage=0' header
1716 - those with a 'Cache-control: no-cache' header
1717 - those with a 'Cache-control: no-cache="set-cookie"' header
1718 - those with a 'Cache-control: no-cache="set-cookie,' header
1719 (allowing other fields after set-cookie)
1720
1721 If a response doesn't respect these requirements, then it will be blocked
Willy Tarreau198a7442008-01-17 12:05:32 +01001722 just as if it was from an "rspdeny" filter, with an "HTTP 502 bad gateway".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001723 The session state shows "PH--" meaning that the proxy blocked the response
1724 during headers processing. Additionnaly, an alert will be sent in the logs so
1725 that admins are informed that there's something to be fixed.
1726
1727 Due to the high impact on the application, the application should be tested
1728 in depth with the option enabled before going to production. It is also a
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001729 good practice to always activate it during tests, even if it is not used in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001730 production, as it will report potentially dangerous application behaviours.
1731
1732 If this option has been enabled in a "defaults" section, it can be disabled
1733 in a specific instance by prepending the "no" keyword before it.
1734
1735
1736option clitcpka
1737no option clitcpka
1738 Enable or disable the sending of TCP keepalive packets on the client side
1739 May be used in sections : defaults | frontend | listen | backend
1740 yes | yes | yes | no
1741 Arguments : none
1742
1743 When there is a firewall or any session-aware component between a client and
1744 a server, and when the protocol involves very long sessions with long idle
1745 periods (eg: remote desktops), there is a risk that one of the intermediate
1746 components decides to expire a session which has remained idle for too long.
1747
1748 Enabling socket-level TCP keep-alives makes the system regularly send packets
1749 to the other end of the connection, leaving it active. The delay between
1750 keep-alive probes is controlled by the system only and depends both on the
1751 operating system and its tuning parameters.
1752
1753 It is important to understand that keep-alive packets are neither emitted nor
1754 received at the application level. It is only the network stacks which sees
1755 them. For this reason, even if one side of the proxy already uses keep-alives
1756 to maintain its connection alive, those keep-alive packets will not be
1757 forwarded to the other side of the proxy.
1758
1759 Please note that this has nothing to do with HTTP keep-alive.
1760
1761 Using option "clitcpka" enables the emission of TCP keep-alive probes on the
1762 client side of a connection, which should help when session expirations are
1763 noticed between HAProxy and a client.
1764
1765 If this option has been enabled in a "defaults" section, it can be disabled
1766 in a specific instance by prepending the "no" keyword before it.
1767
1768 See also : "option srvtcpka", "option tcpka"
1769
1770
Willy Tarreau0ba27502007-12-24 16:55:16 +01001771option contstats
1772 Enable continuous traffic statistics updates
1773 May be used in sections : defaults | frontend | listen | backend
1774 yes | yes | yes | no
1775 Arguments : none
1776
1777 By default, counters used for statistics calculation are incremented
1778 only when a session finishes. It works quite well when serving small
1779 objects, but with big ones (for example large images or archives) or
1780 with A/V streaming, a graph generated from haproxy counters looks like
1781 a hedgehog. With this option enabled counters get incremented continuously,
1782 during a whole session. Recounting touches a hotpath directly so
1783 it is not enabled by default, as it has small performance impact (~0.5%).
1784
1785
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001786option dontlognull
1787no option dontlognull
1788 Enable or disable logging of null connections
1789 May be used in sections : defaults | frontend | listen | backend
1790 yes | yes | yes | no
1791 Arguments : none
1792
1793 In certain environments, there are components which will regularly connect to
1794 various systems to ensure that they are still alive. It can be the case from
1795 another load balancer as well as from monitoring systems. By default, even a
1796 simple port probe or scan will produce a log. If those connections pollute
1797 the logs too much, it is possible to enable option "dontlognull" to indicate
1798 that a connection on which no data has been transferred will not be logged,
1799 which typically corresponds to those probes.
1800
1801 It is generally recommended not to use this option in uncontrolled
1802 environments (eg: internet), otherwise scans and other malicious activities
1803 would not be logged.
1804
1805 If this option has been enabled in a "defaults" section, it can be disabled
1806 in a specific instance by prepending the "no" keyword before it.
1807
Willy Tarreauced27012008-01-17 20:35:34 +01001808 See also : "log", "monitor-net", "monitor-uri" and section 2.6 about logging.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001809
1810
1811option forceclose
1812no option forceclose
1813 Enable or disable active connection closing after response is transferred.
1814 May be used in sections : defaults | frontend | listen | backend
1815 yes | no | yes | yes
1816 Arguments : none
1817
1818 Some HTTP servers do not necessarily close the connections when they receive
1819 the "Connection: close" set by "option httpclose", and if the client does not
1820 close either, then the connection remains open till the timeout expires. This
1821 causes high number of simultaneous connections on the servers and shows high
1822 global session times in the logs.
1823
1824 When this happens, it is possible to use "option forceclose". It will
1825 actively close the outgoing server channel as soon as the server begins to
1826 reply and only if the request buffer is empty. Note that this should NOT be
1827 used if CONNECT requests are expected between the client and the server. This
1828 option implicitly enables the "httpclose" option.
1829
1830 If this option has been enabled in a "defaults" section, it can be disabled
1831 in a specific instance by prepending the "no" keyword before it.
1832
1833 See also : "option httpclose"
1834
1835
Willy Tarreauc27debf2008-01-06 08:57:02 +01001836option forwardfor [ except <network> ]
1837 Enable insertion of the X-Forwarded-For header to requests sent to servers
1838 May be used in sections : defaults | frontend | listen | backend
1839 yes | yes | yes | yes
1840 Arguments :
1841 <network> is an optional argument used to disable this option for sources
1842 matching <network>
1843
1844 Since HAProxy works in reverse-proxy mode, the servers see its IP address as
1845 their client address. This is sometimes annoying when the client's IP address
1846 is expected in server logs. To solve this problem, the well-known HTTP header
1847 "X-Forwarded-For" may be added by HAProxy to all requests sent to the server.
1848 This header contains a value representing the client's IP address. Since this
1849 header is always appended at the end of the existing header list, the server
1850 must be configured to always use the last occurrence of this header only. See
1851 the server's manual to find how to enable use of this standard header.
1852
1853 Sometimes, a same HAProxy instance may be shared between a direct client
1854 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
1855 used to decrypt HTTPS traffic). It is possible to disable the addition of the
1856 header for a known source address or network by adding the "except" keyword
1857 followed by the network address. In this case, any source IP matching the
1858 network will not cause an addition of this header. Most common uses are with
1859 private networks or 127.0.0.1.
1860
1861 This option may be specified either in the frontend or in the backend. If at
1862 least one of them uses it, the header will be added.
1863
1864 It is important to note that as long as HAProxy does not support keep-alive
1865 connections, only the first request of a connection will receive the header.
1866 For this reason, it is important to ensure that "option httpclose" is set
1867 when using this option.
1868
1869 Example :
1870 # Public HTTP address also used by stunnel on the same machine
1871 frontend www
1872 mode http
1873 option forwardfor except 127.0.0.1 # stunnel already adds the header
1874
1875 See also : "option httpclose"
1876
1877
1878option http_proxy
1879no option http_proxy
1880 Enable or disable plain HTTP proxy mode
1881 May be used in sections : defaults | frontend | listen | backend
1882 yes | yes | yes | yes
1883 Arguments : none
1884
1885 It sometimes happens that people need a pure HTTP proxy which understands
1886 basic proxy requests without caching nor any fancy feature. In this case,
1887 it may be worth setting up an HAProxy instance with the "option http_proxy"
1888 set. In this mode, no server is declared, and the connection is forwarded to
1889 the IP address and port found in the URL after the "http://" scheme.
1890
1891 No host address resolution is performed, so this only works when pure IP
1892 addresses are passed. Since this option's usage perimeter is rather limited,
1893 it will probably be used only by experts who know they need exactly it. Last,
1894 if the clients are susceptible of sending keep-alive requests, it will be
1895 needed to add "option http_close" to ensure that all requests will correctly
1896 be analyzed.
1897
1898 If this option has been enabled in a "defaults" section, it can be disabled
1899 in a specific instance by prepending the "no" keyword before it.
1900
1901 Example :
1902 # this backend understands HTTP proxy requests and forwards them directly.
1903 backend direct_forward
1904 option httpclose
1905 option http_proxy
1906
1907 See also : "option httpclose"
1908
1909
1910option httpchk
1911option httpchk <uri>
1912option httpchk <method> <uri>
1913option httpchk <method> <uri> <version>
1914 Enable HTTP protocol to check on the servers health
1915 May be used in sections : defaults | frontend | listen | backend
1916 yes | no | yes | yes
1917 Arguments :
1918 <method> is the optional HTTP method used with the requests. When not set,
1919 the "OPTIONS" method is used, as it generally requires low server
1920 processing and is easy to filter out from the logs. Any method
1921 may be used, though it is not recommended to invent non-standard
1922 ones.
1923
1924 <uri> is the URI referenced in the HTTP requests. It defaults to " / "
1925 which is accessible by default on almost any server, but may be
1926 changed to any other URI. Query strings are permitted.
1927
1928 <version> is the optional HTTP version string. It defaults to "HTTP/1.0"
1929 but some servers might behave incorrectly in HTTP 1.0, so turning
1930 it to HTTP/1.1 may sometimes help. Note that the Host field is
1931 mandatory in HTTP/1.1, and as a trick, it is possible to pass it
1932 after "\r\n" following the version string.
1933
1934 By default, server health checks only consist in trying to establish a TCP
1935 connection. When "option httpchk" is specified, a complete HTTP request is
1936 sent once the TCP connection is established, and responses 2xx and 3xx are
1937 considered valid, while all other ones indicate a server failure, including
1938 the lack of any response.
1939
1940 The port and interval are specified in the server configuration.
1941
1942 This option does not necessarily require an HTTP backend, it also works with
1943 plain TCP backends. This is particularly useful to check simple scripts bound
1944 to some dedicated ports using the inetd daemon.
1945
1946 Examples :
1947 # Relay HTTPS traffic to Apache instance and check service availability
1948 # using HTTP request "OPTIONS * HTTP/1.1" on port 80.
1949 backend https_relay
1950 mode tcp
Willy Tarreauebaf21a2008-03-21 20:17:14 +01001951 option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
Willy Tarreauc27debf2008-01-06 08:57:02 +01001952 server apache1 192.168.1.1:443 check port 80
1953
1954 See also : "option ssl-hello-chk", "option smtpchk", "http-check" and the
1955 "check", "port" and "interval" server options.
1956
1957
1958option httpclose
1959no option httpclose
1960 Enable or disable passive HTTP connection closing
1961 May be used in sections : defaults | frontend | listen | backend
1962 yes | yes | yes | yes
1963 Arguments : none
1964
1965 As stated in section 2.1, HAProxy does not yes support the HTTP keep-alive
1966 mode. So by default, if a client communicates with a server in this mode, it
1967 will only analyze, log, and process the first request of each connection. To
1968 workaround this limitation, it is possible to specify "option httpclose". It
1969 will check if a "Connection: close" header is already set in each direction,
1970 and will add one if missing. Each end should react to this by actively
1971 closing the TCP connection after each transfer, thus resulting in a switch to
1972 the HTTP close mode. Any "Connection" header different from "close" will also
1973 be removed.
1974
1975 It seldom happens that some servers incorrectly ignore this header and do not
1976 close the connection eventough they reply "Connection: close". For this
1977 reason, they are not compatible with older HTTP 1.0 browsers. If this
1978 happens it is possible to use the "option forceclose" which actively closes
1979 the request connection once the server responds.
1980
1981 This option may be set both in a frontend and in a backend. It is enabled if
1982 at least one of the frontend or backend holding a connection has it enabled.
1983 If "option forceclose" is specified too, it has precedence over "httpclose".
1984
1985 If this option has been enabled in a "defaults" section, it can be disabled
1986 in a specific instance by prepending the "no" keyword before it.
1987
1988 See also : "option forceclose"
1989
1990
1991option httplog
1992 Enable logging of HTTP request, session state and timers
1993 May be used in sections : defaults | frontend | listen | backend
1994 yes | yes | yes | yes
1995 Arguments : none
1996
1997 By default, the log output format is very poor, as it only contains the
1998 source and destination addresses, and the instance name. By specifying
1999 "option httplog", each log line turns into a much richer format including,
2000 but not limited to, the HTTP request, the connection timers, the session
2001 status, the connections numbers, the captured headers and cookies, the
2002 frontend, backend and server name, and of course the source address and
2003 ports.
2004
2005 This option may be set either in the frontend or the backend.
2006
Willy Tarreauced27012008-01-17 20:35:34 +01002007 See also : section 2.6 about logging.
Willy Tarreauc27debf2008-01-06 08:57:02 +01002008
Willy Tarreauc27debf2008-01-06 08:57:02 +01002009
2010option logasap
2011no option logasap
2012 Enable or disable early logging of HTTP requests
2013 May be used in sections : defaults | frontend | listen | backend
2014 yes | yes | yes | no
2015 Arguments : none
2016
2017 By default, HTTP requests are logged upon termination so that the total
2018 transfer time and the number of bytes appear in the logs. When large objects
2019 are being transferred, it may take a while before the request appears in the
2020 logs. Using "option logasap", the request gets logged as soon as the server
2021 sends the complete headers. The only missing information in the logs will be
2022 the total number of bytes which will indicate everything except the amount
2023 of data transferred, and the total time which will not take the transfer
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002024 time into account. In such a situation, it's a good practice to capture the
Willy Tarreauc27debf2008-01-06 08:57:02 +01002025 "Content-Length" response header so that the logs at least indicate how many
2026 bytes are expected to be transferred.
2027
Willy Tarreauced27012008-01-17 20:35:34 +01002028 See also : "option httplog", "capture response header", and section 2.6 about
Willy Tarreauc27debf2008-01-06 08:57:02 +01002029 logging.
2030
2031
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002032option nolinger
2033no option nolinger
2034 Enable or disable immediate session ressource cleaning after close
2035 May be used in sections: defaults | frontend | listen | backend
2036 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002037 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002038
2039 When clients or servers abort connections in a dirty way (eg: they are
2040 physically disconnected), the session timeouts triggers and the session is
2041 closed. But it will remain in FIN_WAIT1 state for some time in the system,
2042 using some resources and possibly limiting the ability to establish newer
2043 connections.
2044
2045 When this happens, it is possible to activate "option nolinger" which forces
2046 the system to immediately remove any socket's pending data on close. Thus,
2047 the session is instantly purged from the system's tables. This usually has
2048 side effects such as increased number of TCP resets due to old retransmits
2049 getting immediately rejected. Some firewalls may sometimes complain about
2050 this too.
2051
2052 For this reason, it is not recommended to use this option when not absolutely
2053 needed. You know that you need it when you have thousands of FIN_WAIT1
2054 sessions on your system (TIME_WAIT ones do not count).
2055
2056 This option may be used both on frontends and backends, depending on the side
2057 where it is required. Use it on the frontend for clients, and on the backend
2058 for servers.
2059
2060 If this option has been enabled in a "defaults" section, it can be disabled
2061 in a specific instance by prepending the "no" keyword before it.
2062
2063
2064option persist
2065no option persist
2066 Enable or disable forced persistence on down servers
2067 May be used in sections: defaults | frontend | listen | backend
2068 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002069 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002070
2071 When an HTTP request reaches a backend with a cookie which references a dead
2072 server, by default it is redispatched to another server. It is possible to
2073 force the request to be sent to the dead server first using "option persist"
2074 if absolutely needed. A common use case is when servers are under extreme
2075 load and spend their time flapping. In this case, the users would still be
2076 directed to the server they opened the session on, in the hope they would be
2077 correctly served. It is recommended to use "option redispatch" in conjunction
2078 with this option so that in the event it would not be possible to connect to
2079 the server at all (server definitely dead), the client would finally be
2080 redirected to another valid server.
2081
2082 If this option has been enabled in a "defaults" section, it can be disabled
2083 in a specific instance by prepending the "no" keyword before it.
2084
2085 See also : "option redispatch", "retries"
2086
2087
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002088option redispatch
2089no option redispatch
2090 Enable or disable session redistribution in case of connection failure
2091 May be used in sections: defaults | frontend | listen | backend
2092 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002093 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002094
2095 In HTTP mode, if a server designated by a cookie is down, clients may
2096 definitely stick to it because they cannot flush the cookie, so they will not
2097 be able to access the service anymore.
2098
2099 Specifying "option redispatch" will allow the proxy to break their
2100 persistence and redistribute them to a working server.
2101
2102 It also allows to retry last connection to another server in case of multiple
2103 connection failures. Of course, it requires having "retries" set to a nonzero
2104 value.
2105
2106 This form is the preferred form, which replaces both the "redispatch" and
2107 "redisp" keywords.
2108
2109 If this option has been enabled in a "defaults" section, it can be disabled
2110 in a specific instance by prepending the "no" keyword before it.
2111
2112 See also : "redispatch", "retries"
2113
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002114
2115option smtpchk
2116option smtpchk <hello> <domain>
2117 Use SMTP health checks for server testing
2118 May be used in sections : defaults | frontend | listen | backend
2119 yes | no | yes | yes
2120 Arguments :
2121 <hello> is an optional argument. It is the "hello" command to use. It can
2122 be either "HELO" (for SMTP) or "EHLO" (for ESTMP). All other
2123 values will be turned into the default command ("HELO").
2124
2125 <domain> is the domain name to present to the server. It may only be
2126 specified (and is mandatory) if the hello command has been
2127 specified. By default, "localhost" is used.
2128
2129 When "option smtpchk" is set, the health checks will consist in TCP
2130 connections followed by an SMTP command. By default, this command is
2131 "HELO localhost". The server's return code is analyzed and only return codes
2132 starting with a "2" will be considered as valid. All other responses,
2133 including a lack of response will constitute an error and will indicate a
2134 dead server.
2135
2136 This test is meant to be used with SMTP servers or relays. Depending on the
2137 request, it is possible that some servers do not log each connection attempt,
2138 so you may want to experiment to improve the behaviour. Using telnet on port
2139 25 is often easier than adjusting the configuration.
2140
2141 Most often, an incoming SMTP server needs to see the client's IP address for
2142 various purposes, including spam filtering, anti-spoofing and logging. When
2143 possible, it is often wise to masquerade the client's IP address when
2144 connecting to the server using the "usesrc" argument of the "source" keyword,
2145 which requires the cttproxy feature to be compiled in.
2146
2147 Example :
2148 option smtpchk HELO mydomain.org
2149
2150 See also : "option httpchk", "source"
2151
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002152
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002153option srvtcpka
2154no option srvtcpka
2155 Enable or disable the sending of TCP keepalive packets on the server side
2156 May be used in sections : defaults | frontend | listen | backend
2157 yes | no | yes | yes
2158 Arguments : none
2159
2160 When there is a firewall or any session-aware component between a client and
2161 a server, and when the protocol involves very long sessions with long idle
2162 periods (eg: remote desktops), there is a risk that one of the intermediate
2163 components decides to expire a session which has remained idle for too long.
2164
2165 Enabling socket-level TCP keep-alives makes the system regularly send packets
2166 to the other end of the connection, leaving it active. The delay between
2167 keep-alive probes is controlled by the system only and depends both on the
2168 operating system and its tuning parameters.
2169
2170 It is important to understand that keep-alive packets are neither emitted nor
2171 received at the application level. It is only the network stacks which sees
2172 them. For this reason, even if one side of the proxy already uses keep-alives
2173 to maintain its connection alive, those keep-alive packets will not be
2174 forwarded to the other side of the proxy.
2175
2176 Please note that this has nothing to do with HTTP keep-alive.
2177
2178 Using option "srvtcpka" enables the emission of TCP keep-alive probes on the
2179 server side of a connection, which should help when session expirations are
2180 noticed between HAProxy and a server.
2181
2182 If this option has been enabled in a "defaults" section, it can be disabled
2183 in a specific instance by prepending the "no" keyword before it.
2184
2185 See also : "option clitcpka", "option tcpka"
2186
2187
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002188option ssl-hello-chk
2189 Use SSLv3 client hello health checks for server testing
2190 May be used in sections : defaults | frontend | listen | backend
2191 yes | no | yes | yes
2192 Arguments : none
2193
2194 When some SSL-based protocols are relayed in TCP mode through HAProxy, it is
2195 possible to test that the server correctly talks SSL instead of just testing
2196 that it accepts the TCP connection. When "option ssl-hello-chk" is set, pure
2197 SSLv3 client hello messages are sent once the connection is established to
2198 the server, and the response is analyzed to find an SSL server hello message.
2199 The server is considered valid only when the response contains this server
2200 hello message.
2201
2202 All servers tested till there correctly reply to SSLv3 client hello messages,
2203 and most servers tested do not even log the requests containing only hello
2204 messages, which is appreciable.
2205
2206 See also: "option httpchk"
2207
2208
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002209option tcpka
2210 Enable or disable the sending of TCP keepalive packets on both sides
2211 May be used in sections : defaults | frontend | listen | backend
2212 yes | yes | yes | yes
2213 Arguments : none
2214
2215 When there is a firewall or any session-aware component between a client and
2216 a server, and when the protocol involves very long sessions with long idle
2217 periods (eg: remote desktops), there is a risk that one of the intermediate
2218 components decides to expire a session which has remained idle for too long.
2219
2220 Enabling socket-level TCP keep-alives makes the system regularly send packets
2221 to the other end of the connection, leaving it active. The delay between
2222 keep-alive probes is controlled by the system only and depends both on the
2223 operating system and its tuning parameters.
2224
2225 It is important to understand that keep-alive packets are neither emitted nor
2226 received at the application level. It is only the network stacks which sees
2227 them. For this reason, even if one side of the proxy already uses keep-alives
2228 to maintain its connection alive, those keep-alive packets will not be
2229 forwarded to the other side of the proxy.
2230
2231 Please note that this has nothing to do with HTTP keep-alive.
2232
2233 Using option "tcpka" enables the emission of TCP keep-alive probes on both
2234 the client and server sides of a connection. Note that this is meaningful
2235 only in "defaults" or "listen" sections. If this option is used in a
2236 frontend, only the client side will get keep-alives, and if this option is
2237 used in a backend, only the server side will get keep-alives. For this
2238 reason, it is strongly recommended to explicitly use "option clitcpka" and
2239 "option srvtcpka" when the configuration is split between frontends and
2240 backends.
2241
2242 See also : "option clitcpka", "option srvtcpka"
2243
Willy Tarreau844e3c52008-01-11 16:28:18 +01002244
2245option tcplog
2246 Enable advanced logging of TCP connections with session state and timers
2247 May be used in sections : defaults | frontend | listen | backend
2248 yes | yes | yes | yes
2249 Arguments : none
2250
2251 By default, the log output format is very poor, as it only contains the
2252 source and destination addresses, and the instance name. By specifying
2253 "option tcplog", each log line turns into a much richer format including, but
2254 not limited to, the connection timers, the session status, the connections
2255 numbers, the frontend, backend and server name, and of course the source
2256 address and ports. This option is useful for pure TCP proxies in order to
2257 find which of the client or server disconnects or times out. For normal HTTP
2258 proxies, it's better to use "option httplog" which is even more complete.
2259
2260 This option may be set either in the frontend or the backend.
2261
Willy Tarreauced27012008-01-17 20:35:34 +01002262 See also : "option httplog", and section 2.6 about logging.
Willy Tarreau844e3c52008-01-11 16:28:18 +01002263
2264
2265option tcpsplice [ experimental ]
2266 Enable linux kernel-based acceleration of data relaying
2267 May be used in sections : defaults | frontend | listen | backend
2268 yes | yes | yes | yes
2269 Arguments : none
2270
2271 This option is only available when HAProxy has been built for use on Linux
2272 with USE_TCPSPLICE=1. This option requires a kernel patch which is available
2273 on http://www.linux-l7sw.org/.
2274
2275 When "option tcpsplice" is set, as soon as the server's response headers have
2276 been transferred, the session handling is transferred to the kernel which
2277 will forward all subsequent data from the server to the client untill the
2278 session closes. This leads to much faster data transfers between client and
2279 server since the data is not copied twice between kernel and user space, but
2280 there are some limitations such as the lack of information about the number
2281 of bytes transferred and the total transfer time.
2282
2283 This is an experimental feature. It happens to reliably work but issues
2284 caused by corner cases are to be expected.
2285
2286 Note that this option requires that the process permanently runs with
2287 CAP_NETADMIN privileges, which most often translates into running as root.
2288
2289
2290option transparent
2291no option transparent
2292 Enable client-side transparent proxying
2293 May be used in sections : defaults | frontend | listen | backend
2294 yes | yes | yes | no
2295 Arguments : none
2296
2297 This option was introduced in order to provide layer 7 persistence to layer 3
2298 load balancers. The idea is to use the OS's ability to redirect an incoming
2299 connection for a remote address to a local process (here HAProxy), and let
2300 this process know what address was initially requested. When this option is
2301 used, sessions without cookies will be forwarded to the original destination
2302 IP address of the incoming request (which should match that of another
2303 equipment), while requests with cookies will still be forwarded to the
2304 appropriate server.
2305
2306 Note that contrary to a common belief, this option does NOT make HAProxy
2307 present the client's IP to the server when establishing the connection.
2308
2309 Use of this option is really discouraged, and since no really valid use of it
2310 has been reported for years, it will probably be removed in future versions.
2311
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002312 See also: the "usersrc" argument of the "source" keyword, and the
2313 "transparent" option of the "bind" keyword.
Willy Tarreau844e3c52008-01-11 16:28:18 +01002314
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002315
Willy Tarreaub463dfb2008-06-07 23:08:56 +02002316redirect {location | prefix} <to> [code <code>] {if | unless} <condition>
2317 Return an HTTP redirection if/unless a condition is matched
2318 May be used in sections : defaults | frontend | listen | backend
2319 no | yes | yes | yes
2320
2321 If/unless the condition is matched, the HTTP request will lead to a redirect
2322 response. There are currently two types of redirections : "location" and
2323 "prefix". With "location", the exact value in <to> is placed into the HTTP
2324 "Location" header. With "prefix", the "Location" header is built from the
2325 concatenation of <to> and the URI. It is particularly suited for global site
2326 redirections.
2327
2328 The code is optional. It indicates in <code> which type of HTTP redirection
2329 is desired. Only codes 301, 302 and 303 are supported. 302 is used if no code
2330 is specified.
2331
2332 Example: move the login URL only to HTTPS.
2333 acl clear dst_port 80
2334 acl secure dst_port 8080
2335 acl login_page url_beg /login
2336 redirect prefix https://mysite.com if login_page !secure
2337 redirect location http://mysite.com/ if !login_page secure
2338
2339 See section 2.3 about ACL usage.
2340
2341
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002342redisp (deprecated)
2343redispatch (deprecated)
2344 Enable or disable session redistribution in case of connection failure
2345 May be used in sections: defaults | frontend | listen | backend
2346 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002347 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002348
2349 In HTTP mode, if a server designated by a cookie is down, clients may
2350 definitely stick to it because they cannot flush the cookie, so they will not
2351 be able to access the service anymore.
2352
2353 Specifying "redispatch" will allow the proxy to break their persistence and
2354 redistribute them to a working server.
2355
2356 It also allows to retry last connection to another server in case of multiple
2357 connection failures. Of course, it requires having "retries" set to a nonzero
2358 value.
2359
2360 This form is deprecated, do not use it in any new configuration, use the new
2361 "option redispatch" instead.
2362
2363 See also : "option redispatch"
2364
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002365
Willy Tarreau303c0352008-01-17 19:01:39 +01002366reqadd <string>
2367 Add a header at the end of the HTTP request
2368 May be used in sections : defaults | frontend | listen | backend
2369 no | yes | yes | yes
2370 Arguments :
2371 <string> is the complete line to be added. Any space or known delimiter
2372 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002373 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002374
2375 A new line consisting in <string> followed by a line feed will be added after
2376 the last header of an HTTP request.
2377
2378 Header transformations only apply to traffic which passes through HAProxy,
2379 and not to traffic generated by HAProxy, such as health-checks or error
2380 responses.
2381
Willy Tarreauced27012008-01-17 20:35:34 +01002382 See also: "rspadd" and section 2.5 about HTTP header manipulation
Willy Tarreau303c0352008-01-17 19:01:39 +01002383
2384
2385reqallow <search>
2386reqiallow <search> (ignore case)
2387 Definitely allow an HTTP request if a line matches a regular expression
2388 May be used in sections : defaults | frontend | listen | backend
2389 no | yes | yes | yes
2390 Arguments :
2391 <search> is the regular expression applied to HTTP headers and to the
2392 request line. This is an extended regular expression. Parenthesis
2393 grouping is supported and no preliminary backslash is required.
2394 Any space or known delimiter must be escaped using a backslash
2395 ('\'). The pattern applies to a full line at a time. The
2396 "reqallow" keyword strictly matches case while "reqiallow"
2397 ignores case.
2398
2399 A request containing any line which matches extended regular expression
2400 <search> will mark the request as allowed, even if any later test would
2401 result in a deny. The test applies both to the request line and to request
2402 headers. Keep in mind that URLs in request line are case-sensitive while
2403 header names are not.
2404
2405 It is easier, faster and more powerful to use ACLs to write access policies.
2406 Reqdeny, reqallow and reqpass should be avoided in new designs.
2407
2408 Example :
2409 # allow www.* but refuse *.local
2410 reqiallow ^Host:\ www\.
2411 reqideny ^Host:\ .*\.local
2412
Willy Tarreauced27012008-01-17 20:35:34 +01002413 See also: "reqdeny", "acl", "block" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002414 manipulation
2415
2416
2417reqdel <search>
2418reqidel <search> (ignore case)
2419 Delete all headers matching a regular expression in an HTTP request
2420 May be used in sections : defaults | frontend | listen | backend
2421 no | yes | yes | yes
2422 Arguments :
2423 <search> is the regular expression applied to HTTP headers and to the
2424 request line. This is an extended regular expression. Parenthesis
2425 grouping is supported and no preliminary backslash is required.
2426 Any space or known delimiter must be escaped using a backslash
2427 ('\'). The pattern applies to a full line at a time. The "reqdel"
2428 keyword strictly matches case while "reqidel" ignores case.
2429
2430 Any header line matching extended regular expression <search> in the request
2431 will be completely deleted. Most common use of this is to remove unwanted
2432 and/or dangerous headers or cookies from a request before passing it to the
2433 next servers.
2434
2435 Header transformations only apply to traffic which passes through HAProxy,
2436 and not to traffic generated by HAProxy, such as health-checks or error
2437 responses. Keep in mind that header names are not case-sensitive.
2438
2439 Example :
2440 # remove X-Forwarded-For header and SERVER cookie
2441 reqidel ^X-Forwarded-For:.*
2442 reqidel ^Cookie:.*SERVER=
2443
Willy Tarreauced27012008-01-17 20:35:34 +01002444 See also: "reqadd", "reqrep", "rspdel" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002445 manipulation
2446
2447
2448reqdeny <search>
2449reqideny <search> (ignore case)
2450 Deny an HTTP request if a line matches a regular expression
2451 May be used in sections : defaults | frontend | listen | backend
2452 no | yes | yes | yes
2453 Arguments :
2454 <search> is the regular expression applied to HTTP headers and to the
2455 request line. This is an extended regular expression. Parenthesis
2456 grouping is supported and no preliminary backslash is required.
2457 Any space or known delimiter must be escaped using a backslash
2458 ('\'). The pattern applies to a full line at a time. The
2459 "reqdeny" keyword strictly matches case while "reqideny" ignores
2460 case.
2461
2462 A request containing any line which matches extended regular expression
2463 <search> will mark the request as denied, even if any later test would
2464 result in an allow. The test applies both to the request line and to request
2465 headers. Keep in mind that URLs in request line are case-sensitive while
2466 header names are not.
2467
Willy Tarreauced27012008-01-17 20:35:34 +01002468 A denied request will generate an "HTTP 403 forbidden" response once the
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002469 complete request has been parsed. This is consistent with what is practiced
Willy Tarreauced27012008-01-17 20:35:34 +01002470 using ACLs.
2471
Willy Tarreau303c0352008-01-17 19:01:39 +01002472 It is easier, faster and more powerful to use ACLs to write access policies.
2473 Reqdeny, reqallow and reqpass should be avoided in new designs.
2474
2475 Example :
2476 # refuse *.local, then allow www.*
2477 reqideny ^Host:\ .*\.local
2478 reqiallow ^Host:\ www\.
2479
Willy Tarreauced27012008-01-17 20:35:34 +01002480 See also: "reqallow", "rspdeny", "acl", "block" and section 2.5 about HTTP
Willy Tarreau303c0352008-01-17 19:01:39 +01002481 header manipulation
2482
2483
2484reqpass <search>
2485reqipass <search> (ignore case)
2486 Ignore any HTTP request line matching a regular expression in next rules
2487 May be used in sections : defaults | frontend | listen | backend
2488 no | yes | yes | yes
2489 Arguments :
2490 <search> is the regular expression applied to HTTP headers and to the
2491 request line. This is an extended regular expression. Parenthesis
2492 grouping is supported and no preliminary backslash is required.
2493 Any space or known delimiter must be escaped using a backslash
2494 ('\'). The pattern applies to a full line at a time. The
2495 "reqpass" keyword strictly matches case while "reqipass" ignores
2496 case.
2497
2498 A request containing any line which matches extended regular expression
2499 <search> will skip next rules, without assigning any deny or allow verdict.
2500 The test applies both to the request line and to request headers. Keep in
2501 mind that URLs in request line are case-sensitive while header names are not.
2502
2503 It is easier, faster and more powerful to use ACLs to write access policies.
2504 Reqdeny, reqallow and reqpass should be avoided in new designs.
2505
2506 Example :
2507 # refuse *.local, then allow www.*, but ignore "www.private.local"
2508 reqipass ^Host:\ www.private\.local
2509 reqideny ^Host:\ .*\.local
2510 reqiallow ^Host:\ www\.
2511
Willy Tarreauced27012008-01-17 20:35:34 +01002512 See also: "reqallow", "reqdeny", "acl", "block" and section 2.5 about HTTP
Willy Tarreau303c0352008-01-17 19:01:39 +01002513 header manipulation
2514
2515
2516reqrep <search> <string>
2517reqirep <search> <string> (ignore case)
2518 Replace a regular expression with a string in an HTTP request line
2519 May be used in sections : defaults | frontend | listen | backend
2520 no | yes | yes | yes
2521 Arguments :
2522 <search> is the regular expression applied to HTTP headers and to the
2523 request line. This is an extended regular expression. Parenthesis
2524 grouping is supported and no preliminary backslash is required.
2525 Any space or known delimiter must be escaped using a backslash
2526 ('\'). The pattern applies to a full line at a time. The "reqrep"
2527 keyword strictly matches case while "reqirep" ignores case.
2528
2529 <string> is the complete line to be added. Any space or known delimiter
2530 must be escaped using a backslash ('\'). References to matched
2531 pattern groups are possible using the common \N form, with N
2532 being a single digit between 0 and 9. Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002533 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002534
2535 Any line matching extended regular expression <search> in the request (both
2536 the request line and header lines) will be completely replaced with <string>.
2537 Most common use of this is to rewrite URLs or domain names in "Host" headers.
2538
2539 Header transformations only apply to traffic which passes through HAProxy,
2540 and not to traffic generated by HAProxy, such as health-checks or error
2541 responses. Note that for increased readability, it is suggested to add enough
2542 spaces between the request and the response. Keep in mind that URLs in
2543 request line are case-sensitive while header names are not.
2544
2545 Example :
2546 # replace "/static/" with "/" at the beginning of any request path.
2547 reqrep ^([^\ ]*)\ /static/(.*) \1\ /\2
2548 # replace "www.mydomain.com" with "www" in the host name.
2549 reqirep ^Host:\ www.mydomain.com Host:\ www
2550
Willy Tarreauced27012008-01-17 20:35:34 +01002551 See also: "reqadd", "reqdel", "rsprep" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002552 manipulation
2553
2554
2555reqtarpit <search>
2556reqitarpit <search> (ignore case)
2557 Tarpit an HTTP request containing a line matching a regular expression
2558 May be used in sections : defaults | frontend | listen | backend
2559 no | yes | yes | yes
2560 Arguments :
2561 <search> is the regular expression applied to HTTP headers and to the
2562 request line. This is an extended regular expression. Parenthesis
2563 grouping is supported and no preliminary backslash is required.
2564 Any space or known delimiter must be escaped using a backslash
2565 ('\'). The pattern applies to a full line at a time. The
2566 "reqtarpit" keyword strictly matches case while "reqitarpit"
2567 ignores case.
2568
2569 A request containing any line which matches extended regular expression
2570 <search> will be tarpitted, which means that it will connect to nowhere, will
Willy Tarreauced27012008-01-17 20:35:34 +01002571 be kept open for a pre-defined time, then will return an HTTP error 500 so
2572 that the attacker does not suspect it has been tarpitted. The status 500 will
2573 be reported in the logs, but the completion flags will indicate "PT". The
Willy Tarreau303c0352008-01-17 19:01:39 +01002574 delay is defined by "timeout tarpit", or "timeout connect" if the former is
2575 not set.
2576
2577 The goal of the tarpit is to slow down robots attacking servers with
2578 identifiable requests. Many robots limit their outgoing number of connections
2579 and stay connected waiting for a reply which can take several minutes to
2580 come. Depending on the environment and attack, it may be particularly
2581 efficient at reducing the load on the network and firewalls.
2582
2583 Example :
2584 # ignore user-agents reporting any flavour of "Mozilla" or "MSIE", but
2585 # block all others.
2586 reqipass ^User-Agent:\.*(Mozilla|MSIE)
2587 reqitarpit ^User-Agent:
2588
Willy Tarreauced27012008-01-17 20:35:34 +01002589 See also: "reqallow", "reqdeny", "reqpass", and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002590 manipulation
2591
2592
2593rspadd <string>
2594 Add a header at the end of the HTTP response
2595 May be used in sections : defaults | frontend | listen | backend
2596 no | yes | yes | yes
2597 Arguments :
2598 <string> is the complete line to be added. Any space or known delimiter
2599 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002600 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002601
2602 A new line consisting in <string> followed by a line feed will be added after
2603 the last header of an HTTP response.
2604
2605 Header transformations only apply to traffic which passes through HAProxy,
2606 and not to traffic generated by HAProxy, such as health-checks or error
2607 responses.
2608
Willy Tarreauced27012008-01-17 20:35:34 +01002609 See also: "reqadd" and section 2.5 about HTTP header manipulation
Willy Tarreau303c0352008-01-17 19:01:39 +01002610
2611
2612rspdel <search>
2613rspidel <search> (ignore case)
2614 Delete all headers matching a regular expression in an HTTP response
2615 May be used in sections : defaults | frontend | listen | backend
2616 no | yes | yes | yes
2617 Arguments :
2618 <search> is the regular expression applied to HTTP headers and to the
2619 response line. This is an extended regular expression, so
2620 parenthesis grouping is supported and no preliminary backslash
2621 is required. Any space or known delimiter must be escaped using
2622 a backslash ('\'). The pattern applies to a full line at a time.
2623 The "rspdel" keyword strictly matches case while "rspidel"
2624 ignores case.
2625
2626 Any header line matching extended regular expression <search> in the response
2627 will be completely deleted. Most common use of this is to remove unwanted
2628 and/or sensible headers or cookies from a response before passing it to the
2629 client.
2630
2631 Header transformations only apply to traffic which passes through HAProxy,
2632 and not to traffic generated by HAProxy, such as health-checks or error
2633 responses. Keep in mind that header names are not case-sensitive.
2634
2635 Example :
2636 # remove the Server header from responses
2637 reqidel ^Server:.*
2638
Willy Tarreauced27012008-01-17 20:35:34 +01002639 See also: "rspadd", "rsprep", "reqdel" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002640 manipulation
2641
2642
2643rspdeny <search>
2644rspideny <search> (ignore case)
2645 Block an HTTP response if a line matches a regular expression
2646 May be used in sections : defaults | frontend | listen | backend
2647 no | yes | yes | yes
2648 Arguments :
2649 <search> is the regular expression applied to HTTP headers and to the
2650 response line. This is an extended regular expression, so
2651 parenthesis grouping is supported and no preliminary backslash
2652 is required. Any space or known delimiter must be escaped using
2653 a backslash ('\'). The pattern applies to a full line at a time.
2654 The "rspdeny" keyword strictly matches case while "rspideny"
2655 ignores case.
2656
2657 A response containing any line which matches extended regular expression
2658 <search> will mark the request as denied. The test applies both to the
2659 response line and to response headers. Keep in mind that header names are not
2660 case-sensitive.
2661
2662 Main use of this keyword is to prevent sensitive information leak and to
Willy Tarreauced27012008-01-17 20:35:34 +01002663 block the response before it reaches the client. If a response is denied, it
2664 will be replaced with an HTTP 502 error so that the client never retrieves
2665 any sensitive data.
Willy Tarreau303c0352008-01-17 19:01:39 +01002666
2667 It is easier, faster and more powerful to use ACLs to write access policies.
2668 Rspdeny should be avoided in new designs.
2669
2670 Example :
2671 # Ensure that no content type matching ms-word will leak
2672 rspideny ^Content-type:\.*/ms-word
2673
Willy Tarreauced27012008-01-17 20:35:34 +01002674 See also: "reqdeny", "acl", "block" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002675 manipulation
2676
2677
2678rsprep <search> <string>
2679rspirep <search> <string> (ignore case)
2680 Replace a regular expression with a string in an HTTP response line
2681 May be used in sections : defaults | frontend | listen | backend
2682 no | yes | yes | yes
2683 Arguments :
2684 <search> is the regular expression applied to HTTP headers and to the
2685 response line. This is an extended regular expression, so
2686 parenthesis grouping is supported and no preliminary backslash
2687 is required. Any space or known delimiter must be escaped using
2688 a backslash ('\'). The pattern applies to a full line at a time.
2689 The "rsprep" keyword strictly matches case while "rspirep"
2690 ignores case.
2691
2692 <string> is the complete line to be added. Any space or known delimiter
2693 must be escaped using a backslash ('\'). References to matched
2694 pattern groups are possible using the common \N form, with N
2695 being a single digit between 0 and 9. Please refer to section
Willy Tarreauced27012008-01-17 20:35:34 +01002696 2.5 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01002697
2698 Any line matching extended regular expression <search> in the response (both
2699 the response line and header lines) will be completely replaced with
2700 <string>. Most common use of this is to rewrite Location headers.
2701
2702 Header transformations only apply to traffic which passes through HAProxy,
2703 and not to traffic generated by HAProxy, such as health-checks or error
2704 responses. Note that for increased readability, it is suggested to add enough
2705 spaces between the request and the response. Keep in mind that header names
2706 are not case-sensitive.
2707
2708 Example :
2709 # replace "Location: 127.0.0.1:8080" with "Location: www.mydomain.com"
2710 rspirep ^Location:\ 127.0.0.1:8080 Location:\ www.mydomain.com
2711
Willy Tarreauced27012008-01-17 20:35:34 +01002712 See also: "rspadd", "rspdel", "reqrep" and section 2.5 about HTTP header
Willy Tarreau303c0352008-01-17 19:01:39 +01002713 manipulation
2714
2715
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002716server <name> <address>[:port] [param*]
2717 Declare a server in a backend
2718 May be used in sections : defaults | frontend | listen | backend
2719 no | no | yes | yes
2720 Arguments :
2721 <name> is the internal name assigned to this server. This name will
2722 appear in logs and alerts.
2723
2724 <address> is the IPv4 address of the server. Alternatively, a resolvable
2725 hostname is supported, but this name will be resolved during
2726 start-up.
2727
2728 <ports> is an optional port specification. If set, all connections will
2729 be sent to this port. If unset, the same port the client
2730 connected to will be used. The port may also be prefixed by a "+"
2731 or a "-". In this case, the server's port will be determined by
2732 adding this value to the client's port.
2733
2734 <param*> is a list of parameters for this server. The "server" keywords
2735 accepts an important number of options and has a complete section
2736 dedicated to it. Please refer to section 2.4 for more details.
2737
2738 Examples :
2739 server first 10.1.1.1:1080 cookie first check inter 1000
2740 server second 10.1.1.2:1080 cookie second check inter 1000
2741
2742 See also : section 2.4 about server options
2743
2744
2745source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
2746 Set the source address for outgoing connections
2747 May be used in sections : defaults | frontend | listen | backend
2748 yes | no | yes | yes
2749 Arguments :
2750 <addr> is the IPv4 address HAProxy will bind to before connecting to a
2751 server. This address is also used as a source for health checks.
2752 The default value of 0.0.0.0 means that the system will select
2753 the most appropriate address to reach its destination.
2754
2755 <port> is an optional port. It is normally not needed but may be useful
2756 in some very specific contexts. The default value of zero means
2757 the system will select a free port.
2758
2759 <addr2> is the IP address to present to the server when connections are
2760 forwarded in full transparent proxy mode. This is currently only
2761 supported on some patched Linux kernels. When this address is
2762 specified, clients connecting to the server will be presented
2763 with this address, while health checks will still use the address
2764 <addr>.
2765
2766 <port2> is the optional port to present to the server when connections
2767 are forwarded in full transparent proxy mode (see <addr2> above).
2768 The default value of zero means the system will select a free
2769 port.
2770
2771 The "source" keyword is useful in complex environments where a specific
2772 address only is allowed to connect to the servers. It may be needed when a
2773 private address must be used through a public gateway for instance, and it is
2774 known that the system cannot determine the adequate source address by itself.
2775
2776 An extension which is available on certain patched Linux kernels may be used
2777 through the "usesrc" optional keyword. It makes it possible to connect to the
2778 servers with an IP address which does not belong to the system itself. This
2779 is called "full transparent proxy mode". For this to work, the destination
2780 servers have to route their traffic back to this address through the machine
2781 running HAProxy, and IP forwarding must generally be enabled on this machine.
2782
2783 In this "full transparent proxy" mode, it is possible to force a specific IP
2784 address to be presented to the servers. This is not much used in fact. A more
2785 common use is to tell HAProxy to present the client's IP address. For this,
2786 there are two methods :
2787
2788 - present the client's IP and port addresses. This is the most transparent
2789 mode, but it can cause problems when IP connection tracking is enabled on
2790 the machine, because a same connection may be seen twice with different
2791 states. However, this solution presents the huge advantage of not
2792 limiting the system to the 64k outgoing address+port couples, because all
2793 of the client ranges may be used.
2794
2795 - present only the client's IP address and select a spare port. This
2796 solution is still quite elegant but slightly less transparent (downstream
2797 firewalls logs will not match upstream's). It also presents the downside
2798 of limiting the number of concurrent connections to the usual 64k ports.
2799 However, since the upstream and downstream ports are different, local IP
2800 connection tracking on the machine will not be upset by the reuse of the
2801 same session.
2802
2803 Note that depending on the transparent proxy technology used, it may be
2804 required to force the source address. In fact, cttproxy version 2 requires an
2805 IP address in <addr> above, and does not support setting of "0.0.0.0" as the
2806 IP address because it creates NAT entries which much match the exact outgoing
2807 address. Tproxy version 4 and some other kernel patches which work in pure
2808 forwarding mode generally will not have this limitation.
2809
2810 This option sets the default source for all servers in the backend. It may
2811 also be specified in a "defaults" section. Finer source address specification
2812 is possible at the server level using the "source" server option. Refer to
2813 section 2.4 for more information.
2814
2815 Examples :
2816 backend private
2817 # Connect to the servers using our 192.168.1.200 source address
2818 source 192.168.1.200
2819
2820 backend transparent_ssl1
2821 # Connect to the SSL farm from the client's source address
2822 source 192.168.1.200 usesrc clientip
2823
2824 backend transparent_ssl2
2825 # Connect to the SSL farm from the client's source address and port
2826 # not recommended if IP conntrack is present on the local machine.
2827 source 192.168.1.200 usesrc client
2828
2829 backend transparent_ssl3
2830 # Connect to the SSL farm from the client's source address. It
2831 # is more conntrack-friendly.
2832 source 192.168.1.200 usesrc clientip
2833
2834 backend transparent_smtp
2835 # Connect to the SMTP farm from the client's source address/port
2836 # with Tproxy version 4.
2837 source 0.0.0.0 usesrc clientip
2838
2839 See also : the "source" server option in section 2.4, the Tproxy patches for
2840 the Linux kernel on www.balabit.com, the "bind" keyword.
2841
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002842
Willy Tarreau844e3c52008-01-11 16:28:18 +01002843srvtimeout <timeout> (deprecated)
2844 Set the maximum inactivity time on the server side.
2845 May be used in sections : defaults | frontend | listen | backend
2846 yes | no | yes | yes
2847 Arguments :
2848 <timeout> is the timeout value specified in milliseconds by default, but
2849 can be in any other unit if the number is suffixed by the unit,
2850 as explained at the top of this document.
2851
2852 The inactivity timeout applies when the server is expected to acknowledge or
2853 send data. In HTTP mode, this timeout is particularly important to consider
2854 during the first phase of the server's response, when it has to send the
2855 headers, as it directly represents the server's processing time for the
2856 request. To find out what value to put there, it's often good to start with
2857 what would be considered as unacceptable response times, then check the logs
2858 to observe the response time distribution, and adjust the value accordingly.
2859
2860 The value is specified in milliseconds by default, but can be in any other
2861 unit if the number is suffixed by the unit, as specified at the top of this
2862 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
2863 recommended that the client timeout remains equal to the server timeout in
2864 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002865 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01002866 packet losses by specifying timeouts that are slightly above multiples of 3
2867 seconds (eg: 4 or 5 seconds minimum).
2868
2869 This parameter is specific to backends, but can be specified once for all in
2870 "defaults" sections. This is in fact one of the easiest solutions not to
2871 forget about it. An unspecified timeout results in an infinite timeout, which
2872 is not recommended. Such a usage is accepted and works but reports a warning
2873 during startup because it may results in accumulation of expired sessions in
2874 the system if the system's timeouts are not configured either.
2875
2876 This parameter is provided for compatibility but is currently deprecated.
2877 Please use "timeout server" instead.
2878
2879 See also : "timeout server", "timeout client" and "clitimeout".
2880
2881
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002882stats auth <user>:<passwd>
2883 Enable statistics with authentication and grant access to an account
2884 May be used in sections : defaults | frontend | listen | backend
2885 yes | no | yes | yes
2886 Arguments :
2887 <user> is a user name to grant access to
2888
2889 <passwd> is the cleartext password associated to this user
2890
2891 This statement enables statistics with default settings, and restricts access
2892 to declared users only. It may be repeated as many times as necessary to
2893 allow as many users as desired. When a user tries to access the statistics
2894 without a valid account, a "401 Forbidden" response will be returned so that
2895 the browser asks the user to provide a valid user and password. The real
2896 which will be returned to the browser is configurable using "stats realm".
2897
2898 Since the authentication method is HTTP Basic Authentication, the passwords
2899 circulate in cleartext on the network. Thus, it was decided that the
2900 configuration file would also use cleartext passwords to remind the users
2901 that those ones should not be sensible and not shared with any other account.
2902
2903 It is also possible to reduce the scope of the proxies which appear in the
2904 report using "stats scope".
2905
2906 Though this statement alone is enough to enable statistics reporting, it is
2907 recommended to set all other settings in order to avoid relying on default
2908 unobvious parameters.
2909
2910 Example :
2911 # public access (limited to this backend only)
2912 backend public_www
2913 server srv1 192.168.0.1:80
2914 stats enable
2915 stats hide-version
2916 stats scope .
2917 stats uri /admin?stats
2918 stats realm Haproxy\ Statistics
2919 stats auth admin1:AdMiN123
2920 stats auth admin2:AdMiN321
2921
2922 # internal monitoring access (unlimited)
2923 backend private_monitoring
2924 stats enable
2925 stats uri /admin?stats
2926 stats refresh 5s
2927
2928 See also : "stats enable", "stats realm", "stats scope", "stats uri"
2929
2930
2931stats enable
2932 Enable statistics reporting with default settings
2933 May be used in sections : defaults | frontend | listen | backend
2934 yes | no | yes | yes
2935 Arguments : none
2936
2937 This statement enables statistics reporting with default settings defined
2938 at build time. Unless stated otherwise, these settings are used :
2939 - stats uri : /haproxy?stats
2940 - stats realm : "HAProxy Statistics"
2941 - stats auth : no authentication
2942 - stats scope : no restriction
2943
2944 Though this statement alone is enough to enable statistics reporting, it is
2945 recommended to set all other settings in order to avoid relying on default
2946 unobvious parameters.
2947
2948 Example :
2949 # public access (limited to this backend only)
2950 backend public_www
2951 server srv1 192.168.0.1:80
2952 stats enable
2953 stats hide-version
2954 stats scope .
2955 stats uri /admin?stats
2956 stats realm Haproxy\ Statistics
2957 stats auth admin1:AdMiN123
2958 stats auth admin2:AdMiN321
2959
2960 # internal monitoring access (unlimited)
2961 backend private_monitoring
2962 stats enable
2963 stats uri /admin?stats
2964 stats refresh 5s
2965
2966 See also : "stats auth", "stats realm", "stats uri"
2967
2968
2969stats realm <realm>
2970 Enable statistics and set authentication realm
2971 May be used in sections : defaults | frontend | listen | backend
2972 yes | no | yes | yes
2973 Arguments :
2974 <realm> is the name of the HTTP Basic Authentication realm reported to
2975 the browser. The browser uses it to display it in the pop-up
2976 inviting the user to enter a valid username and password.
2977
2978 The realm is read as a single word, so any spaces in it should be escaped
2979 using a backslash ('\').
2980
2981 This statement is useful only in conjunction with "stats auth" since it is
2982 only related to authentication.
2983
2984 Though this statement alone is enough to enable statistics reporting, it is
2985 recommended to set all other settings in order to avoid relying on default
2986 unobvious parameters.
2987
2988 Example :
2989 # public access (limited to this backend only)
2990 backend public_www
2991 server srv1 192.168.0.1:80
2992 stats enable
2993 stats hide-version
2994 stats scope .
2995 stats uri /admin?stats
2996 stats realm Haproxy\ Statistics
2997 stats auth admin1:AdMiN123
2998 stats auth admin2:AdMiN321
2999
3000 # internal monitoring access (unlimited)
3001 backend private_monitoring
3002 stats enable
3003 stats uri /admin?stats
3004 stats refresh 5s
3005
3006 See also : "stats auth", "stats enable", "stats uri"
3007
3008
3009stats refresh <delay>
3010 Enable statistics with automatic refresh
3011 May be used in sections : defaults | frontend | listen | backend
3012 yes | no | yes | yes
3013 Arguments :
3014 <delay> is the suggested refresh delay, specified in seconds, which will
3015 be returned to the browser consulting the report page. While the
3016 browser is free to apply any delay, it will generally respect it
3017 and refresh the page this every seconds. The refresh interval may
3018 be specified in any other non-default time unit, by suffixing the
3019 unit after the value, as explained at the top of this document.
3020
3021 This statement is useful on monitoring displays with a permanent page
3022 reporting the load balancer's activity. When set, the HTML report page will
3023 include a link "refresh"/"stop refresh" so that the user can select whether
3024 he wants automatic refresh of the page or not.
3025
3026 Though this statement alone is enough to enable statistics reporting, it is
3027 recommended to set all other settings in order to avoid relying on default
3028 unobvious parameters.
3029
3030 Example :
3031 # public access (limited to this backend only)
3032 backend public_www
3033 server srv1 192.168.0.1:80
3034 stats enable
3035 stats hide-version
3036 stats scope .
3037 stats uri /admin?stats
3038 stats realm Haproxy\ Statistics
3039 stats auth admin1:AdMiN123
3040 stats auth admin2:AdMiN321
3041
3042 # internal monitoring access (unlimited)
3043 backend private_monitoring
3044 stats enable
3045 stats uri /admin?stats
3046 stats refresh 5s
3047
3048 See also : "stats auth", "stats enable", "stats realm", "stats uri"
3049
3050
3051stats scope { <name> | "." }
3052 Enable statistics and limit access scope
3053 May be used in sections : defaults | frontend | listen | backend
3054 yes | no | yes | yes
3055 Arguments :
3056 <name> is the name of a listen, frontend or backend section to be
3057 reported. The special name "." (a single dot) designates the
3058 section in which the statement appears.
3059
3060 When this statement is specified, only the sections enumerated with this
3061 statement will appear in the report. All other ones will be hidden. This
3062 statement may appear as many times as needed if multiple sections need to be
3063 reported. Please note that the name checking is performed as simple string
3064 comparisons, and that it is never checked that a give section name really
3065 exists.
3066
3067 Though this statement alone is enough to enable statistics reporting, it is
3068 recommended to set all other settings in order to avoid relying on default
3069 unobvious parameters.
3070
3071 Example :
3072 # public access (limited to this backend only)
3073 backend public_www
3074 server srv1 192.168.0.1:80
3075 stats enable
3076 stats hide-version
3077 stats scope .
3078 stats uri /admin?stats
3079 stats realm Haproxy\ Statistics
3080 stats auth admin1:AdMiN123
3081 stats auth admin2:AdMiN321
3082
3083 # internal monitoring access (unlimited)
3084 backend private_monitoring
3085 stats enable
3086 stats uri /admin?stats
3087 stats refresh 5s
3088
3089 See also : "stats auth", "stats enable", "stats realm", "stats uri"
3090
3091
3092stats uri <prefix>
3093 Enable statistics and define the URI prefix to access them
3094 May be used in sections : defaults | frontend | listen | backend
3095 yes | no | yes | yes
3096 Arguments :
3097 <prefix> is the prefix of any URI which will be redirected to stats. This
3098 prefix may contain a question mark ('?') to indicate part of a
3099 query string.
3100
3101 The statistics URI is intercepted on the relayed traffic, so it appears as a
3102 page within the normal application. It is strongly advised to ensure that the
3103 selected URI will never appear in the application, otherwise it will never be
3104 possible to reach it in the application.
3105
3106 The default URI compiled in haproxy is "/haproxy?stats", but this may be
3107 changed at build time, so it's better to always explictly specify it here.
3108 It is generally a good idea to include a question mark in the URI so that
3109 intermediate proxies refrain from caching the results. Also, since any string
3110 beginning with the prefix will be accepted as a stats request, the question
3111 mark helps ensuring that no valid URI will begin with the same words.
3112
3113 It is sometimes very convenient to use "/" as the URI prefix, and put that
3114 statement in a "listen" instance of its own. That makes it easy to dedicate
3115 an address or a port to statistics only.
3116
3117 Though this statement alone is enough to enable statistics reporting, it is
3118 recommended to set all other settings in order to avoid relying on default
3119 unobvious parameters.
3120
3121 Example :
3122 # public access (limited to this backend only)
3123 backend public_www
3124 server srv1 192.168.0.1:80
3125 stats enable
3126 stats hide-version
3127 stats scope .
3128 stats uri /admin?stats
3129 stats realm Haproxy\ Statistics
3130 stats auth admin1:AdMiN123
3131 stats auth admin2:AdMiN321
3132
3133 # internal monitoring access (unlimited)
3134 backend private_monitoring
3135 stats enable
3136 stats uri /admin?stats
3137 stats refresh 5s
3138
3139 See also : "stats auth", "stats enable", "stats realm"
3140
3141
3142stats hide-version
3143 Enable statistics and hide HAProxy version reporting
3144 May be used in sections : defaults | frontend | listen | backend
3145 yes | no | yes | yes
3146 Arguments : none
3147
3148 By default, the stats page reports some useful status information along with
3149 the statistics. Among them is HAProxy's version. However, it is generally
3150 considered dangerous to report precise version to anyone, as it can help them
3151 target known weaknesses with specific attacks. The "stats hide-version"
3152 statement removes the version from the statistics report. This is recommended
3153 for public sites or any site with a weak login/password.
3154
3155 Though this statement alone is enough to enable statistics reporting, it is
3156 recommended to set all other settings in order to avoid relying on default
3157 unobvious parameters.
3158
3159 Example :
3160 # public access (limited to this backend only)
3161 backend public_www
3162 server srv1 192.168.0.1:80
3163 stats enable
3164 stats hide-version
3165 stats scope .
3166 stats uri /admin?stats
3167 stats realm Haproxy\ Statistics
3168 stats auth admin1:AdMiN123
3169 stats auth admin2:AdMiN321
3170
3171 # internal monitoring access (unlimited)
3172 backend private_monitoring
3173 stats enable
3174 stats uri /admin?stats
3175 stats refresh 5s
3176
3177 See also : "stats auth", "stats enable", "stats realm", "stats uri"
3178
3179
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003180timeout check <timeout>
3181 Set additional check timeout, but only after a connection has been already
3182 established.
3183
3184 May be used in sections: defaults | frontend | listen | backend
3185 yes | no | yes | yes
3186 Arguments:
3187 <timeout> is the timeout value specified in milliseconds by default, but
3188 can be in any other unit if the number is suffixed by the unit,
3189 as explained at the top of this document.
3190
3191 If set, haproxy uses min("timeout connect", "inter") as a connect timeout
3192 for check and "timeout check" as an additional read timeout. The "min" is
3193 used so that people running with *very* long "timeout connect" (eg. those
3194 who needed this due to the queue or tarpit) do not slow down their checks.
3195 Of course it is better to use "check queue" and "check tarpit" instead of
3196 long "timeout connect".
3197
3198 If "timeout check" is not set haproxy uses "inter" for complete check
3199 timeout (connect + read) exactly like all <1.3.15 version.
3200
3201 In most cases check request is much simpler and faster to handle than normal
3202 requests and people may want to kick out laggy servers so this timeout should
Willy Tarreau41a340d2008-01-22 12:25:31 +01003203 be smaller than "timeout server".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003204
3205 This parameter is specific to backends, but can be specified once for all in
3206 "defaults" sections. This is in fact one of the easiest solutions not to
3207 forget about it.
3208
Willy Tarreau41a340d2008-01-22 12:25:31 +01003209 See also: "timeout connect", "timeout queue", "timeout server",
3210 "timeout tarpit".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003211
3212
Willy Tarreau0ba27502007-12-24 16:55:16 +01003213timeout client <timeout>
3214timeout clitimeout <timeout> (deprecated)
3215 Set the maximum inactivity time on the client side.
3216 May be used in sections : defaults | frontend | listen | backend
3217 yes | yes | yes | no
3218 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003219 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01003220 can be in any other unit if the number is suffixed by the unit,
3221 as explained at the top of this document.
3222
3223 The inactivity timeout applies when the client is expected to acknowledge or
3224 send data. In HTTP mode, this timeout is particularly important to consider
3225 during the first phase, when the client sends the request, and during the
3226 response while it is reading data sent by the server. The value is specified
3227 in milliseconds by default, but can be in any other unit if the number is
3228 suffixed by the unit, as specified at the top of this document. In TCP mode
3229 (and to a lesser extent, in HTTP mode), it is highly recommended that the
3230 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003231 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01003232 losses by specifying timeouts that are slightly above multiples of 3 seconds
3233 (eg: 4 or 5 seconds).
3234
3235 This parameter is specific to frontends, but can be specified once for all in
3236 "defaults" sections. This is in fact one of the easiest solutions not to
3237 forget about it. An unspecified timeout results in an infinite timeout, which
3238 is not recommended. Such a usage is accepted and works but reports a warning
3239 during startup because it may results in accumulation of expired sessions in
3240 the system if the system's timeouts are not configured either.
3241
3242 This parameter replaces the old, deprecated "clitimeout". It is recommended
3243 to use it to write new configurations. The form "timeout clitimeout" is
3244 provided only by backwards compatibility but its use is strongly discouraged.
3245
3246 See also : "clitimeout", "timeout server".
3247
3248
3249timeout connect <timeout>
3250timeout contimeout <timeout> (deprecated)
3251 Set the maximum time to wait for a connection attempt to a server to succeed.
3252 May be used in sections : defaults | frontend | listen | backend
3253 yes | no | yes | yes
3254 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003255 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01003256 can be in any other unit if the number is suffixed by the unit,
3257 as explained at the top of this document.
3258
3259 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003260 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreau0ba27502007-12-24 16:55:16 +01003261 cover one or several TCP packet losses by specifying timeouts that are
3262 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003263 connect timeout also presets both queue and tarpit timeouts to the same value
3264 if these have not been specified.
Willy Tarreau0ba27502007-12-24 16:55:16 +01003265
3266 This parameter is specific to backends, but can be specified once for all in
3267 "defaults" sections. This is in fact one of the easiest solutions not to
3268 forget about it. An unspecified timeout results in an infinite timeout, which
3269 is not recommended. Such a usage is accepted and works but reports a warning
3270 during startup because it may results in accumulation of failed sessions in
3271 the system if the system's timeouts are not configured either.
3272
3273 This parameter replaces the old, deprecated "contimeout". It is recommended
3274 to use it to write new configurations. The form "timeout contimeout" is
3275 provided only by backwards compatibility but its use is strongly discouraged.
3276
Willy Tarreau41a340d2008-01-22 12:25:31 +01003277 See also: "timeout check", "timeout queue", "timeout server", "contimeout",
3278 "timeout tarpit".
Willy Tarreau0ba27502007-12-24 16:55:16 +01003279
3280
Willy Tarreau036fae02008-01-06 13:24:40 +01003281timeout http-request <timeout>
3282 Set the maximum allowed time to wait for a complete HTTP request
3283 May be used in sections : defaults | frontend | listen | backend
3284 yes | yes | yes | no
3285 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003286 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau036fae02008-01-06 13:24:40 +01003287 can be in any other unit if the number is suffixed by the unit,
3288 as explained at the top of this document.
3289
3290 In order to offer DoS protection, it may be required to lower the maximum
3291 accepted time to receive a complete HTTP request without affecting the client
3292 timeout. This helps protecting against established connections on which
3293 nothing is sent. The client timeout cannot offer a good protection against
3294 this abuse because it is an inactivity timeout, which means that if the
3295 attacker sends one character every now and then, the timeout will not
3296 trigger. With the HTTP request timeout, no matter what speed the client
3297 types, the request will be aborted if it does not complete in time.
3298
3299 Note that this timeout only applies to the header part of the request, and
3300 not to any data. As soon as the empty line is received, this timeout is not
3301 used anymore.
3302
3303 Generally it is enough to set it to a few seconds, as most clients send the
3304 full request immediately upon connection. Add 3 or more seconds to cover TCP
3305 retransmits but that's all. Setting it to very low values (eg: 50 ms) will
3306 generally work on local networks as long as there are no packet losses. This
3307 will prevent people from sending bare HTTP requests using telnet.
3308
3309 If this parameter is not set, the client timeout still applies between each
3310 chunk of the incoming request.
3311
3312 See also : "timeout client".
3313
Willy Tarreau844e3c52008-01-11 16:28:18 +01003314
3315timeout queue <timeout>
3316 Set the maximum time to wait in the queue for a connection slot to be free
3317 May be used in sections : defaults | frontend | listen | backend
3318 yes | no | yes | yes
3319 Arguments :
3320 <timeout> is the timeout value specified in milliseconds by default, but
3321 can be in any other unit if the number is suffixed by the unit,
3322 as explained at the top of this document.
3323
3324 When a server's maxconn is reached, connections are left pending in a queue
3325 which may be server-specific or global to the backend. In order not to wait
3326 indefinitely, a timeout is applied to requests pending in the queue. If the
3327 timeout is reached, it is considered that the request will almost never be
3328 served, so it is dropped and a 503 error is returned to the client.
3329
3330 The "timeout queue" statement allows to fix the maximum time for a request to
3331 be left pending in a queue. If unspecified, the same value as the backend's
3332 connection timeout ("timeout connect") is used, for backwards compatibility
3333 with older versions with no "timeout queue" parameter.
3334
3335 See also : "timeout connect", "contimeout".
3336
3337
3338timeout server <timeout>
3339timeout srvtimeout <timeout> (deprecated)
3340 Set the maximum inactivity time on the server side.
3341 May be used in sections : defaults | frontend | listen | backend
3342 yes | no | yes | yes
3343 Arguments :
3344 <timeout> is the timeout value specified in milliseconds by default, but
3345 can be in any other unit if the number is suffixed by the unit,
3346 as explained at the top of this document.
3347
3348 The inactivity timeout applies when the server is expected to acknowledge or
3349 send data. In HTTP mode, this timeout is particularly important to consider
3350 during the first phase of the server's response, when it has to send the
3351 headers, as it directly represents the server's processing time for the
3352 request. To find out what value to put there, it's often good to start with
3353 what would be considered as unacceptable response times, then check the logs
3354 to observe the response time distribution, and adjust the value accordingly.
3355
3356 The value is specified in milliseconds by default, but can be in any other
3357 unit if the number is suffixed by the unit, as specified at the top of this
3358 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
3359 recommended that the client timeout remains equal to the server timeout in
3360 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003361 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01003362 packet losses by specifying timeouts that are slightly above multiples of 3
3363 seconds (eg: 4 or 5 seconds minimum).
3364
3365 This parameter is specific to backends, but can be specified once for all in
3366 "defaults" sections. This is in fact one of the easiest solutions not to
3367 forget about it. An unspecified timeout results in an infinite timeout, which
3368 is not recommended. Such a usage is accepted and works but reports a warning
3369 during startup because it may results in accumulation of expired sessions in
3370 the system if the system's timeouts are not configured either.
3371
3372 This parameter replaces the old, deprecated "srvtimeout". It is recommended
3373 to use it to write new configurations. The form "timeout srvtimeout" is
3374 provided only by backwards compatibility but its use is strongly discouraged.
3375
3376 See also : "srvtimeout", "timeout client".
3377
3378
3379timeout tarpit <timeout>
3380 Set the duration for which tapitted connections will be maintained
3381 May be used in sections : defaults | frontend | listen | backend
3382 yes | yes | yes | yes
3383 Arguments :
3384 <timeout> is the tarpit duration specified in milliseconds by default, but
3385 can be in any other unit if the number is suffixed by the unit,
3386 as explained at the top of this document.
3387
3388 When a connection is tarpitted using "reqtarpit", it is maintained open with
3389 no activity for a certain amount of time, then closed. "timeout tarpit"
3390 defines how long it will be maintained open.
3391
3392 The value is specified in milliseconds by default, but can be in any other
3393 unit if the number is suffixed by the unit, as specified at the top of this
3394 document. If unspecified, the same value as the backend's connection timeout
3395 ("timeout connect") is used, for backwards compatibility with older versions
3396 with no "timeout tapit" parameter.
3397
3398 See also : "timeout connect", "contimeout".
3399
3400
3401transparent (deprecated)
3402 Enable client-side transparent proxying
3403 May be used in sections : defaults | frontend | listen | backend
3404 yes | yes | yes | no
3405 Arguments : none
3406
3407 This keyword was introduced in order to provide layer 7 persistence to layer
3408 3 load balancers. The idea is to use the OS's ability to redirect an incoming
3409 connection for a remote address to a local process (here HAProxy), and let
3410 this process know what address was initially requested. When this option is
3411 used, sessions without cookies will be forwarded to the original destination
3412 IP address of the incoming request (which should match that of another
3413 equipment), while requests with cookies will still be forwarded to the
3414 appropriate server.
3415
3416 The "transparent" keyword is deprecated, use "option transparent" instead.
3417
3418 Note that contrary to a common belief, this option does NOT make HAProxy
3419 present the client's IP to the server when establishing the connection.
3420
3421 Use of this option is really discouraged, and since no really valid use of it
3422 has been reported for years, it will probably be removed in future versions.
3423
3424 See also: "option transparent"
3425
3426
3427use_backend <backend> if <condition>
3428use_backend <backend> unless <condition>
3429 Switch to a specific backend if/unless a Layer 7 condition is matched.
3430 May be used in sections : defaults | frontend | listen | backend
3431 no | yes | yes | no
3432 Arguments :
3433 <backend> is the name of a valid backend or "listen" section.
3434
3435 <condition> is a condition composed of ACLs, as described in section 2.3.
3436
3437 When doing content-switching, connections arrive on a frontend and are then
3438 dispatched to various backends depending on a number of conditions. The
3439 relation between the conditions and the backends is described with the
3440 "use_backend" keyword. This is supported only in HTTP mode.
3441
3442 There may be as many "use_backend" rules as desired. All of these rules are
3443 evaluated in their declaration order, and the first one which matches will
3444 assign the backend.
3445
3446 In the first form, the backend will be used if the condition is met. In the
3447 second form, the backend will be used if the condition is not met. If no
3448 condition is valid, the backend defined with "default_backend" will be used.
3449 If no default backend is defined, either the servers in the same section are
3450 used (in case of a "listen" section) or, in case of a frontend, no server is
3451 used and a 503 service unavailable response is returned.
3452
3453 See also: "default_backend" and section 2.3 about ACLs.
3454
Willy Tarreau036fae02008-01-06 13:24:40 +01003455
Willy Tarreau0ba27502007-12-24 16:55:16 +010034562.3) Using ACLs
Willy Tarreau6a06a402007-07-15 20:15:28 +02003457---------------
3458
3459The use of Access Control Lists (ACL) provides a flexible solution to perform
Willy Tarreau0ba27502007-12-24 16:55:16 +01003460content switching and generally to take decisions based on content extracted
3461from the request, the response or any environmental status. The principle is
3462simple :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003463
3464 - define test criteria with sets of values
3465 - perform actions only if a set of tests is valid
3466
3467The actions generally consist in blocking the request, or selecting a backend.
3468
3469In order to define a test, the "acl" keyword is used. The syntax is :
3470
3471 acl <aclname> <criterion> [flags] [operator] <value> ...
3472
Willy Tarreau0ba27502007-12-24 16:55:16 +01003473This creates a new ACL <aclname> or completes an existing one with new tests.
3474Those tests apply to the portion of request/response specified in <criterion>
Willy Tarreau6a06a402007-07-15 20:15:28 +02003475and may be adjusted with optional flags [flags]. Some criteria also support
3476an operator which may be specified before the set of values. The values are
3477of the type supported by the criterion, and are separated by spaces.
3478
Willy Tarreau0ba27502007-12-24 16:55:16 +01003479ACL names must be formed from upper and lower case letters, digits, '-' (dash),
3480'_' (underscore) , '.' (dot) and ':' (colon). ACL names are case-sensitive,
3481which means that "my_acl" and "My_Acl" are two different ACLs.
3482
3483There is no enforced limit to the number of ACLs. The unused ones do not affect
Willy Tarreau6a06a402007-07-15 20:15:28 +02003484performance, they just consume a small amount of memory.
3485
Willy Tarreau0ba27502007-12-24 16:55:16 +01003486The following ACL flags are currently supported :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003487
3488 -i : ignore case during matching.
3489 -- : force end of flags. Useful when a string looks like one of the flags.
3490
3491Supported types of values are :
Willy Tarreau0ba27502007-12-24 16:55:16 +01003492
Willy Tarreau6a06a402007-07-15 20:15:28 +02003493 - integers or integer ranges
3494 - strings
3495 - regular expressions
3496 - IP addresses and networks
3497
3498
Willy Tarreau0ba27502007-12-24 16:55:16 +010034992.3.1) Matching integers
Willy Tarreau6a06a402007-07-15 20:15:28 +02003500------------------------
3501
3502Matching integers is special in that ranges and operators are permitted. Note
3503that integer matching only applies to positive values. A range is a value
3504expressed with a lower and an upper bound separated with a colon, both of which
3505may be omitted.
3506
3507For instance, "1024:65535" is a valid range to represent a range of
3508unprivileged ports, and "1024:" would also work. "0:1023" is a valid
3509representation of privileged ports, and ":1023" would also work.
3510
3511For an easier usage, comparison operators are also supported. Note that using
Willy Tarreau0ba27502007-12-24 16:55:16 +01003512operators with ranges does not make much sense and is strongly discouraged.
3513Similarly, it does not make much sense to perform order comparisons with a set
3514of values.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003515
Willy Tarreau0ba27502007-12-24 16:55:16 +01003516Available operators for integer matching are :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003517
3518 eq : true if the tested value equals at least one value
3519 ge : true if the tested value is greater than or equal to at least one value
3520 gt : true if the tested value is greater than at least one value
3521 le : true if the tested value is less than or equal to at least one value
3522 lt : true if the tested value is less than at least one value
3523
Willy Tarreau0ba27502007-12-24 16:55:16 +01003524For instance, the following ACL matches any negative Content-Length header :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003525
3526 acl negative-length hdr_val(content-length) lt 0
3527
3528
Willy Tarreau0ba27502007-12-24 16:55:16 +010035292.3.2) Matching strings
Willy Tarreau6a06a402007-07-15 20:15:28 +02003530-----------------------
3531
3532String matching applies to verbatim strings as they are passed, with the
3533exception of the backslash ("\") which makes it possible to escape some
3534characters such as the space. If the "-i" flag is passed before the first
3535string, then the matching will be performed ignoring the case. In order
3536to match the string "-i", either set it second, or pass the "--" flag
Willy Tarreau0ba27502007-12-24 16:55:16 +01003537before the first string. Same applies of course to match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02003538
3539
Willy Tarreau0ba27502007-12-24 16:55:16 +010035402.3.3) Matching regular expressions (regexes)
Willy Tarreau6a06a402007-07-15 20:15:28 +02003541---------------------------------------------
3542
3543Just like with string matching, regex matching applies to verbatim strings as
3544they are passed, with the exception of the backslash ("\") which makes it
3545possible to escape some characters such as the space. If the "-i" flag is
3546passed before the first regex, then the matching will be performed ignoring
3547the case. In order to match the string "-i", either set it second, or pass
Willy Tarreau0ba27502007-12-24 16:55:16 +01003548the "--" flag before the first string. Same principle applies of course to
3549match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02003550
3551
Willy Tarreau0ba27502007-12-24 16:55:16 +010035522.3.4) Matching IPv4 addresses
3553------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02003554
3555IPv4 addresses values can be specified either as plain addresses or with a
3556netmask appended, in which case the IPv4 address matches whenever it is
3557within the network. Plain addresses may also be replaced with a resolvable
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003558host name, but this practice is generally discouraged as it makes it more
Willy Tarreau0ba27502007-12-24 16:55:16 +01003559difficult to read and debug configurations. If hostnames are used, you should
3560at least ensure that they are present in /etc/hosts so that the configuration
3561does not depend on any random DNS match at the moment the configuration is
3562parsed.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003563
3564
Willy Tarreau0ba27502007-12-24 16:55:16 +010035652.3.5) Available matching criteria
Willy Tarreau6a06a402007-07-15 20:15:28 +02003566----------------------------------
3567
Willy Tarreau0ba27502007-12-24 16:55:16 +010035682.3.5.1) Matching at Layer 4 and below
3569--------------------------------------
3570
3571A first set of criteria applies to information which does not require any
3572analysis of the request or response contents. Those generally include TCP/IP
3573addresses and ports, as well as internal values independant on the stream.
3574
Willy Tarreau6a06a402007-07-15 20:15:28 +02003575always_false
3576 This one never matches. All values and flags are ignored. It may be used as
3577 a temporary replacement for another one when adjusting configurations.
3578
3579always_true
3580 This one always matches. All values and flags are ignored. It may be used as
3581 a temporary replacement for another one when adjusting configurations.
3582
3583src <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003584 Applies to the client's IPv4 address. It is usually used to limit access to
Willy Tarreau6a06a402007-07-15 20:15:28 +02003585 certain resources such as statistics. Note that it is the TCP-level source
3586 address which is used, and not the address of a client behind a proxy.
3587
3588src_port <integer>
3589 Applies to the client's TCP source port. This has a very limited usage.
3590
3591dst <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003592 Applies to the local IPv4 address the client connected to. It can be used to
Willy Tarreau6a06a402007-07-15 20:15:28 +02003593 switch to a different backend for some alternative addresses.
3594
3595dst_port <integer>
3596 Applies to the local port the client connected to. It can be used to switch
3597 to a different backend for some alternative ports.
3598
3599dst_conn <integer>
3600 Applies to the number of currently established connections on the frontend,
3601 including the one being evaluated. It can be used to either return a sorry
Willy Tarreau0ba27502007-12-24 16:55:16 +01003602 page before hard-blocking, or to use a specific backend to drain new requests
Willy Tarreau6a06a402007-07-15 20:15:28 +02003603 when the farm is considered saturated.
3604
Willy Tarreau0ba27502007-12-24 16:55:16 +01003605nbsrv <integer>
3606nbsrv(backend) <integer>
3607 Returns true when the number of usable servers of either the current backend
3608 or the named backend matches the values or ranges specified. This is used to
3609 switch to an alternate backend when the number of servers is too low to
3610 to handle some load. It is useful to report a failure when combined with
3611 "monitor fail".
3612
3613
36142.3.5.2) Matching at Layer 7
3615----------------------------
3616
3617A second set of criteria applies to information which can be found at the
3618application layer (layer 7). Those require that a full HTTP request has been
3619read, and are only evaluated then. They may require slightly more CPU resources
3620than the layer 4 ones, but not much since the request and response are indexed.
3621
Willy Tarreau6a06a402007-07-15 20:15:28 +02003622method <string>
3623 Applies to the method in the HTTP request, eg: "GET". Some predefined ACL
3624 already check for most common methods.
3625
3626req_ver <string>
3627 Applies to the version string in the HTTP request, eg: "1.0". Some predefined
3628 ACL already check for versions 1.0 and 1.1.
3629
3630path <string>
3631 Returns true when the path part of the request, which starts at the first
3632 slash and ends before the question mark, equals one of the strings. It may be
3633 used to match known files, such as /favicon.ico.
3634
3635path_beg <string>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003636 Returns true when the path begins with one of the strings. This can be used
3637 to send certain directory names to alternative backends.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003638
3639path_end <string>
3640 Returns true when the path ends with one of the strings. This may be used to
3641 control file name extension.
3642
3643path_sub <string>
3644 Returns true when the path contains one of the strings. It can be used to
3645 detect particular patterns in paths, such as "../" for example. See also
3646 "path_dir".
3647
3648path_dir <string>
3649 Returns true when one of the strings is found isolated or delimited with
3650 slashes in the path. This is used to perform filename or directory name
3651 matching without the risk of wrong match due to colliding prefixes. See also
3652 "url_dir" and "path_sub".
3653
3654path_dom <string>
3655 Returns true when one of the strings is found isolated or delimited with dots
3656 in the path. This may be used to perform domain name matching in proxy
3657 requests. See also "path_sub" and "url_dom".
3658
3659path_reg <regex>
3660 Returns true when the path matches one of the regular expressions. It can be
3661 used any time, but it is important to remember that regex matching is slower
3662 than other methods. See also "url_reg" and all "path_" criteria.
3663
3664url <string>
3665 Applies to the whole URL passed in the request. The only real use is to match
3666 "*", for which there already is a predefined ACL.
3667
3668url_beg <string>
3669 Returns true when the URL begins with one of the strings. This can be used to
3670 check whether a URL begins with a slash or with a protocol scheme.
3671
3672url_end <string>
3673 Returns true when the URL ends with one of the strings. It has very limited
3674 use. "path_end" should be used instead for filename matching.
3675
3676url_sub <string>
3677 Returns true when the URL contains one of the strings. It can be used to
3678 detect particular patterns in query strings for example. See also "path_sub".
3679
3680url_dir <string>
3681 Returns true when one of the strings is found isolated or delimited with
3682 slashes in the URL. This is used to perform filename or directory name
3683 matching without the risk of wrong match due to colliding prefixes. See also
3684 "path_dir" and "url_sub".
3685
3686url_dom <string>
3687 Returns true when one of the strings is found isolated or delimited with dots
3688 in the URL. This is used to perform domain name matching without the risk of
3689 wrong match due to colliding prefixes. See also "url_sub".
3690
3691url_reg <regex>
3692 Returns true when the URL matches one of the regular expressions. It can be
3693 used any time, but it is important to remember that regex matching is slower
3694 than other methods. See also "path_reg" and all "url_" criteria.
3695
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01003696url_ip <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003697 Applies to the IP address specified in the absolute URI in an HTTP request.
3698 It can be used to prevent access to certain resources such as local network.
Willy Tarreau198a7442008-01-17 12:05:32 +01003699 It is useful with option "http_proxy".
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01003700
3701url_port <integer>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003702 Applies to the port specified in the absolute URI in an HTTP request. It can
3703 be used to prevent access to certain resources. It is useful with option
Willy Tarreau198a7442008-01-17 12:05:32 +01003704 "http_proxy". Note that if the port is not specified in the request, port 80
Willy Tarreau0ba27502007-12-24 16:55:16 +01003705 is assumed.
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01003706
Willy Tarreau6a06a402007-07-15 20:15:28 +02003707hdr <string>
3708hdr(header) <string>
3709 Note: all the "hdr*" matching criteria either apply to all headers, or to a
3710 particular header whose name is passed between parenthesis and without any
Willy Tarreau0ba27502007-12-24 16:55:16 +01003711 space. The header name is not case-sensitive. The header matching complies
3712 with RFC2616, and treats as separate headers all values delimited by commas.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003713
3714 The "hdr" criteria returns true if any of the headers matching the criteria
Willy Tarreau0ba27502007-12-24 16:55:16 +01003715 match any of the strings. This can be used to check exact for values. For
Willy Tarreau6a06a402007-07-15 20:15:28 +02003716 instance, checking that "connection: close" is set :
3717
3718 hdr(Connection) -i close
3719
3720hdr_beg <string>
3721hdr_beg(header) <string>
3722 Returns true when one of the headers begins with one of the strings. See
3723 "hdr" for more information on header matching.
3724
3725hdr_end <string>
3726hdr_end(header) <string>
3727 Returns true when one of the headers ends with one of the strings. See "hdr"
3728 for more information on header matching.
3729
3730hdr_sub <string>
3731hdr_sub(header) <string>
3732 Returns true when one of the headers contains one of the strings. See "hdr"
3733 for more information on header matching.
3734
3735hdr_dir <string>
3736hdr_dir(header) <string>
3737 Returns true when one of the headers contains one of the strings either
3738 isolated or delimited by slashes. This is used to perform filename or
3739 directory name matching, and may be used with Referer. See "hdr" for more
3740 information on header matching.
3741
3742hdr_dom <string>
3743hdr_dom(header) <string>
3744 Returns true when one of the headers contains one of the strings either
3745 isolated or delimited by dots. This is used to perform domain name matching,
3746 and may be used with the Host header. See "hdr" for more information on
3747 header matching.
3748
3749hdr_reg <regex>
3750hdr_reg(header) <regex>
3751 Returns true when one of the headers matches of the regular expressions. It
3752 can be used at any time, but it is important to remember that regex matching
3753 is slower than other methods. See also other "hdr_" criteria, as well as
3754 "hdr" for more information on header matching.
3755
3756hdr_val <integer>
3757hdr_val(header) <integer>
3758 Returns true when one of the headers starts with a number which matches the
3759 values or ranges specified. This may be used to limit content-length to
3760 acceptable values for example. See "hdr" for more information on header
3761 matching.
3762
3763hdr_cnt <integer>
3764hdr_cnt(header) <integer>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003765 Returns true when the number of occurrence of the specified header matches
3766 the values or ranges specified. It is important to remember that one header
3767 line may count as several headers if it has several values. This is used to
3768 detect presence, absence or abuse of a specific header, as well as to block
3769 request smugling attacks by rejecting requests which contain more than one
3770 of certain headers. See "hdr" for more information on header matching.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003771
3772
Willy Tarreau0ba27502007-12-24 16:55:16 +010037732.3.6) Pre-defined ACLs
Willy Tarreau6a06a402007-07-15 20:15:28 +02003774-----------------------
3775
3776Some predefined ACLs are hard-coded so that they do not have to be declared in
3777every frontend which needs them. They all have their names in upper case in
Willy Tarreau0ba27502007-12-24 16:55:16 +01003778order to avoid confusion. Their equivalence is provided below. Please note that
3779only the first three ones are not layer 7 based.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003780
3781ACL name Equivalent to Usage
3782---------------+-----------------------------+---------------------------------
3783TRUE always_true 1 always match
3784FALSE always_false 0 never match
3785LOCALHOST src 127.0.0.1/8 match connection from local host
3786HTTP_1.0 req_ver 1.0 match HTTP version 1.0
3787HTTP_1.1 req_ver 1.1 match HTTP version 1.1
3788METH_CONNECT method CONNECT match HTTP CONNECT method
3789METH_GET method GET HEAD match HTTP GET or HEAD method
3790METH_HEAD method HEAD match HTTP HEAD method
3791METH_OPTIONS method OPTIONS match HTTP OPTIONS method
3792METH_POST method POST match HTTP POST method
3793METH_TRACE method TRACE match HTTP TRACE method
3794HTTP_URL_ABS url_reg ^[^/:]*:// match absolute URL with scheme
3795HTTP_URL_SLASH url_beg / match URL begining with "/"
3796HTTP_URL_STAR url * match URL equal to "*"
3797HTTP_CONTENT hdr_val(content-length) gt 0 match an existing content-length
3798---------------+-----------------------------+---------------------------------
3799
3800
Willy Tarreau0ba27502007-12-24 16:55:16 +010038012.3.7) Using ACLs to form conditions
Willy Tarreau6a06a402007-07-15 20:15:28 +02003802------------------------------------
3803
3804Some actions are only performed upon a valid condition. A condition is a
3805combination of ACLs with operators. 3 operators are supported :
3806
3807 - AND (implicit)
3808 - OR (explicit with the "or" keyword or the "||" operator)
3809 - Negation with the exclamation mark ("!")
3810
3811A condition is formed as a disjonctive form :
3812
3813 [!]acl1 [!]acl2 ... [!]acln { or [!]acl1 [!]acl2 ... [!]acln } ...
3814
3815Such conditions are generally used after an "if" or "unless" statement,
3816indicating when the condition will trigger the action.
3817
3818For instance, to block HTTP requests to the "*" URL with methods other than
Willy Tarreau0ba27502007-12-24 16:55:16 +01003819"OPTIONS", as well as POST requests without content-length, and GET or HEAD
3820requests with a content-length greater than 0, and finally every request which
3821is not either GET/HEAD/POST/OPTIONS !
Willy Tarreau6a06a402007-07-15 20:15:28 +02003822
3823 acl missing_cl hdr_cnt(Content-length) eq 0
3824 block if HTTP_URL_STAR !METH_OPTIONS || METH_POST missing_cl
3825 block if METH_GET HTTP_CONTENT
3826 block unless METH_GET or METH_POST or METH_OPTIONS
3827
3828To select a different backend for requests to static contents on the "www" site
3829and to every request on the "img", "video", "download" and "ftp" hosts :
3830
3831 acl url_static path_beg /static /images /img /css
3832 acl url_static path_end .gif .png .jpg .css .js
3833 acl host_www hdr_beg(host) -i www
3834 acl host_static hdr_beg(host) -i img. video. download. ftp.
3835
3836 # now use backend "static" for all static-only hosts, and for static urls
3837 # of host "www". Use backend "www" for the rest.
3838 use_backend static if host_static or host_www url_static
3839 use_backend www if host_www
3840
Willy Tarreau844e3c52008-01-11 16:28:18 +01003841See section 2.2 for detailed help on the "block" and "use_backend" keywords.
Willy Tarreaudbc36f62007-11-30 12:29:11 +01003842
3843
Willy Tarreauc7246fc2007-12-02 17:31:20 +010038442.4) Server options
Willy Tarreau5764b382007-11-30 17:46:49 +01003845-------------------
3846
Willy Tarreau198a7442008-01-17 12:05:32 +01003847The "server" keyword supports a certain number of settings which are all passed
3848as arguments on the server line. The order in which those arguments appear does
3849not count, and they are all optional. Some of those settings are single words
3850(booleans) while others expect one or several values after them. In this case,
3851the values must immediately follow the setting name. All those settings must be
3852specified after the server's address if they are used :
3853
3854 server <name> <address>[:port] [settings ...]
3855
3856The currently supported settings are the following ones.
3857
3858addr <ipv4>
3859 Using the "addr" parameter, it becomes possible to use a different IP address
3860 to send health-checks. On some servers, it may be desirable to dedicate an IP
3861 address to specific component able to perform complex tests which are more
3862 suitable to health-checks than the application. This parameter is ignored if
3863 the "check" parameter is not set. See also the "port" parameter.
3864
3865backup
3866 When "backup" is present on a server line, the server is only used in load
3867 balancing when all other non-backup servers are unavailable. Requests coming
3868 with a persistence cookie referencing the server will always be served
3869 though. By default, only the first operational backup server is used, unless
Willy Tarreauaf85d942008-01-30 10:47:10 +01003870 the "allbackups" option is set in the backend. See also the "allbackups"
Willy Tarreau198a7442008-01-17 12:05:32 +01003871 option.
3872
3873check
3874 This option enables health checks on the server. By default, a server is
3875 always considered available. If "check" is set, the server will receive
3876 periodic health checks to ensure that it is really able to serve requests.
3877 The default address and port to send the tests to are those of the server,
3878 and the default source is the same as the one defined in the backend. It is
3879 possible to change the address using the "addr" parameter, the port using the
3880 "port" parameter, the source address using the "source" address, and the
3881 interval and timers using the "inter", "rise" and "fall" parameters. The
3882 request method is define in the backend using the "httpchk", "smtpchk",
3883 and "ssl-hello-chk" options. Please refer to those options and parameters for
3884 more information.
3885
3886cookie <value>
3887 The "cookie" parameter sets the cookie value assigned to the server to
3888 <value>. This value will be checked in incoming requests, and the first
3889 operational server possessing the same value will be selected. In return, in
3890 cookie insertion or rewrite modes, this value will be assigned to the cookie
3891 sent to the client. There is nothing wrong in having several servers sharing
3892 the same cookie value, and it is in fact somewhat common between normal and
3893 backup servers. See also the "cookie" keyword in backend section.
3894
3895fall <count>
3896 The "fall" parameter states that a server will be considered as dead after
3897 <count> consecutive unsuccessful health checks. This value defaults to 3 if
3898 unspecified. See also the "check", "inter" and "rise" parameters.
3899
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01003900id <value>
3901 Set a persistent value for server ID. Must be unique and larger than 1000, as
3902 smaller values are reserved for auto-assigned ids.
3903
Willy Tarreau198a7442008-01-17 12:05:32 +01003904inter <delay>
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003905fastinter <delay>
3906downinter <delay>
Willy Tarreau198a7442008-01-17 12:05:32 +01003907 The "inter" parameter sets the interval between two consecutive health checks
3908 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01003909 It is also possible to use "fastinter" and "downinter" to optimize delays
Willy Tarreau41a340d2008-01-22 12:25:31 +01003910 between checks depending on the server state :
3911
3912 Server state | Interval used
3913 ---------------------------------+-----------------------------------------
3914 UP 100% (non-transitional) | "inter"
3915 ---------------------------------+-----------------------------------------
3916 Transitionally UP (going down), |
3917 Transitionally DOWN (going up), | "fastinter" if set, "inter" otherwise.
3918 or yet unchecked. |
3919 ---------------------------------+-----------------------------------------
3920 DOWN 100% (non-transitional) | "downinter" if set, "inter" otherwise.
3921 ---------------------------------+-----------------------------------------
3922
3923 Just as with every other time-based parameter, they can be entered in any
3924 other explicit unit among { us, ms, s, m, h, d }. The "inter" parameter also
3925 serves as a timeout for health checks sent to servers if "timeout check" is
3926 not set. In order to reduce "resonance" effects when multiple servers are
3927 hosted on the same hardware, the health-checks of all servers are started
3928 with a small time offset between them. It is also possible to add some random
3929 noise in the health checks interval using the global "spread-checks"
3930 keyword. This makes sense for instance when a lot of backends use the same
3931 servers.
Willy Tarreau198a7442008-01-17 12:05:32 +01003932
3933maxconn <maxconn>
3934 The "maxconn" parameter specifies the maximal number of concurrent
3935 connections that will be sent to this server. If the number of incoming
3936 concurrent requests goes higher than this value, they will be queued, waiting
3937 for a connection to be released. This parameter is very important as it can
3938 save fragile servers from going down under extreme loads. If a "minconn"
3939 parameter is specified, the limit becomes dynamic. The default value is "0"
3940 which means unlimited. See also the "minconn" and "maxqueue" parameters, and
3941 the backend's "fullconn" keyword.
3942
3943maxqueue <maxqueue>
3944 The "maxqueue" parameter specifies the maximal number of connections which
3945 will wait in the queue for this server. If this limit is reached, next
3946 requests will be redispatched to other servers instead of indefinitely
3947 waiting to be served. This will break persistence but may allow people to
3948 quickly re-log in when the server they try to connect to is dying. The
3949 default value is "0" which means the queue is unlimited. See also the
3950 "maxconn" and "minconn" parameters.
3951
3952minconn <minconn>
3953 When the "minconn" parameter is set, the maxconn limit becomes a dynamic
3954 limit following the backend's load. The server will always accept at least
3955 <minconn> connections, never more than <maxconn>, and the limit will be on
3956 the ramp between both values when the backend has less than <fullconn>
3957 concurrent connections. This makes it possible to limit the load on the
3958 server during normal loads, but push it further for important loads without
3959 overloading the server during exceptionnal loads. See also the "maxconn"
3960 and "maxqueue" parameters, as well as the "fullconn" backend keyword.
3961
3962port <port>
3963 Using the "port" parameter, it becomes possible to use a different port to
3964 send health-checks. On some servers, it may be desirable to dedicate a port
3965 to a specific component able to perform complex tests which are more suitable
3966 to health-checks than the application. It is common to run a simple script in
3967 inetd for instance. This parameter is ignored if the "check" parameter is not
3968 set. See also the "addr" parameter.
3969
Willy Tarreau21d2af32008-02-14 20:25:24 +01003970redir <prefix>
3971 The "redir" parameter enables the redirection mode for all GET and HEAD
3972 requests addressing this server. This means that instead of having HAProxy
3973 forward the request to the server, it will send an "HTTP 302" response with
3974 the "Location" header composed of this prefix immediately followed by the
3975 requested URI beginning at the leading '/' of the path component. That means
3976 that no trailing slash should be used after <prefix>. All invalid requests
3977 will be rejected, and all non-GET or HEAD requests will be normally served by
3978 the server. Note that since the response is completely forged, no header
3979 mangling nor cookie insertion is possible in the respose. However, cookies in
3980 requests are still analysed, making this solution completely usable to direct
3981 users to a remote location in case of local disaster. Main use consists in
3982 increasing bandwidth for static servers by having the clients directly
3983 connect to them. Note: never use a relative location here, it would cause a
3984 loop between the client and HAProxy!
3985
3986 Example : server srv1 192.168.1.1:80 redir http://image1.mydomain.com check
3987
Willy Tarreau198a7442008-01-17 12:05:32 +01003988rise <count>
3989 The "rise" parameter states that a server will be considered as operational
3990 after <count> consecutive successful health checks. This value defaults to 2
3991 if unspecified. See also the "check", "inter" and "fall" parameters.
3992
Willy Tarreau5764b382007-11-30 17:46:49 +01003993slowstart <start_time_in_ms>
Willy Tarreau198a7442008-01-17 12:05:32 +01003994 The "slowstart" parameter for a server accepts a value in milliseconds which
Willy Tarreau5764b382007-11-30 17:46:49 +01003995 indicates after how long a server which has just come back up will run at
Willy Tarreaubefdff12007-12-02 22:27:38 +01003996 full speed. Just as with every other time-based parameter, it can be entered
3997 in any other explicit unit among { us, ms, s, m, h, d }. The speed grows
3998 linearly from 0 to 100% during this time. The limitation applies to two
3999 parameters :
Willy Tarreau5764b382007-11-30 17:46:49 +01004000
4001 - maxconn: the number of connections accepted by the server will grow from 1
4002 to 100% of the usual dynamic limit defined by (minconn,maxconn,fullconn).
4003
4004 - weight: when the backend uses a dynamic weighted algorithm, the weight
4005 grows linearly from 1 to 100%. In this case, the weight is updated at every
Willy Tarreau198a7442008-01-17 12:05:32 +01004006 health-check. For this reason, it is important that the "inter" parameter
4007 is smaller than the "slowstart", in order to maximize the number of steps.
Willy Tarreau5764b382007-11-30 17:46:49 +01004008
4009 The slowstart never applies when haproxy starts, otherwise it would cause
4010 trouble to running servers. It only applies when a server has been previously
4011 seen as failed.
4012
Willy Tarreau198a7442008-01-17 12:05:32 +01004013source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
4014 The "source" parameter sets the source address which will be used when
4015 connecting to the server. It follows the exact same parameters and principle
4016 as the backend "source" keyword, except that it only applies to the server
4017 referencing it. Please consult the "source" keyword for details.
4018
Krzysztof Piotr Oledzkic8b16fc2008-02-18 01:26:35 +01004019track [<proxy>/]<server>
4020 This option enables ability to set the current state of the server by
4021 tracking another one. Only a server with checks enabled can be tracked
4022 so it is not possible for example to track a server that tracks another
4023 one. If <proxy> is omitted the current one is used. If disable-on-404 is
4024 used, it has to be enabled on both proxies.
4025
Willy Tarreau198a7442008-01-17 12:05:32 +01004026weight <weight>
4027 The "weight" parameter is used to adjust the server's weight relative to
4028 other servers. All servers will receive a load proportional to their weight
4029 relative to the sum of all weights, so the higher the weight, the higher the
4030 load. The default weight is 1, and the maximal value is 255. If this
4031 parameter is used to distribute the load according to server's capacity, it
4032 is recommended to start with values which can both grow and shrink, for
4033 instance between 10 and 100 to leave enough room above and below for later
4034 adjustments.
4035
Willy Tarreauced27012008-01-17 20:35:34 +01004036
40372.5) HTTP header manipulation
4038-----------------------------
4039
4040In HTTP mode, it is possible to rewrite, add or delete some of the request and
4041response headers based on regular expressions. It is also possible to block a
4042request or a response if a particular header matches a regular expression,
4043which is enough to stop most elementary protocol attacks, and to protect
4044against information leak from the internal network. But there is a limitation
4045to this : since HAProxy's HTTP engine does not support keep-alive, only headers
4046passed during the first request of a TCP session will be seen. All subsequent
4047headers will be considered data only and not analyzed. Furthermore, HAProxy
4048never touches data contents, it stops analysis at the end of headers.
4049
4050This section covers common usage of the following keywords, described in detail
4051in section 2.2.1 :
4052
4053 - reqadd <string>
4054 - reqallow <search>
4055 - reqiallow <search>
4056 - reqdel <search>
4057 - reqidel <search>
4058 - reqdeny <search>
4059 - reqideny <search>
4060 - reqpass <search>
4061 - reqipass <search>
4062 - reqrep <search> <replace>
4063 - reqirep <search> <replace>
4064 - reqtarpit <search>
4065 - reqitarpit <search>
4066 - rspadd <string>
4067 - rspdel <search>
4068 - rspidel <search>
4069 - rspdeny <search>
4070 - rspideny <search>
4071 - rsprep <search> <replace>
4072 - rspirep <search> <replace>
4073
4074With all these keywords, the same conventions are used. The <search> parameter
4075is a POSIX extended regular expression (regex) which supports grouping through
4076parenthesis (without the backslash). Spaces and other delimiters must be
4077prefixed with a backslash ('\') to avoid confusion with a field delimiter.
4078Other characters may be prefixed with a backslash to change their meaning :
4079
4080 \t for a tab
4081 \r for a carriage return (CR)
4082 \n for a new line (LF)
4083 \ to mark a space and differentiate it from a delimiter
4084 \# to mark a sharp and differentiate it from a comment
4085 \\ to use a backslash in a regex
4086 \\\\ to use a backslash in the text (*2 for regex, *2 for haproxy)
4087 \xXX to write the ASCII hex code XX as in the C language
4088
4089The <replace> parameter contains the string to be used to replace the largest
4090portion of text matching the regex. It can make use of the special characters
4091above, and can reference a substring which is delimited by parenthesis in the
4092regex, by writing a backslash ('\') immediately followed by one digit from 0 to
Willy Tarreaud2a4aa22008-01-31 15:28:22 +010040939 indicating the group position (0 designating the entire line). This practice
Willy Tarreauced27012008-01-17 20:35:34 +01004094is very common to users of the "sed" program.
4095
4096The <string> parameter represents the string which will systematically be added
4097after the last header line. It can also use special character sequences above.
4098
4099Notes related to these keywords :
4100---------------------------------
4101 - these keywords are not always convenient to allow/deny based on header
4102 contents. It is strongly recommended to use ACLs with the "block" keyword
4103 instead, resulting in far more flexible and manageable rules.
4104
4105 - lines are always considered as a whole. It is not possible to reference
4106 a header name only or a value only. This is important because of the way
4107 headers are written (notably the number of spaces after the colon).
4108
4109 - the first line is always considered as a header, which makes it possible to
4110 rewrite or filter HTTP requests URIs or response codes, but in turn makes
4111 it harder to distinguish between headers and request line. The regex prefix
4112 ^[^\ \t]*[\ \t] matches any HTTP method followed by a space, and the prefix
4113 ^[^ \t:]*: matches any header name followed by a colon.
4114
4115 - for performances reasons, the number of characters added to a request or to
4116 a response is limited at build time to values between 1 and 4 kB. This
4117 should normally be far more than enough for most usages. If it is too short
4118 on occasional usages, it is possible to gain some space by removing some
4119 useless headers before adding new ones.
4120
4121 - keywords beginning with "reqi" and "rspi" are the same as their couterpart
4122 without the 'i' letter except that they ignore case when matching patterns.
4123
4124 - when a request passes through a frontend then a backend, all req* rules
4125 from the frontend will be evaluated, then all req* rules from the backend
4126 will be evaluated. The reverse path is applied to responses.
4127
4128 - req* statements are applied after "block" statements, so that "block" is
4129 always the first one, but before "use_backend" in order to permit rewriting
4130 before switching.
4131
Willy Tarreau5764b382007-11-30 17:46:49 +01004132
Willy Tarreauced27012008-01-17 20:35:34 +010041332.6) Logging
Willy Tarreau844e3c52008-01-11 16:28:18 +01004134------------
4135
4136[to do]
4137
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +010041382.7) CSV format
4139
4140 0. pxname: proxy name
4141 1. svname: service name (FRONTEND for frontend, BACKEND for backend, any name
4142 for server)
4143 2. qcur: current queued requests
4144 3. qmax: max queued requests
4145 4. scur: current sessions
4146 5. smax: max sessions
4147 6. slim: sessions limit
4148 7. stot: total sessions
4149 8. bin: bytes in
4150 9. bout: bytes out
4151 10. dreq: denied requests
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +01004152 11. dresp: denied responses
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01004153 12. ereq: request errors
4154 13. econ: connection errors
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +01004155 14. eresp: response errors
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01004156 15. wretr: retries (warning)
4157 16. wredis: redispatches (warning)
4158 17. status: status (UP/DOWN/...)
4159 18. weight: server weight (server), total weight (backend)
4160 19. act: server is active (server), number of active servers (backend)
4161 20. bck: server is backup (server), number of backup servers (backend)
4162 21. chkfail: number of failed checks
4163 22. chkdown: number of UP->DOWN transitions
4164 23. lastchg: last status change (in seconds)
4165 24. downtime: total downtime (in seconds)
4166 25. qlimit: queue limit
4167 26. pid: process id (0 for first instance, 1 for second, ...)
4168 27. iid: unique proxy id
4169 28. sid: service id (unique inside a proxy)
4170 29. throttle: warm up status
4171 30. lbtot: total number of times a server was selected
4172 31. tracked: id of proxy/server if tracking is enabled
4173 32. type (0=frontend, 1=backend, 2=server)
Willy Tarreau844e3c52008-01-11 16:28:18 +01004174
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +010041752.8) Unix Socket commands
4176
4177 - "show stat [<iid> <type> <sid>]": dump statistics in the cvs format. By
4178 passing id, type and sid it is possible to dump only selected items:
4179 - iid is a proxy id, -1 to dump everything
4180 - type selects type of dumpable objects: 1 for frontend, 2 for backend, 4 for
4181 server, -1 for everything. Values can be ORed, for example:
4182 1+2=3 -> frontend+backend.
4183 1+2+4=7 -> frontend+backend+server.
4184 - sid is a service id, -1 to dump everything from the selected proxy.
4185
4186 - "show info": dump info about current haproxy status.
4187
Willy Tarreau0ba27502007-12-24 16:55:16 +01004188/*
4189 * Local variables:
4190 * fill-column: 79
4191 * End:
4192 */