blob: 84ebc0e0ef4e62d02f8cbcd33a66c7e5d8bbff84 [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 Tarreau198a7442008-01-17 12:05:32 +01007 2008/01/17
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
14
15HAProxy's configuration process involves 3 major sources of parameters :
16
17 - the arguments from the command-line, which always take precedence
18 - the "global" section, which sets process-wide parameters
19 - the proxies sections which can take form of "defaults", "listen",
20 "frontend" and "backend".
21
Willy Tarreau0ba27502007-12-24 16:55:16 +010022The configuration file syntax consists in lines beginning with a keyword
23referenced in this manual, optionally followed by one or several parameters
24delimited by spaces. If spaces have to be entered in strings, then they must be
25preceeded by a backslash ('\') to be escaped. Backslashes also have to be
26escaped by doubling them.
27
28Some parameters involve values representating time, such as timeouts. These
29values are generally expressed in milliseconds (unless explicitly stated
30otherwise) but may be expressed in any other unit by suffixing the unit to the
31numeric value. It is important to consider this because it will not be repeated
32for every keyword. Supported units are :
33
34 - us : microseconds. 1 microsecond = 1/1000000 second
35 - ms : milliseconds. 1 millisecond = 1/1000 second. This is the default.
36 - s : seconds. 1s = 1000ms
37 - m : minutes. 1m = 60s = 60000ms
38 - h : hours. 1h = 60m = 3600s = 3600000ms
39 - d : days. 1d = 24h = 1440m = 86400s = 86400000ms
40
41
Willy Tarreau6a06a402007-07-15 20:15:28 +0200421. Global parameters
43--------------------
44
45Parameters in the "global" section are process-wide and often OS-specific. They
46are generally set once for all and do not need being changed once correct. Some
47of them have command-line equivalents.
48
49The following keywords are supported in the "global" section :
50
51 * Process management and security
52 - chroot
53 - daemon
54 - gid
55 - group
56 - log
57 - nbproc
58 - pidfile
59 - uid
60 - ulimit-n
61 - user
Willy Tarreaufbee7132007-10-18 13:53:22 +020062 - stats
Willy Tarreau6a06a402007-07-15 20:15:28 +020063
64 * Performance tuning
65 - maxconn
66 - noepoll
67 - nokqueue
68 - nopoll
69 - nosepoll
Willy Tarreaufe255b72007-10-14 23:09:26 +020070 - spread-checks
Willy Tarreaua0250ba2008-01-06 11:22:57 +010071 - tune.maxaccept
72 - tune.maxpollevents
Willy Tarreau6a06a402007-07-15 20:15:28 +020073
74 * Debugging
75 - debug
76 - quiet
Willy Tarreau6a06a402007-07-15 20:15:28 +020077
78
791.1) Process management and security
80------------------------------------
81
82chroot <jail dir>
83 Changes current directory to <jail dir> and performs a chroot() there before
84 dropping privileges. This increases the security level in case an unknown
85 vulnerability would be exploited, since it would make it very hard for the
86 attacker to exploit the system. This only works when the process is started
87 with superuser privileges. It is important to ensure that <jail_dir> is both
88 empty and unwritable to anyone.
89
90daemon
91 Makes the process fork into background. This is the recommended mode of
92 operation. It is equivalent to the command line "-D" argument. It can be
93 disabled by the command line "-db" argument.
94
95gid <number>
96 Changes the process' group ID to <number>. It is recommended that the group
97 ID is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
98 be started with a user belonging to this group, or with superuser privileges.
99 See also "group" and "uid".
100
101group <group name>
102 Similar to "gid" but uses the GID of group name <group name> from /etc/group.
103 See also "gid" and "user".
104
105log <address> <facility> [max level]
106 Adds a global syslog server. Up to two global servers can be defined. They
107 will receive logs for startups and exits, as well as all logs from proxies
Robert Tsai81ae1952007-12-05 10:47:29 +0100108 configured with "log global".
109
110 <address> can be one of:
111
Willy Tarreau2769aa02007-12-27 18:26:09 +0100112 - An IPv4 address optionally followed by a colon and a UDP port. If
Robert Tsai81ae1952007-12-05 10:47:29 +0100113 no port is specified, 514 is used by default (the standard syslog
114 port).
115
116 - A filesystem path to a UNIX domain socket, keeping in mind
117 considerations for chroot (be sure the path is accessible inside
118 the chroot) and uid/gid (be sure the path is appropriately
119 writeable).
120
121 <facility> must be one of the 24 standard syslog facilities :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200122
123 kern user mail daemon auth syslog lpr news
124 uucp cron auth2 ftp ntp audit alert cron2
125 local0 local1 local2 local3 local4 local5 local6 local7
126
127 An optional level can be specified to filter outgoing messages. By default,
128 all messages are sent. If a level is specified, only messages with a severity
129 at least as important as this level will be sent. 8 levels are known :
130
131 emerg alert crit err warning notice info debug
132
133nbproc <number>
134 Creates <number> processes when going daemon. This requires the "daemon"
135 mode. By default, only one process is created, which is the recommended mode
136 of operation. For systems limited to small sets of file descriptors per
137 process, it may be needed to fork multiple daemons. USING MULTIPLE PROCESSES
138 IS HARDER TO DEBUG AND IS REALLY DISCOURAGED. See also "daemon".
139
140pidfile <pidfile>
141 Writes pids of all daemons into file <pidfile>. This option is equivalent to
142 the "-p" command line argument. The file must be accessible to the user
143 starting the process. See also "daemon".
144
Willy Tarreaufbee7132007-10-18 13:53:22 +0200145stats socket <path> [{uid | user} <uid>] [{gid | group} <gid>] [mode <mode>]
146 Creates a UNIX socket in stream mode at location <path>. Any previously
147 existing socket will be backed up then replaced. Connections to this socket
148 will get a CSV-formated output of the process statistics in response to the
Willy Tarreaua8efd362008-01-03 10:19:15 +0100149 "show stat" command followed by a line feed, and more general process
150 information in response to the "show info" command followed by a line feed.
151
152 On platforms which support it, it is possible to restrict access to this
153 socket by specifying numerical IDs after "uid" and "gid", or valid user and
154 group names after the "user" and "group" keywords. It is also possible to
155 restrict permissions on the socket by passing an octal value after the "mode"
156 keyword (same syntax as chmod). Depending on the platform, the permissions on
157 the socket will be inherited from the directory which hosts it, or from the
158 user the process is started with.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200159
160stats timeout <timeout, in milliseconds>
161 The default timeout on the stats socket is set to 10 seconds. It is possible
162 to change this value with "stats timeout". The value must be passed in
Willy Tarreaubefdff12007-12-02 22:27:38 +0100163 milliseconds, or be suffixed by a time unit among { us, ms, s, m, h, d }.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200164
165stats maxconn <connections>
166 By default, the stats socket is limited to 10 concurrent connections. It is
167 possible to change this value with "stats maxconn".
168
Willy Tarreau6a06a402007-07-15 20:15:28 +0200169uid <number>
170 Changes the process' user ID to <number>. It is recommended that the user ID
171 is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
172 be started with superuser privileges in order to be able to switch to another
173 one. See also "gid" and "user".
174
175ulimit-n <number>
176 Sets the maximum number of per-process file-descriptors to <number>. By
177 default, it is automatically computed, so it is recommended not to use this
178 option.
179
180user <user name>
181 Similar to "uid" but uses the UID of user name <user name> from /etc/passwd.
182 See also "uid" and "group".
183
184
1851.2) Performance tuning
186-----------------------
187
188maxconn <number>
189 Sets the maximum per-process number of concurrent connections to <number>. It
190 is equivalent to the command-line argument "-n". Proxies will stop accepting
191 connections when this limit is reached. The "ulimit-n" parameter is
192 automatically adjusted according to this value. See also "ulimit-n".
193
194noepoll
195 Disables the use of the "epoll" event polling system on Linux. It is
196 equivalent to the command-line argument "-de". The next polling system
197 used will generally be "poll". See also "nosepoll", and "nopoll".
198
199nokqueue
200 Disables the use of the "kqueue" event polling system on BSD. It is
201 equivalent to the command-line argument "-dk". The next polling system
202 used will generally be "poll". See also "nopoll".
203
204nopoll
205 Disables the use of the "poll" event polling system. It is equivalent to the
206 command-line argument "-dp". The next polling system used will be "select".
Willy Tarreau0ba27502007-12-24 16:55:16 +0100207 It should never be needed to disable "poll" since it's available on all
Willy Tarreau6a06a402007-07-15 20:15:28 +0200208 platforms supported by HAProxy. See also "nosepoll", and "nopoll" and
209 "nokqueue".
210
211nosepoll
212 Disables the use of the "speculative epoll" event polling system on Linux. It
213 is equivalent to the command-line argument "-ds". The next polling system
214 used will generally be "epoll". See also "nosepoll", and "nopoll".
215
Willy Tarreaufe255b72007-10-14 23:09:26 +0200216spread-checks <0..50, in percent>
217 Sometimes it is desirable to avoid sending health checks to servers at exact
218 intervals, for instance when many logical servers are located on the same
219 physical server. With the help of this parameter, it becomes possible to add
220 some randomness in the check interval between 0 and +/- 50%. A value between
221 2 and 5 seems to show good results. The default value remains at 0.
222
Willy Tarreaua0250ba2008-01-06 11:22:57 +0100223tune.maxaccept <number>
224 Sets the maximum number of consecutive accepts that a process may perform on
225 a single wake up. High values give higher priority to high connection rates,
226 while lower values give higher priority to already established connections.
227 This value is unlimited by default in single process mode. However, in
228 multi-process mode (nbproc > 1), it defaults to 8 so that when one process
229 wakes up, it does not take all incoming connections for itself and leaves a
230 part of them to other processes. Setting this value to zero or less disables
231 the limitation. It should normally not be needed to tweak this value.
232
233tune.maxpollevents <number>
234 Sets the maximum amount of events that can be processed at once in a call to
235 the polling system. The default value is adapted to the operating system. It
236 has been noticed that reducing it below 200 tends to slightly decrease
237 latency at the expense of network bandwidth, and increasing it above 200
238 tends to trade latency for slightly increased bandwidth.
239
Willy Tarreau6a06a402007-07-15 20:15:28 +0200240
2411.3) Debugging
242---------------
243
244debug
245 Enables debug mode which dumps to stdout all exchanges, and disables forking
246 into background. It is the equivalent of the command-line argument "-d". It
247 should never be used in a production configuration since it may prevent full
248 system startup.
249
250quiet
251 Do not display any message during startup. It is equivalent to the command-
252 line argument "-q".
253
Willy Tarreau6a06a402007-07-15 20:15:28 +0200254
2552) Proxies
256----------
Willy Tarreau0ba27502007-12-24 16:55:16 +0100257
Willy Tarreau6a06a402007-07-15 20:15:28 +0200258Proxy configuration can be located in a set of sections :
259 - defaults <name>
260 - frontend <name>
261 - backend <name>
262 - listen <name>
263
264A "defaults" section sets default parameters for all other sections following
265its declaration. Those default parameters are reset by the next "defaults"
266section. See below for the list of parameters which can be set in a "defaults"
Willy Tarreau0ba27502007-12-24 16:55:16 +0100267section. The name is optional but its use is encouraged for better readability.
Willy Tarreau6a06a402007-07-15 20:15:28 +0200268
269A "frontend" section describes a set of listening sockets accepting client
270connections.
271
272A "backend" section describes a set of servers to which the proxy will connect
273to forward incoming connections.
274
275A "listen" section defines a complete proxy with its frontend and backend
276parts combined in one section. It is generally useful for TCP-only traffic.
277
Willy Tarreau0ba27502007-12-24 16:55:16 +0100278All proxy names must be formed from upper and lower case letters, digits,
279'-' (dash), '_' (underscore) , '.' (dot) and ':' (colon). ACL names are
280case-sensitive, which means that "www" and "WWW" are two different proxies.
281
282Historically, all proxy names could overlap, it just caused troubles in the
283logs. Since the introduction of content switching, it is mandatory that two
284proxies with overlapping capabilities (frontend/backend) have different names.
285However, it is still permitted that a frontend and a backend share the same
286name, as this configuration seems to be commonly encountered.
287
288Right now, two major proxy modes are supported : "tcp", also known as layer 4,
289and "http", also known as layer 7. In layer 4 mode, HAProxy simply forwards
290bidirectionnal traffic between two sides. In layer 7 mode, HAProxy analyzes the
291protocol, and can interact with it by allowing, blocking, switching, adding,
292modifying, or removing arbitrary contents in requests or responses, based on
293arbitrary criteria.
294
295
2962.1) Quick reminder about HTTP
297------------------------------
298
299When a proxy is running in HTTP mode, both the request and the response are
300fully analyzed and indexed, thus it becomes possible to build matching criteria
301on almost anything found in the contents.
302
303However, it is important to understand how HTTP requests and responses are
304formed, and how HAProxy decomposes them. It will then become easier to write
305correct rules and to debug existing configurations.
306
307
3082.1.1) The HTTP transaction model
309---------------------------------
310
311The HTTP protocol is transaction-driven. This means that each request will lead
312to one and only one response. Traditionnally, a TCP connection is established
313from the client to the server, a request is sent by the client on the
314connection, the server responds and the connection is closed. A new request
315will involve a new connection :
316
317 [CON1] [REQ1] ... [RESP1] [CLO1] [CON2] [REQ2] ... [RESP2] [CLO2] ...
318
319In this mode, called the "HTTP close" mode, there are as many connection
320establishments as there are HTTP transactions. Since the connection is closed
321by the server after the response, the client does not need to know the content
322length.
323
324Due to the transactional nature of the protocol, it was possible to improve it
325to avoid closing a connection between two subsequent transactions. In this mode
326however, it is mandatory that the server indicates the content length for each
327response so that the client does not wait indefinitely. For this, a special
328header is used: "Content-length". This mode is called the "keep-alive" mode :
329
330 [CON] [REQ1] ... [RESP1] [REQ2] ... [RESP2] [CLO] ...
331
332Its advantages are a reduced latency between transactions, and less processing
333power required on the server side. It is generally better than the close mode,
334but not always because the clients often limit their concurrent connections to
335a smaller value. HAProxy currently does not support the HTTP keep-alive mode,
336but knows how to transform it to the close mode.
337
338A last improvement in the communications is the pipelining mode. It still uses
339keep-alive, but the client does not wait for the first response to send the
340second request. This is useful for fetching large number of images composing a
341page :
342
343 [CON] [REQ1] [REQ2] ... [RESP1] [RESP2] [CLO] ...
344
345This can obviously have a tremendous benefit on performance because the network
346latency is eliminated between subsequent requests. Many HTTP agents do not
347correctly support pipelining since there is no way to associate a response with
348the corresponding request in HTTP. For this reason, it is mandatory for the
349server to reply in the exact same order as the requests were received.
350
351Right now, HAProxy only supports the first mode (HTTP close) if it needs to
352process the request. This means that for each request, there will be one TCP
353connection. If keep-alive or pipelining are required, HAProxy will still
354support them, but will only see the first request and the first response of
355each transaction. While this is generally problematic with regards to logs,
356content switching or filtering, it most often causes no problem for persistence
357with cookie insertion.
358
359
3602.1.2) HTTP request
361-------------------
362
363First, let's consider this HTTP request :
364
365 Line Contents
366 number
367 1 GET /serv/login.php?lang=en&profile=2 HTTP/1.1
368 2 Host: www.mydomain.com
369 3 User-agent: my small browser
370 4 Accept: image/jpeg, image/gif
371 5 Accept: image/png
372
373
3742.1.2.1) The Request line
375-------------------------
376
377Line 1 is the "request line". It is always composed of 3 fields :
378
379 - a METHOD : GET
380 - a URI : /serv/login.php?lang=en&profile=2
381 - a version tag : HTTP/1.1
382
383All of them are delimited by what the standard calls LWS (linear white spaces),
384which are commonly spaces, but can also be tabs or line feeds/carriage returns
385followed by spaces/tabs. The method itself cannot contain any colon (':') and
386is limited to alphabetic letters. All those various combinations make it
387desirable that HAProxy performs the splitting itself rather than leaving it to
388the user to write a complex or inaccurate regular expression.
389
390The URI itself can have several forms :
391
392 - A "relative URI" :
393
394 /serv/login.php?lang=en&profile=2
395
396 It is a complete URL without the host part. This is generally what is
397 received by servers, reverse proxies and transparent proxies.
398
399 - An "absolute URI", also called a "URL" :
400
401 http://192.168.0.12:8080/serv/login.php?lang=en&profile=2
402
403 It is composed of a "scheme" (the protocol name followed by '://'), a host
404 name or address, optionally a colon (':') followed by a port number, then
405 a relative URI beginning at the first slash ('/') after the address part.
406 This is generally what proxies receive, but a server supporting HTTP/1.1
407 must accept this form too.
408
409 - a star ('*') : this form is only accepted in association with the OPTIONS
410 method and is not relayable. It is used to inquiry a next hop's
411 capabilities.
412
413 - an address:port combination : 192.168.0.12:80
414 This is used with the CONNECT method, which is used to establish TCP
415 tunnels through HTTP proxies, generally for HTTPS, but sometimes for
416 other protocols too.
417
418In a relative URI, two sub-parts are identified. The part before the question
419mark is called the "path". It is typically the relative path to static objects
420on the server. The part after the question mark is called the "query string".
421It is mostly used with GET requests sent to dynamic scripts and is very
422specific to the language, framework or application in use.
423
424
4252.1.2.2) The request headers
426----------------------------
427
428The headers start at the second line. They are composed of a name at the
429beginning of the line, immediately followed by a colon (':'). Traditionally,
430an LWS is added after the colon but that's not required. Then come the values.
431Multiple identical headers may be folded into one single line, delimiting the
432values with commas, provided that their order is respected. This is commonly
Willy Tarreau198a7442008-01-17 12:05:32 +0100433encountered in the "Cookie:" field. A header may span over multiple lines if
Willy Tarreau0ba27502007-12-24 16:55:16 +0100434the subsequent lines begin with an LWS. In the example in 2.1.2, lines 4 and 5
Willy Tarreau198a7442008-01-17 12:05:32 +0100435define a total of 3 values for the "Accept:" header.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100436
437Contrary to a common mis-conception, header names are not case-sensitive, and
438their values are not either if they refer to other header names (such as the
Willy Tarreau198a7442008-01-17 12:05:32 +0100439"Connection:" header).
Willy Tarreau0ba27502007-12-24 16:55:16 +0100440
441The end of the headers is indicated by the first empty line. People often say
442that it's a double line feed, which is not exact, even if a double line feed
443is one valid form of empty line.
444
445Fortunately, HAProxy takes care of all these complex combinations when indexing
446headers, checking values and counting them, so there is no reason to worry
447about the way they could be written, but it is important not to accusate an
448application of being buggy if it does unusual, valid things.
449
450Important note:
451 As suggested by RFC2616, HAProxy normalizes headers by replacing line breaks
452 in the middle of headers by LWS in order to join multi-line headers. This
453 is necessary for proper analysis and helps less capable HTTP parsers to work
454 correctly and not to be fooled by such complex constructs.
455
456
4572.1.3) HTTP response
458--------------------
459
460An HTTP response looks very much like an HTTP request. Both are called HTTP
461messages. Let's consider this HTTP response :
462
463 Line Contents
464 number
465 1 HTTP/1.1 200 OK
466 2 Content-length: 350
467 3 Content-Type: text/html
468
469
4702.1.3.1) The Response line
471--------------------------
472
473Line 1 is the "response line". It is always composed of 3 fields :
474
475 - a version tag : HTTP/1.1
476 - a status code : 200
477 - a reason : OK
478
479The status code is always 3-digit. The first digit indicates a general status :
480 - 2xx = OK, content is following (eg: 200, 206)
481 - 3xx = OK, no content following (eg: 302, 304)
482 - 4xx = error caused by the client (eg: 401, 403, 404)
483 - 5xx = error caused by the server (eg: 500, 502, 503)
484
485Please refer to RFC2616 for the detailed meaning of all such codes. The
486"reason" field is just a hint, but is not parsed by clients. Anything can be
487found there, but it's a common practise to respect the well-established
488messages. It can be composed of one or multiple words, such as "OK", "Found",
489or "Authentication Required".
490
491
4922.1.3.2) The response headers
493-----------------------------
494
495Response headers work exactly like request headers, and as such, HAProxy uses
496the same parsing function for both. Please refer to paragraph 2.1.2.2 for more
497details.
498
499
5002.2) Proxy keywords matrix
501----------------------------
502
Willy Tarreau6a06a402007-07-15 20:15:28 +0200503The following list of keywords is supported. Most of them may only be used in a
Willy Tarreau0ba27502007-12-24 16:55:16 +0100504limited set of section types. Some of them are marked as "deprecated" because
505they are inherited from an old syntax which may be confusing or functionnally
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100506limited, and there are new recommended keywords to replace them. Keywords
507listed with [no] can be optionally inverted using the "no" prefix, ex. "no
508option contstats". This makes sense when the option has been enabled by default
509and must be disabled for a specific instance.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100510
Willy Tarreau6a06a402007-07-15 20:15:28 +0200511
512keyword defaults frontend listen backend
513----------------------+----------+----------+---------+---------
514acl - X X X
515appsession - - X X
Willy Tarreauc73ce2b2008-01-06 10:55:10 +0100516backlog X X X -
Willy Tarreau0ba27502007-12-24 16:55:16 +0100517balance X - X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200518bind - X X -
519block - X X X
Willy Tarreau0ba27502007-12-24 16:55:16 +0100520capture cookie - X X -
521capture request header - X X -
522capture response header - X X -
Willy Tarreaue219db72007-12-03 01:30:13 +0100523clitimeout X X X - (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +0100524contimeout X - X X (deprecated)
Willy Tarreau6a06a402007-07-15 20:15:28 +0200525cookie X - X X
526default_backend - X X -
Willy Tarreau0ba27502007-12-24 16:55:16 +0100527disabled X X X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200528dispatch - - X X
Willy Tarreau0ba27502007-12-24 16:55:16 +0100529enabled X X X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200530errorfile X X X X
531errorloc X X X X
532errorloc302 X X X X
533errorloc303 X X X X
534fullconn X - X X
535grace - X X X
Willy Tarreaudbc36f62007-11-30 12:29:11 +0100536http-check disable-on-404 X - X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200537log X X X X
538maxconn X X X -
539mode X X X X
Willy Tarreauc7246fc2007-12-02 17:31:20 +0100540monitor fail - X X -
Willy Tarreau6a06a402007-07-15 20:15:28 +0200541monitor-net X X X -
542monitor-uri X X X -
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100543[no] option abortonclose X - X X
544[no] option allbackups X - X X
545[no] option checkcache X - X X
546[no] option clitcpka X X X -
547[no] option contstats X X X -
548[no] option dontlognull X X X -
549[no] option forceclose X - X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200550option forwardfor X X X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100551[no] option http_proxy X X X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200552option httpchk X - X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100553[no] option httpclose X X X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200554option httplog X X X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100555[no] option logasap X X X -
556[no] option nolinger X X X X
557[no] option persist X - X X
558[no] option redispatch X - X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200559option smtpchk X - X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100560[no] option srvtcpka X - X X
Willy Tarreau6a06a402007-07-15 20:15:28 +0200561option ssl-hello-chk X - X X
562option tcpka X X X X
563option tcplog X X X X
Krzysztof Oledzki336d4752007-12-25 02:40:22 +0100564[no] option tcpsplice X X X X
565[no] option transparent X X X -
566redisp X - X X (deprecated)
567redispatch X - X X (deprecated)
Willy Tarreau6a06a402007-07-15 20:15:28 +0200568reqadd - X X X
569reqallow - X X X
570reqdel - X X X
571reqdeny - X X X
572reqiallow - X X X
573reqidel - X X X
574reqideny - X X X
575reqipass - X X X
576reqirep - X X X
577reqisetbe - X X X
578reqitarpit - X X X
579reqpass - X X X
580reqrep - X X X
581reqsetbe - X X X
582reqtarpit - X X X
583retries X - X X
584rspadd - X X X
585rspdel - X X X
586rspdeny - X X X
587rspidel - X X X
588rspideny - X X X
589rspirep - X X X
590rsprep - X X X
591server - - X X
592source X - X X
Willy Tarreaue219db72007-12-03 01:30:13 +0100593srvtimeout X - X X (deprecated)
Willy Tarreau24e779b2007-07-24 23:43:37 +0200594stats auth X - X X
595stats enable X - X X
596stats realm X - X X
Willy Tarreaubbd42122007-07-25 07:26:38 +0200597stats refresh X - X X
Willy Tarreau24e779b2007-07-24 23:43:37 +0200598stats scope X - X X
599stats uri X - X X
Krzysztof Oledzkid9db9272007-10-15 10:05:11 +0200600stats hide-version X - X X
Willy Tarreaue219db72007-12-03 01:30:13 +0100601timeout client X X X -
602timeout clitimeout X X X - (deprecated)
603timeout connect X - X X
604timeout contimeout X - X X (deprecated)
Willy Tarreau844e3c52008-01-11 16:28:18 +0100605timeout http-request X X X -
Willy Tarreaue219db72007-12-03 01:30:13 +0100606timeout queue X - X X
607timeout server X - X X
608timeout srvtimeout X - X X (deprecated)
Willy Tarreau51c9bde2008-01-06 13:40:03 +0100609timeout tarpit X X X X
Willy Tarreau844e3c52008-01-11 16:28:18 +0100610transparent X X X - (deprecated)
Willy Tarreau6a06a402007-07-15 20:15:28 +0200611use_backend - X X -
Willy Tarreau6a06a402007-07-15 20:15:28 +0200612----------------------+----------+----------+---------+---------
613keyword defaults frontend listen backend
614
Willy Tarreau0ba27502007-12-24 16:55:16 +0100615
6162.2.1) Alphabetically sorted keywords reference
617-----------------------------------------------
618
619This section provides a description of each keyword and its usage.
620
621
622acl <aclname> <criterion> [flags] [operator] <value> ...
623 Declare or complete an access list.
624 May be used in sections : defaults | frontend | listen | backend
625 no | yes | yes | yes
626 Example:
627 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
628 acl invalid_src src_port 0:1023
629 acl local_dst hdr(host) -i localhost
630
631 See section 2.3 about ACL usage.
632
633
634appsession <cookie> len <length> timeout <holdtime>
635 Define session stickiness on an existing application cookie.
636 May be used in sections : defaults | frontend | listen | backend
637 no | no | yes | yes
638 Arguments :
639 <cookie> this is the name of the cookie used by the application and which
640 HAProxy will have to learn for each new session.
641
642 <length> this is the number of characters that will be memorized and
643 checked in each cookie value.
644
645 <holdtime> this is the time after which the cookie will be removed from
646 memory if unused. If no unit is specified, this time is in
647 milliseconds.
648
649 When an application cookie is defined in a backend, HAProxy will check when
650 the server sets such a cookie, and will store its value in a table, and
651 associate it with the server's identifier. Up to <length> characters from
652 the value will be retained. On each connection, haproxy will look for this
653 cookie both in the "Cookie:" headers, and as a URL parameter in the query
654 string. If a known value is found, the client will be directed to the server
655 associated with this value. Otherwise, the load balancing algorithm is
656 applied. Cookies are automatically removed from memory when they have been
657 unused for a duration longer than <holdtime>.
658
659 The definition of an application cookie is limited to one per backend.
660
661 Example :
662 appsession JSESSIONID len 52 timeout 3h
663
664 See also : "cookie", "capture cookie" and "balance".
665
666
Willy Tarreauc73ce2b2008-01-06 10:55:10 +0100667backlog <conns>
668 Give hints to the system about the approximate listen backlog desired size
669 May be used in sections : defaults | frontend | listen | backend
670 yes | yes | yes | no
671 Arguments :
672 <conns> is the number of pending connections. Depending on the operating
673 system, it may represent the number of already acknowledged
674 connections, of non-acknowledged ones, or both.
675
676 In order to protect against SYN flood attacks, one solution is to increase
677 the system's SYN backlog size. Depending on the system, sometimes it is just
678 tunable via a system parameter, sometimes it is not adjustable at all, and
679 sometimes the system relies on hints given by the application at the time of
680 the listen() syscall. By default, HAProxy passes the frontend's maxconn value
681 to the listen() syscall. On systems which can make use of this value, it can
682 sometimes be useful to be able to specify a different value, hence this
683 backlog parameter.
684
685 On Linux 2.4, the parameter is ignored by the system. On Linux 2.6, it is
686 used as a hint and the system accepts up to the smallest greater power of
687 two, and never more than some limits (usually 32768).
688
689 See also : "maxconn" and the target operating system's tuning guide.
690
691
Willy Tarreau0ba27502007-12-24 16:55:16 +0100692balance <algorithm> [ <arguments> ]
693 Define the load balancing algorithm to be used in a backend.
694 May be used in sections : defaults | frontend | listen | backend
695 yes | no | yes | yes
696 Arguments :
697 <algorithm> is the algorithm used to select a server when doing load
698 balancing. This only applies when no persistence information
699 is available, or when a connection is redispatched to another
700 server. <algorithm> may be one of the following :
701
702 roundrobin Each server is used in turns, according to their weights.
703 This is the smoothest and fairest algorithm when the server's
704 processing time remains equally distributed. This algorithm
705 is dynamic, which means that server weights may be adjusted
706 on the fly for slow starts for instance.
707
708 source The source IP address is hashed and divided by the total
709 weight of the running servers to designate which server will
710 receive the request. This ensures that the same client IP
711 address will always reach the same server as long as no
712 server goes down or up. If the hash result changes due to the
713 number of running servers changing, many clients will be
714 directed to a different server. This algorithm is generally
715 used in TCP mode where no cookie may be inserted. It may also
716 be used on the Internet to provide a best-effort stickyness
717 to clients which refuse session cookies. This algorithm is
718 static, which means that changing a server's weight on the
719 fly will have no effect.
720
721 uri The left part of the URI (before the question mark) is hashed
722 and divided by the total weight of the running servers. The
723 result designates which server will receive the request. This
724 ensures that a same URI will always be directed to the same
725 server as long as no server goes up or down. This is used
726 with proxy caches and anti-virus proxies in order to maximize
727 the cache hit rate. Note that this algorithm may only be used
728 in an HTTP backend. This algorithm is static, which means
729 that changing a server's weight on the fly will have no
730 effect.
731
732 url_param The URL parameter specified in argument will be looked up in
733 the query string of each HTTP request. If it is found
734 followed by an equal sign ('=') and a value, then the value
735 is hashed and divided by the total weight of the running
736 servers. The result designates which server will receive the
737 request. This is used to track user identifiers in requests
738 and ensure that a same user ID will always be sent to the
739 same server as long as no server goes up or down. If no value
740 is found or if the parameter is not found, then a round robin
741 algorithm is applied. Note that this algorithm may only be
742 used in an HTTP backend. This algorithm is static, which
743 means that changing a server's weight on the fly will have no
744 effect.
745
746 <arguments> is an optional list of arguments which may be needed by some
747 algorithms. Right now, only the "url_param" algorithm supports
748 a mandatory argument.
749
750 The definition of the load balancing algorithm is mandatory for a backend
751 and limited to one per backend.
752
753 Examples :
754 balance roundrobin
755 balance url_param userid
756
757 See also : "dispatch", "cookie", "appsession", "transparent" and "http_proxy".
758
759
760bind [<address>]:<port> [, ...]
Willy Tarreaub1e52e82008-01-13 14:49:51 +0100761bind [<address>]:<port> [, ...] transparent
Willy Tarreau0ba27502007-12-24 16:55:16 +0100762 Define one or several listening addresses and/or ports in a frontend.
763 May be used in sections : defaults | frontend | listen | backend
764 no | yes | yes | no
765 Arguments :
Willy Tarreaub1e52e82008-01-13 14:49:51 +0100766 <address> is optional and can be a host name, an IPv4 address, an IPv6
767 address, or '*'. It designates the address the frontend will
768 listen on. If unset, all IPv4 addresses of the system will be
769 listened on. The same will apply for '*' or the system's
770 special address "0.0.0.0".
771
772 <port> is the TCP port number the proxy will listen on. The port is
773 mandatory. Note that in the case of an IPv6 address, the port
774 is always the number after the last colon (':').
Willy Tarreau0ba27502007-12-24 16:55:16 +0100775
Willy Tarreaub1e52e82008-01-13 14:49:51 +0100776 transparent is an optional keyword which is supported only on certain
777 Linux kernels. It indicates that the addresses will be bound
778 even if they do not belong to the local machine. Any packet
779 targetting any of these addresses will be caught just as if
780 the address was locally configured. This normally requires
781 that IP forwarding is enabled. Caution! do not use this with
782 the default address '*', as it would redirect any traffic for
783 the specified port. This keyword is available only when
784 HAProxy is built with USE_LINUX_TPROXY=1.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100785
786 It is possible to specify a list of address:port combinations delimited by
787 commas. The frontend will then listen on all of these addresses. There is no
788 fixed limit to the number of addresses and ports which can be listened on in
789 a frontend, as well as there is no limit to the number of "bind" statements
790 in a frontend.
791
792 Example :
793 listen http_proxy
794 bind :80,:443
795 bind 10.0.0.1:10080,10.0.0.1:10443
796
797 See also : "source".
798
799
800block { if | unless } <condition>
801 Block a layer 7 request if/unless a condition is matched
802 May be used in sections : defaults | frontend | listen | backend
803 no | yes | yes | yes
804
805 The HTTP request will be blocked very early in the layer 7 processing
806 if/unless <condition> is matched. A 403 error will be returned if the request
807 is blocked. The condition has to reference ACLs (see section 2.3). This is
808 typically used to deny access to certain sensible resources if some
809 conditions are met or not met. There is no fixed limit to the number of
810 "block" statements per instance.
811
812 Example:
813 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
814 acl invalid_src src_port 0:1023
815 acl local_dst hdr(host) -i localhost
816 block if invalid_src || local_dst
817
818 See section 2.3 about ACL usage.
819
820
821capture cookie <name> len <length>
822 Capture and log a cookie in the request and in the response.
823 May be used in sections : defaults | frontend | listen | backend
824 no | yes | yes | no
825 Arguments :
826 <name> is the beginning of the name of the cookie to capture. In order
827 to match the exact name, simply suffix the name with an equal
828 sign ('='). The full name will appear in the logs, which is
829 useful with application servers which adjust both the cookie name
830 and value (eg: ASPSESSIONXXXXX).
831
832 <length> is the maximum number of characters to report in the logs, which
833 include the cookie name, the equal sign and the value, all in the
834 standard "name=value" form. The string will be truncated on the
835 right if it exceeds <length>.
836
837 Only the first cookie is captured. Both the "cookie" request headers and the
838 "set-cookie" response headers are monitored. This is particularly useful to
839 check for application bugs causing session crossing or stealing between
840 users, because generally the user's cookies can only change on a login page.
841
842 When the cookie was not presented by the client, the associated log column
843 will report "-". When a request does not cause a cookie to be assigned by the
844 server, a "-" is reported in the response column.
845
846 The capture is performed in the frontend only because it is necessary that
847 the log format does not change for a given frontend depending on the
848 backends. This may change in the future. Note that there can be only one
849 "capture cookie" statement in a frontend. The maximum capture length is
850 configured in the souces by default to 64 characters. It is not possible to
851 specify a capture in a "defaults" section.
852
853 Example:
854 capture cookie ASPSESSION len 32
855
856 See also : "capture request header", "capture response header" as well as
Willy Tarreau844e3c52008-01-11 16:28:18 +0100857 section 2.5 about logging.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100858
859
860capture request header <name> len <length>
861 Capture and log the first occurrence of the specified request header.
862 May be used in sections : defaults | frontend | listen | backend
863 no | yes | yes | no
864 Arguments :
865 <name> is the name of the header to capture. The header names are not
866 case-sensitive, but it is a common practise to write them as they
867 appear in the requests, with the first letter of each word in
868 upper case. The header name will not appear in the logs, only the
869 value is reported, but the position in the logs is respected.
870
871 <length> is the maximum number of characters to extract from the value and
872 report in the logs. The string will be truncated on the right if
873 it exceeds <length>.
874
875 Only the first value of the first occurrence of the header is captured. The
876 value will be added to the logs between braces ('{}'). If multiple headers
877 are captured, they will be delimited by a vertical bar ('|') and will appear
878 in the same order they were declared in the configuration. Common uses for
879 request header captures include the "Host" field in virtual hosting
880 environments, the "Content-length" when uploads are supported, "User-agent"
881 to quickly differenciate between real users and robots, and "X-Forwarded-For"
882 in proxied environments to find where the request came from.
883
884 There is no limit to the number of captured request headers, but each capture
885 is limited to 64 characters. In order to keep log format consistent for a
886 same frontend, header captures can only be declared in a frontend. It is not
887 possible to specify a capture in a "defaults" section.
888
889 Example:
890 capture request header Host len 15
891 capture request header X-Forwarded-For len 15
892 capture request header Referrer len 15
893
Willy Tarreau844e3c52008-01-11 16:28:18 +0100894 See also : "capture cookie", "capture response header" as well as section 2.5
Willy Tarreau0ba27502007-12-24 16:55:16 +0100895 about logging.
896
897
898capture response header <name> len <length>
899 Capture and log the first occurrence of the specified response header.
900 May be used in sections : defaults | frontend | listen | backend
901 no | yes | yes | no
902 Arguments :
903 <name> is the name of the header to capture. The header names are not
904 case-sensitive, but it is a common practise to write them as they
905 appear in the response, with the first letter of each word in
906 upper case. The header name will not appear in the logs, only the
907 value is reported, but the position in the logs is respected.
908
909 <length> is the maximum number of characters to extract from the value and
910 report in the logs. The string will be truncated on the right if
911 it exceeds <length>.
912
913 Only the first value of the first occurrence of the header is captured. The
914 result will be added to the logs between braces ('{}') after the captured
915 request headers. If multiple headers are captured, they will be delimited by
916 a vertical bar ('|') and will appear in the same order they were declared in
917 the configuration. Common uses for response header captures include the
918 "Content-length" header which indicates how many bytes are expected to be
919 returned, the "Location" header to track redirections.
920
921 There is no limit to the number of captured response headers, but each
922 capture is limited to 64 characters. In order to keep log format consistent
923 for a same frontend, header captures can only be declared in a frontend. It
924 is not possible to specify a capture in a "defaults" section.
925
926 Example:
927 capture response header Content-length len 9
928 capture response header Location len 15
929
Willy Tarreau844e3c52008-01-11 16:28:18 +0100930 See also : "capture cookie", "capture request header" as well as section 2.5
Willy Tarreau0ba27502007-12-24 16:55:16 +0100931 about logging.
932
933
934clitimeout <timeout>
935 Set the maximum inactivity time on the client side.
936 May be used in sections : defaults | frontend | listen | backend
937 yes | yes | yes | no
938 Arguments :
939 <timeout> is the timeout value is specified in milliseconds by default, but
940 can be in any other unit if the number is suffixed by the unit,
941 as explained at the top of this document.
942
943 The inactivity timeout applies when the client is expected to acknowledge or
944 send data. In HTTP mode, this timeout is particularly important to consider
945 during the first phase, when the client sends the request, and during the
946 response while it is reading data sent by the server. The value is specified
947 in milliseconds by default, but can be in any other unit if the number is
948 suffixed by the unit, as specified at the top of this document. In TCP mode
949 (and to a lesser extent, in HTTP mode), it is highly recommended that the
950 client timeout remains equal to the server timeout in order to avoid complex
951 situations to debug. It is a good practise to cover one or several TCP packet
952 losses by specifying timeouts that are slightly above multiples of 3 seconds
953 (eg: 4 or 5 seconds).
954
955 This parameter is specific to frontends, but can be specified once for all in
956 "defaults" sections. This is in fact one of the easiest solutions not to
957 forget about it. An unspecified timeout results in an infinite timeout, which
958 is not recommended. Such a usage is accepted and works but reports a warning
959 during startup because it may results in accumulation of expired sessions in
960 the system if the system's timeouts are not configured either.
961
962 This parameter is provided for compatibility but is currently deprecated.
963 Please use "timeout client" instead.
964
Willy Tarreau036fae02008-01-06 13:24:40 +0100965 See also : "timeout client", "timeout http-request", "timeout server", and
966 "srvtimeout".
Willy Tarreau0ba27502007-12-24 16:55:16 +0100967
968
969contimeout <timeout>
970 Set the maximum time to wait for a connection attempt to a server to succeed.
971 May be used in sections : defaults | frontend | listen | backend
972 yes | no | yes | yes
973 Arguments :
974 <timeout> is the timeout value is specified in milliseconds by default, but
975 can be in any other unit if the number is suffixed by the unit,
976 as explained at the top of this document.
977
978 If the server is located on the same LAN as haproxy, the connection should be
979 immediate (less than a few milliseconds). Anyway, it is a good practise to
980 cover one or several TCP packet losses by specifying timeouts that are
981 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
982 connect timeout also presets the queue timeout to the same value if this one
983 has not been specified. Historically, the contimeout was also used to set the
984 tarpit timeout in a listen section, which is not possible in a pure frontend.
985
986 This parameter is specific to backends, but can be specified once for all in
987 "defaults" sections. This is in fact one of the easiest solutions not to
988 forget about it. An unspecified timeout results in an infinite timeout, which
989 is not recommended. Such a usage is accepted and works but reports a warning
990 during startup because it may results in accumulation of failed sessions in
991 the system if the system's timeouts are not configured either.
992
993 This parameter is provided for backwards compatibility but is currently
994 deprecated. Please use "timeout connect", "timeout queue" or "timeout tarpit"
995 instead.
996
997 See also : "timeout connect", "timeout queue", "timeout tarpit",
998 "timeout server", "contimeout".
999
1000
1001cookie <name> [ rewrite|insert|prefix ] [ indirect ] [ nocache ] [ postonly ]
1002 Enable cookie-based persistence in a backend.
1003 May be used in sections : defaults | frontend | listen | backend
1004 yes | no | yes | yes
1005 Arguments :
1006 <name> is the name of the cookie which will be monitored, modified or
1007 inserted in order to bring persistence. This cookie is sent to
1008 the client via a "Set-Cookie" header in the response, and is
1009 brought back by the client in a "Cookie" header in all requests.
1010 Special care should be taken to choose a name which does not
1011 conflict with any likely application cookie. Also, if the same
1012 backends are subject to be used by the same clients (eg:
1013 HTTP/HTTPS), care should be taken to use different cookie names
1014 between all backends if persistence between them is not desired.
1015
1016 rewrite This keyword indicates that the cookie will be provided by the
1017 server and that haproxy will have to modify its value to set the
1018 server's identifier in it. This mode is handy when the management
1019 of complex combinations of "Set-cookie" and "Cache-control"
1020 headers is left to the application. The application can then
1021 decide whether or not it is appropriate to emit a persistence
1022 cookie. Since all responses should be monitored, this mode only
1023 works in HTTP close mode. Unless the application behaviour is
1024 very complex and/or broken, it is advised not to start with this
1025 mode for new deployments. This keyword is incompatible with
1026 "insert" and "prefix".
1027
1028 insert This keyword indicates that the persistence cookie will have to
1029 be inserted by haproxy in the responses. If the server emits a
1030 cookie with the same name, it will be replaced anyway. For this
1031 reason, this mode can be used to upgrade existing configurations
1032 running in the "rewrite" mode. The cookie will only be a session
1033 cookie and will not be stored on the client's disk. Due to
1034 caching effects, it is generally wise to add the "indirect" and
1035 "nocache" or "postonly" keywords (see below). The "insert"
1036 keyword is not compatible with "rewrite" and "prefix".
1037
1038 prefix This keyword indicates that instead of relying on a dedicated
1039 cookie for the persistence, an existing one will be completed.
1040 This may be needed in some specific environments where the client
1041 does not support more than one single cookie and the application
1042 already needs it. In this case, whenever the server sets a cookie
1043 named <name>, it will be prefixed with the server's identifier
1044 and a delimiter. The prefix will be removed from all client
1045 requests so that the server still finds the cookie it emitted.
1046 Since all requests and responses are subject to being modified,
1047 this mode requires the HTTP close mode. The "prefix" keyword is
1048 not compatible with "rewrite" and "insert".
1049
1050 indirect When this option is specified in insert mode, cookies will only
1051 be added when the server was not reached after a direct access,
1052 which means that only when a server is elected after applying a
1053 load-balancing algorithm, or after a redispatch, then the cookie
1054 will be inserted. If the client has all the required information
1055 to connect to the same server next time, no further cookie will
1056 be inserted. In all cases, when the "indirect" option is used in
1057 insert mode, the cookie is always removed from the requests
1058 transmitted to the server. The persistence mechanism then becomes
1059 totally transparent from the application point of view.
1060
1061 nocache This option is recommended in conjunction with the insert mode
1062 when there is a cache between the client and HAProxy, as it
1063 ensures that a cacheable response will be tagged non-cacheable if
1064 a cookie needs to be inserted. This is important because if all
1065 persistence cookies are added on a cacheable home page for
1066 instance, then all customers will then fetch the page from an
1067 outer cache and will all share the same persistence cookie,
1068 leading to one server receiving much more traffic than others.
1069 See also the "insert" and "postonly" options.
1070
1071 postonly This option ensures that cookie insertion will only be performed
1072 on responses to POST requests. It is an alternative to the
1073 "nocache" option, because POST responses are not cacheable, so
1074 this ensures that the persistence cookie will never get cached.
1075 Since most sites do not need any sort of persistence before the
1076 first POST which generally is a login request, this is a very
1077 efficient method to optimize caching without risking to find a
1078 persistence cookie in the cache.
1079 See also the "insert" and "nocache" options.
1080
1081 There can be only one persistence cookie per HTTP backend, and it can be
1082 declared in a defaults section. The value of the cookie will be the value
1083 indicated after the "cookie" keyword in a "server" statement. If no cookie
1084 is declared for a given server, the cookie is not set.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001085
Willy Tarreau0ba27502007-12-24 16:55:16 +01001086 Examples :
1087 cookie JSESSIONID prefix
1088 cookie SRV insert indirect nocache
1089 cookie SRV insert postonly indirect
1090
1091 See also : "appsession", "balance source", "capture cookie", "server".
1092
1093
1094default_backend <backend>
1095 Specify the backend to use when no "use_backend" rule has been matched.
1096 May be used in sections : defaults | frontend | listen | backend
1097 yes | yes | yes | no
1098 Arguments :
1099 <backend> is the name of the backend to use.
1100
1101 When doing content-switching between frontend and backends using the
1102 "use_backend" keyword, it is often useful to indicate which backend will be
1103 used when no rule has matched. It generally is the dynamic backend which
1104 will catch all undetermined requests.
1105
1106 The "default_backend" keyword is also supported in TCP mode frontends to
1107 facilitate the ordering of configurations in frontends and backends,
1108 eventhough it does not make much more sense in case of TCP due to the fact
1109 that use_backend currently does not work in TCP mode.
1110
1111 Example :
1112
1113 use_backend dynamic if url_dyn
1114 use_backend static if url_css url_img extension_img
1115 default_backend dynamic
1116
Willy Tarreau2769aa02007-12-27 18:26:09 +01001117 See also : "use_backend", "reqsetbe", "reqisetbe"
1118
Willy Tarreau0ba27502007-12-24 16:55:16 +01001119
1120disabled
1121 Disable a proxy, frontend or backend.
1122 May be used in sections : defaults | frontend | listen | backend
1123 yes | yes | yes | yes
1124 Arguments : none
1125
1126 The "disabled" keyword is used to disable an instance, mainly in order to
1127 liberate a listening port or to temporarily disable a service. The instance
1128 will still be created and its configuration will be checked, but it will be
1129 created in the "stopped" state and will appear as such in the statistics. It
1130 will not receive any traffic nor will it send any health-checks or logs. It
1131 is possible to disable many instances at once by adding the "disabled"
1132 keyword in a "defaults" section.
1133
1134 See also : "enabled"
1135
1136
1137enabled
1138 Enable a proxy, frontend or backend.
1139 May be used in sections : defaults | frontend | listen | backend
1140 yes | yes | yes | yes
1141 Arguments : none
1142
1143 The "enabled" keyword is used to explicitly enable an instance, when the
1144 defaults has been set to "disabled". This is very rarely used.
1145
1146 See also : "disabled"
1147
1148
1149errorfile <code> <file>
1150 Return a file contents instead of errors generated by HAProxy
1151 May be used in sections : defaults | frontend | listen | backend
1152 yes | yes | yes | yes
1153 Arguments :
1154 <code> is the HTTP status code. Currently, HAProxy is capable of
1155 generating codes 400, 403, 408, 500, 502, 503, and 504.
1156
1157 <file> designates a file containing the full HTTP response. It is
1158 recommended to follow the common practise of appending ".http" to
1159 the filename so that people do not confuse the response with HTML
1160 error pages.
1161
1162 It is important to understand that this keyword is not meant to rewrite
1163 errors returned by the server, but errors detected and returned by HAProxy.
1164 This is why the list of supported errors is limited to a small set.
1165
1166 The files are returned verbatim on the TCP socket. This allows any trick such
1167 as redirections to another URL or site, as well as tricks to clean cookies,
1168 force enable or disable caching, etc... The package provides default error
1169 files returning the same contents as default errors.
1170
1171 The files are read at the same time as the configuration and kept in memory.
1172 For this reason, the errors continue to be returned even when the process is
1173 chrooted, and no file change is considered while the process is running. A
Willy Tarreauc27debf2008-01-06 08:57:02 +01001174 simple method for developing those files consists in associating them to the
Willy Tarreau0ba27502007-12-24 16:55:16 +01001175 403 status code and interrogating a blocked URL.
1176
1177 See also : "errorloc", "errorloc302", "errorloc303"
1178
Willy Tarreau2769aa02007-12-27 18:26:09 +01001179
1180errorloc <code> <url>
1181errorloc302 <code> <url>
1182 Return an HTTP redirection to a URL instead of errors generated by HAProxy
1183 May be used in sections : defaults | frontend | listen | backend
1184 yes | yes | yes | yes
1185 Arguments :
1186 <code> is the HTTP status code. Currently, HAProxy is capable of
1187 generating codes 400, 403, 408, 500, 502, 503, and 504.
1188
1189 <url> it is the exact contents of the "Location" header. It may contain
1190 either a relative URI to an error page hosted on the same site,
1191 or an absolute URI designating an error page on another site.
1192 Special care should be given to relative URIs to avoid redirect
1193 loops if the URI itself may generate the same error (eg: 500).
1194
1195 It is important to understand that this keyword is not meant to rewrite
1196 errors returned by the server, but errors detected and returned by HAProxy.
1197 This is why the list of supported errors is limited to a small set.
1198
1199 Note that both keyword return the HTTP 302 status code, which tells the
1200 client to fetch the designated URL using the same HTTP method. This can be
1201 quite problematic in case of non-GET methods such as POST, because the URL
1202 sent to the client might not be allowed for something other than GET. To
1203 workaround this problem, please use "errorloc303" which send the HTTP 303
1204 status code, indicating to the client that the URL must be fetched with a GET
1205 request.
1206
1207 See also : "errorfile", "errorloc303"
1208
1209
1210errorloc303 <code> <url>
1211 Return an HTTP redirection to a URL instead of errors generated by HAProxy
1212 May be used in sections : defaults | frontend | listen | backend
1213 yes | yes | yes | yes
1214 Arguments :
1215 <code> is the HTTP status code. Currently, HAProxy is capable of
1216 generating codes 400, 403, 408, 500, 502, 503, and 504.
1217
1218 <url> it is the exact contents of the "Location" header. It may contain
1219 either a relative URI to an error page hosted on the same site,
1220 or an absolute URI designating an error page on another site.
1221 Special care should be given to relative URIs to avoid redirect
1222 loops if the URI itself may generate the same error (eg: 500).
1223
1224 It is important to understand that this keyword is not meant to rewrite
1225 errors returned by the server, but errors detected and returned by HAProxy.
1226 This is why the list of supported errors is limited to a small set.
1227
1228 Note that both keyword return the HTTP 303 status code, which tells the
1229 client to fetch the designated URL using the same HTTP GET method. This
1230 solves the usual problems associated with "errorloc" and the 302 code. It is
1231 possible that some very old browsers designed before HTTP/1.1 do not support
1232 it, but no such problem have been reported till now.
1233
1234 See also : "errorfile", "errorloc", "errorloc302"
1235
1236
1237fullconn <conns>
1238 Specify at what backend load the servers will reach their maxconn
1239 May be used in sections : defaults | frontend | listen | backend
1240 yes | no | yes | yes
1241 Arguments :
1242 <conns> is the number of connections on the backend which will make the
1243 servers use the maximal number of connections.
1244
Willy Tarreau198a7442008-01-17 12:05:32 +01001245 When a server has a "maxconn" parameter specified, it means that its number
Willy Tarreau2769aa02007-12-27 18:26:09 +01001246 of concurrent connections will never go higher. Additionally, if it has a
Willy Tarreau198a7442008-01-17 12:05:32 +01001247 "minconn" parameter, it indicates a dynamic limit following the backend's
Willy Tarreau2769aa02007-12-27 18:26:09 +01001248 load. The server will then always accept at least <minconn> connections,
1249 never more than <maxconn>, and the limit will be on the ramp between both
1250 values when the backend has less than <conns> concurrent connections. This
1251 makes it possible to limit the load on the servers during normal loads, but
1252 push it further for important loads without overloading the servers during
1253 exceptionnal loads.
1254
1255 Example :
1256 # The servers will accept between 100 and 1000 concurrent connections each
1257 # and the maximum of 1000 will be reached when the backend reaches 10000
1258 # connections.
1259 backend dynamic
1260 fullconn 10000
1261 server srv1 dyn1:80 minconn 100 maxconn 1000
1262 server srv2 dyn2:80 minconn 100 maxconn 1000
1263
1264 See also : "maxconn", "server"
1265
1266
1267grace <time>
1268 Maintain a proxy operational for some time after a soft stop
1269 May be used in sections : defaults | frontend | listen | backend
1270 no | yes | yes | yes
1271 Arguments :
1272 <time> is the time (by default in milliseconds) for which the instance
1273 will remain operational with the frontend sockets still listening
1274 when a soft-stop is received via the SIGUSR1 signal.
1275
1276 This may be used to ensure that the services disappear in a certain order.
1277 This was designed so that frontends which are dedicated to monitoring by an
1278 external equipement fail immediately while other ones remain up for the time
1279 needed by the equipment to detect the failure.
1280
1281 Note that currently, there is very little benefit in using this parameter,
1282 and it may in fact complicate the soft-reconfiguration process more than
1283 simplify it.
1284
Willy Tarreau0ba27502007-12-24 16:55:16 +01001285
1286http-check disable-on-404
1287 Enable a maintenance mode upon HTTP/404 response to health-checks
1288 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau2769aa02007-12-27 18:26:09 +01001289 yes | no | yes | yes
Willy Tarreau0ba27502007-12-24 16:55:16 +01001290 Arguments : none
1291
1292 When this option is set, a server which returns an HTTP code 404 will be
1293 excluded from further load-balancing, but will still receive persistent
1294 connections. This provides a very convenient method for Web administrators
1295 to perform a graceful shutdown of their servers. It is also important to note
1296 that a server which is detected as failed while it was in this mode will not
1297 generate an alert, just a notice. If the server responds 2xx or 3xx again, it
1298 will immediately be reinserted into the farm. The status on the stats page
1299 reports "NOLB" for a server in this mode. It is important to note that this
1300 option only works in conjunction with the "httpchk" option.
1301
Willy Tarreau2769aa02007-12-27 18:26:09 +01001302 See also : "option httpchk"
1303
1304
1305log global
1306log <address> <facility> [<level>]
1307 Enable per-instance logging of events and traffic.
1308 May be used in sections : defaults | frontend | listen | backend
1309 yes | yes | yes | yes
1310 Arguments :
1311 global should be used when the instance's logging parameters are the
1312 same as the global ones. This is the most common usage. "global"
1313 replaces <address>, <facility> and <level> with those of the log
1314 entries found in the "global" section. Only one "log global"
1315 statement may be used per instance, and this form takes no other
1316 parameter.
1317
1318 <address> indicates where to send the logs. It takes the same format as
1319 for the "global" section's logs, and can be one of :
1320
1321 - An IPv4 address optionally followed by a colon (':') and a UDP
1322 port. If no port is specified, 514 is used by default (the
1323 standard syslog port).
1324
1325 - A filesystem path to a UNIX domain socket, keeping in mind
1326 considerations for chroot (be sure the path is accessible
1327 inside the chroot) and uid/gid (be sure the path is
1328 appropriately writeable).
1329
1330 <facility> must be one of the 24 standard syslog facilities :
1331
1332 kern user mail daemon auth syslog lpr news
1333 uucp cron auth2 ftp ntp audit alert cron2
1334 local0 local1 local2 local3 local4 local5 local6 local7
1335
1336 <level> is optional and can be specified to filter outgoing messages. By
1337 default, all messages are sent. If a level is specified, only
1338 messages with a severity at least as important as this level
1339 will be sent. 8 levels are known :
1340
1341 emerg alert crit err warning notice info debug
1342
1343 Note that up to two "log" entries may be specified per instance. However, if
1344 "log global" is used and if the "global" section already contains 2 log
1345 entries, then additional log entries will be ignored.
1346
1347 Also, it is important to keep in mind that it is the frontend which decides
1348 what to log, and that in case of content switching, the log entries from the
1349 backend will be ignored.
1350
1351 Example :
1352 log global
1353 log 127.0.0.1:514 local0 notice
1354
1355
1356maxconn <conns>
1357 Fix the maximum number of concurrent connections on a frontend
1358 May be used in sections : defaults | frontend | listen | backend
1359 yes | yes | yes | no
1360 Arguments :
1361 <conns> is the maximum number of concurrent connections the frontend will
1362 accept to serve. Excess connections will be queued by the system
1363 in the socket's listen queue and will be served once a connection
1364 closes.
1365
1366 If the system supports it, it can be useful on big sites to raise this limit
1367 very high so that haproxy manages connection queues, instead of leaving the
1368 clients with unanswered connection attempts. This value should not exceed the
1369 global maxconn. Also, keep in mind that a connection contains two buffers
1370 of 8kB each, as well as some other data resulting in about 17 kB of RAM being
1371 consumed per established connection. That means that a medium system equipped
1372 with 1GB of RAM can withstand around 40000-50000 concurrent connections if
1373 properly tuned.
1374
1375 Also, when <conns> is set to large values, it is possible that the servers
1376 are not sized to accept such loads, and for this reason it is generally wise
1377 to assign them some reasonable connection limits.
1378
1379 See also : "server", global section's "maxconn", "fullconn"
1380
1381
1382mode { tcp|http|health }
1383 Set the running mode or protocol of the instance
1384 May be used in sections : defaults | frontend | listen | backend
1385 yes | yes | yes | yes
1386 Arguments :
1387 tcp The instance will work in pure TCP mode. A full-duplex connection
1388 will be established between clients and servers, and no layer 7
1389 examination will be performed. This is the default mode. It
1390 should be used for SSL, SSH, SMTP, ...
1391
1392 http The instance will work in HTTP mode. The client request will be
1393 analyzed in depth before connecting to any server. Any request
1394 which is not RFC-compliant will be rejected. Layer 7 filtering,
1395 processing and switching will be possible. This is the mode which
1396 brings HAProxy most of its value.
1397
1398 health The instance will work in "health" mode. It will just reply "OK"
1399 to incoming connections and close the connection. Nothing will be
1400 logged. This mode is used to reply to external components health
1401 checks. This mode is deprecated and should not be used anymore as
1402 it is possible to do the same and even better by combining TCP or
1403 HTTP modes with the "monitor" keyword.
1404
1405 When doing content switching, it is mandatory that the frontend and the
1406 backend are in the same mode (generally HTTP), otherwise the configuration
1407 will be refused.
1408
1409 Example :
1410 defaults http_instances
1411 mode http
1412
1413 See also : "monitor", "monitor-net"
1414
Willy Tarreau0ba27502007-12-24 16:55:16 +01001415
1416monitor fail [if | unless] <condition>
Willy Tarreau2769aa02007-12-27 18:26:09 +01001417 Add a condition to report a failure to a monitor HTTP request.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001418 May be used in sections : defaults | frontend | listen | backend
1419 no | yes | yes | no
Willy Tarreau0ba27502007-12-24 16:55:16 +01001420 Arguments :
1421 if <cond> the monitor request will fail if the condition is satisfied,
1422 and will succeed otherwise. The condition should describe a
1423 combinated test which must induce a failure if all conditions
1424 are met, for instance a low number of servers both in a
1425 backend and its backup.
1426
1427 unless <cond> the monitor request will succeed only if the condition is
1428 satisfied, and will fail otherwise. Such a condition may be
1429 based on a test on the presence of a minimum number of active
1430 servers in a list of backends.
1431
1432 This statement adds a condition which can force the response to a monitor
1433 request to report a failure. By default, when an external component queries
1434 the URI dedicated to monitoring, a 200 response is returned. When one of the
1435 conditions above is met, haproxy will return 503 instead of 200. This is
1436 very useful to report a site failure to an external component which may base
1437 routing advertisements between multiple sites on the availability reported by
1438 haproxy. In this case, one would rely on an ACL involving the "nbsrv"
Willy Tarreau2769aa02007-12-27 18:26:09 +01001439 criterion. Note that "monitor fail" only works in HTTP mode.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001440
1441 Example:
1442 frontend www
Willy Tarreau2769aa02007-12-27 18:26:09 +01001443 mode http
Willy Tarreau0ba27502007-12-24 16:55:16 +01001444 acl site_dead nbsrv(dynamic) lt 2
1445 acl site_dead nbsrv(static) lt 2
1446 monitor-uri /site_alive
1447 monitor fail if site_dead
1448
Willy Tarreau2769aa02007-12-27 18:26:09 +01001449 See also : "monitor-net", "monitor-uri"
1450
1451
1452monitor-net <source>
1453 Declare a source network which is limited to monitor requests
1454 May be used in sections : defaults | frontend | listen | backend
1455 yes | yes | yes | no
1456 Arguments :
1457 <source> is the source IPv4 address or network which will only be able to
1458 get monitor responses to any request. It can be either an IPv4
1459 address, a host name, or an address followed by a slash ('/')
1460 followed by a mask.
1461
1462 In TCP mode, any connection coming from a source matching <source> will cause
1463 the connection to be immediately closed without any log. This allows another
1464 equipement to probe the port and verify that it is still listening, without
1465 forwarding the connection to a remote server.
1466
1467 In HTTP mode, a connection coming from a source matching <source> will be
1468 accepted, the following response will be sent without waiting for a request,
1469 then the connection will be closed : "HTTP/1.0 200 OK". This is normally
1470 enough for any front-end HTTP probe to detect that the service is UP and
1471 running without forwarding the request to a backend server.
1472
1473 Monitor requests are processed very early. It is not possible to block nor
1474 divert them using ACLs. They cannot be logged either, and it is the intended
1475 purpose. They are only used to report HAProxy's health to an upper component,
1476 nothing more. Right now, it is not possible to set failure conditions on
1477 requests caught by "monitor-net".
1478
1479 Example :
1480 # addresses .252 and .253 are just probing us.
1481 frontend www
1482 monitor-net 192.168.0.252/31
1483
1484 See also : "monitor fail", "monitor-uri"
1485
1486
1487monitor-uri <uri>
1488 Intercept a URI used by external components' monitor requests
1489 May be used in sections : defaults | frontend | listen | backend
1490 yes | yes | yes | no
1491 Arguments :
1492 <uri> is the exact URI which we want to intercept to return HAProxy's
1493 health status instead of forwarding the request.
1494
1495 When an HTTP request referencing <uri> will be received on a frontend,
1496 HAProxy will not forward it nor log it, but instead will return either
1497 "HTTP/1.0 200 OK" or "HTTP/1.0 503 Service unavailable", depending on failure
1498 conditions defined with "monitor fail". This is normally enough for any
1499 front-end HTTP probe to detect that the service is UP and running without
1500 forwarding the request to a backend server. Note that the HTTP method, the
1501 version and all headers are ignored, but the request must at least be valid
1502 at the HTTP level. This keyword may only be used with an HTTP-mode frontend.
1503
1504 Monitor requests are processed very early. It is not possible to block nor
1505 divert them using ACLs. They cannot be logged either, and it is the intended
1506 purpose. They are only used to report HAProxy's health to an upper component,
1507 nothing more. However, it is possible to add any number of conditions using
1508 "monitor fail" and ACLs so that the result can be adjusted to whatever check
1509 can be imagined (most often the number of available servers in a backend).
1510
1511 Example :
1512 # Use /haproxy_test to report haproxy's status
1513 frontend www
1514 mode http
1515 monitor-uri /haproxy_test
1516
1517 See also : "monitor fail", "monitor-net"
1518
Willy Tarreau0ba27502007-12-24 16:55:16 +01001519
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001520option abortonclose
1521no option abortonclose
1522 Enable or disable early dropping of aborted requests pending in queues.
1523 May be used in sections : defaults | frontend | listen | backend
1524 yes | no | yes | yes
1525 Arguments : none
1526
1527 In presence of very high loads, the servers will take some time to respond.
1528 The per-instance connection queue will inflate, and the response time will
1529 increase respective to the size of the queue times the average per-session
1530 response time. When clients will wait for more than a few seconds, they will
Willy Tarreau198a7442008-01-17 12:05:32 +01001531 often hit the "STOP" button on their browser, leaving a useless request in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001532 the queue, and slowing down other users, and the servers as well, because the
1533 request will eventually be served, then aborted at the first error
1534 encountered while delivering the response.
1535
1536 As there is no way to distinguish between a full STOP and a simple output
1537 close on the client side, HTTP agents should be conservative and consider
1538 that the client might only have closed its output channel while waiting for
1539 the response. However, this introduces risks of congestion when lots of users
1540 do the same, and is completely useless nowadays because probably no client at
1541 all will close the session while waiting for the response. Some HTTP agents
1542 support this behaviour (Squid, Apache, HAProxy), and others do not (TUX, most
1543 hardware-based load balancers). So the probability for a closed input channel
Willy Tarreau198a7442008-01-17 12:05:32 +01001544 to represent a user hitting the "STOP" button is close to 100%, and the risk
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001545 of being the single component to break rare but valid traffic is extremely
1546 low, which adds to the temptation to be able to abort a session early while
1547 still not served and not pollute the servers.
1548
1549 In HAProxy, the user can choose the desired behaviour using the option
1550 "abortonclose". By default (without the option) the behaviour is HTTP
1551 compliant and aborted requests will be served. But when the option is
1552 specified, a session with an incoming channel closed will be aborted while
1553 it is still possible, either pending in the queue for a connection slot, or
1554 during the connection establishment if the server has not yet acknowledged
1555 the connection request. This considerably reduces the queue size and the load
1556 on saturated servers when users are tempted to click on STOP, which in turn
1557 reduces the response time for other users.
1558
1559 If this option has been enabled in a "defaults" section, it can be disabled
1560 in a specific instance by prepending the "no" keyword before it.
1561
1562 See also : "timeout queue" and server's "maxconn" and "maxqueue" parameters
1563
1564
1565option allbackups
1566no option allbackups
1567 Use either all backup servers at a time or only the first one
1568 May be used in sections : defaults | frontend | listen | backend
1569 yes | no | yes | yes
1570 Arguments : none
1571
1572 By default, the first operational backup server gets all traffic when normal
1573 servers are all down. Sometimes, it may be preferred to use multiple backups
1574 at once, because one will not be enough. When "option allbackups" is enabled,
1575 the load balancing will be performed among all backup servers when all normal
1576 ones are unavailable. The same load balancing algorithm will be used and the
1577 servers' weights will be respected. Thus, there will not be any priority
1578 order between the backup servers anymore.
1579
1580 This option is mostly used with static server farms dedicated to return a
1581 "sorry" page when an application is completely offline.
1582
1583 If this option has been enabled in a "defaults" section, it can be disabled
1584 in a specific instance by prepending the "no" keyword before it.
1585
1586
1587option checkcache
1588no option checkcache
1589 Analyze all server responses and block requests with cachable cookies
1590 May be used in sections : defaults | frontend | listen | backend
1591 yes | no | yes | yes
1592 Arguments : none
1593
1594 Some high-level frameworks set application cookies everywhere and do not
1595 always let enough control to the developer to manage how the responses should
1596 be cached. When a session cookie is returned on a cachable object, there is a
1597 high risk of session crossing or stealing between users traversing the same
1598 caches. In some situations, it is better to block the response than to let
1599 some sensible session information go in the wild.
1600
1601 The option "checkcache" enables deep inspection of all server responses for
1602 strict compliance with HTTP specification in terms of cachability. It
Willy Tarreau198a7442008-01-17 12:05:32 +01001603 carefully checks "Cache-control", "Pragma" and "Set-cookie" headers in server
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001604 response to check if there's a risk of caching a cookie on a client-side
1605 proxy. When this option is enabled, the only responses which can be delivered
Willy Tarreau198a7442008-01-17 12:05:32 +01001606 to the client are :
1607 - all those without "Set-Cookie" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001608 - all those with a return code other than 200, 203, 206, 300, 301, 410,
Willy Tarreau198a7442008-01-17 12:05:32 +01001609 provided that the server has not set a "Cache-control: public" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001610 - all those that come from a POST request, provided that the server has not
1611 set a 'Cache-Control: public' header ;
1612 - those with a 'Pragma: no-cache' header
1613 - those with a 'Cache-control: private' header
1614 - those with a 'Cache-control: no-store' header
1615 - those with a 'Cache-control: max-age=0' header
1616 - those with a 'Cache-control: s-maxage=0' header
1617 - those with a 'Cache-control: no-cache' header
1618 - those with a 'Cache-control: no-cache="set-cookie"' header
1619 - those with a 'Cache-control: no-cache="set-cookie,' header
1620 (allowing other fields after set-cookie)
1621
1622 If a response doesn't respect these requirements, then it will be blocked
Willy Tarreau198a7442008-01-17 12:05:32 +01001623 just as if it was from an "rspdeny" filter, with an "HTTP 502 bad gateway".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001624 The session state shows "PH--" meaning that the proxy blocked the response
1625 during headers processing. Additionnaly, an alert will be sent in the logs so
1626 that admins are informed that there's something to be fixed.
1627
1628 Due to the high impact on the application, the application should be tested
1629 in depth with the option enabled before going to production. It is also a
1630 good practise to always activate it during tests, even if it is not used in
1631 production, as it will report potentially dangerous application behaviours.
1632
1633 If this option has been enabled in a "defaults" section, it can be disabled
1634 in a specific instance by prepending the "no" keyword before it.
1635
1636
1637option clitcpka
1638no option clitcpka
1639 Enable or disable the sending of TCP keepalive packets on the client side
1640 May be used in sections : defaults | frontend | listen | backend
1641 yes | yes | yes | no
1642 Arguments : none
1643
1644 When there is a firewall or any session-aware component between a client and
1645 a server, and when the protocol involves very long sessions with long idle
1646 periods (eg: remote desktops), there is a risk that one of the intermediate
1647 components decides to expire a session which has remained idle for too long.
1648
1649 Enabling socket-level TCP keep-alives makes the system regularly send packets
1650 to the other end of the connection, leaving it active. The delay between
1651 keep-alive probes is controlled by the system only and depends both on the
1652 operating system and its tuning parameters.
1653
1654 It is important to understand that keep-alive packets are neither emitted nor
1655 received at the application level. It is only the network stacks which sees
1656 them. For this reason, even if one side of the proxy already uses keep-alives
1657 to maintain its connection alive, those keep-alive packets will not be
1658 forwarded to the other side of the proxy.
1659
1660 Please note that this has nothing to do with HTTP keep-alive.
1661
1662 Using option "clitcpka" enables the emission of TCP keep-alive probes on the
1663 client side of a connection, which should help when session expirations are
1664 noticed between HAProxy and a client.
1665
1666 If this option has been enabled in a "defaults" section, it can be disabled
1667 in a specific instance by prepending the "no" keyword before it.
1668
1669 See also : "option srvtcpka", "option tcpka"
1670
1671
Willy Tarreau0ba27502007-12-24 16:55:16 +01001672option contstats
1673 Enable continuous traffic statistics updates
1674 May be used in sections : defaults | frontend | listen | backend
1675 yes | yes | yes | no
1676 Arguments : none
1677
1678 By default, counters used for statistics calculation are incremented
1679 only when a session finishes. It works quite well when serving small
1680 objects, but with big ones (for example large images or archives) or
1681 with A/V streaming, a graph generated from haproxy counters looks like
1682 a hedgehog. With this option enabled counters get incremented continuously,
1683 during a whole session. Recounting touches a hotpath directly so
1684 it is not enabled by default, as it has small performance impact (~0.5%).
1685
1686
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001687option dontlognull
1688no option dontlognull
1689 Enable or disable logging of null connections
1690 May be used in sections : defaults | frontend | listen | backend
1691 yes | yes | yes | no
1692 Arguments : none
1693
1694 In certain environments, there are components which will regularly connect to
1695 various systems to ensure that they are still alive. It can be the case from
1696 another load balancer as well as from monitoring systems. By default, even a
1697 simple port probe or scan will produce a log. If those connections pollute
1698 the logs too much, it is possible to enable option "dontlognull" to indicate
1699 that a connection on which no data has been transferred will not be logged,
1700 which typically corresponds to those probes.
1701
1702 It is generally recommended not to use this option in uncontrolled
1703 environments (eg: internet), otherwise scans and other malicious activities
1704 would not be logged.
1705
1706 If this option has been enabled in a "defaults" section, it can be disabled
1707 in a specific instance by prepending the "no" keyword before it.
1708
Willy Tarreau844e3c52008-01-11 16:28:18 +01001709 See also : "log", "monitor-net", "monitor-uri" and section 2.5 about logging.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01001710
1711
1712option forceclose
1713no option forceclose
1714 Enable or disable active connection closing after response is transferred.
1715 May be used in sections : defaults | frontend | listen | backend
1716 yes | no | yes | yes
1717 Arguments : none
1718
1719 Some HTTP servers do not necessarily close the connections when they receive
1720 the "Connection: close" set by "option httpclose", and if the client does not
1721 close either, then the connection remains open till the timeout expires. This
1722 causes high number of simultaneous connections on the servers and shows high
1723 global session times in the logs.
1724
1725 When this happens, it is possible to use "option forceclose". It will
1726 actively close the outgoing server channel as soon as the server begins to
1727 reply and only if the request buffer is empty. Note that this should NOT be
1728 used if CONNECT requests are expected between the client and the server. This
1729 option implicitly enables the "httpclose" option.
1730
1731 If this option has been enabled in a "defaults" section, it can be disabled
1732 in a specific instance by prepending the "no" keyword before it.
1733
1734 See also : "option httpclose"
1735
1736
Willy Tarreauc27debf2008-01-06 08:57:02 +01001737option forwardfor [ except <network> ]
1738 Enable insertion of the X-Forwarded-For header to requests sent to servers
1739 May be used in sections : defaults | frontend | listen | backend
1740 yes | yes | yes | yes
1741 Arguments :
1742 <network> is an optional argument used to disable this option for sources
1743 matching <network>
1744
1745 Since HAProxy works in reverse-proxy mode, the servers see its IP address as
1746 their client address. This is sometimes annoying when the client's IP address
1747 is expected in server logs. To solve this problem, the well-known HTTP header
1748 "X-Forwarded-For" may be added by HAProxy to all requests sent to the server.
1749 This header contains a value representing the client's IP address. Since this
1750 header is always appended at the end of the existing header list, the server
1751 must be configured to always use the last occurrence of this header only. See
1752 the server's manual to find how to enable use of this standard header.
1753
1754 Sometimes, a same HAProxy instance may be shared between a direct client
1755 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
1756 used to decrypt HTTPS traffic). It is possible to disable the addition of the
1757 header for a known source address or network by adding the "except" keyword
1758 followed by the network address. In this case, any source IP matching the
1759 network will not cause an addition of this header. Most common uses are with
1760 private networks or 127.0.0.1.
1761
1762 This option may be specified either in the frontend or in the backend. If at
1763 least one of them uses it, the header will be added.
1764
1765 It is important to note that as long as HAProxy does not support keep-alive
1766 connections, only the first request of a connection will receive the header.
1767 For this reason, it is important to ensure that "option httpclose" is set
1768 when using this option.
1769
1770 Example :
1771 # Public HTTP address also used by stunnel on the same machine
1772 frontend www
1773 mode http
1774 option forwardfor except 127.0.0.1 # stunnel already adds the header
1775
1776 See also : "option httpclose"
1777
1778
1779option http_proxy
1780no option http_proxy
1781 Enable or disable plain HTTP proxy mode
1782 May be used in sections : defaults | frontend | listen | backend
1783 yes | yes | yes | yes
1784 Arguments : none
1785
1786 It sometimes happens that people need a pure HTTP proxy which understands
1787 basic proxy requests without caching nor any fancy feature. In this case,
1788 it may be worth setting up an HAProxy instance with the "option http_proxy"
1789 set. In this mode, no server is declared, and the connection is forwarded to
1790 the IP address and port found in the URL after the "http://" scheme.
1791
1792 No host address resolution is performed, so this only works when pure IP
1793 addresses are passed. Since this option's usage perimeter is rather limited,
1794 it will probably be used only by experts who know they need exactly it. Last,
1795 if the clients are susceptible of sending keep-alive requests, it will be
1796 needed to add "option http_close" to ensure that all requests will correctly
1797 be analyzed.
1798
1799 If this option has been enabled in a "defaults" section, it can be disabled
1800 in a specific instance by prepending the "no" keyword before it.
1801
1802 Example :
1803 # this backend understands HTTP proxy requests and forwards them directly.
1804 backend direct_forward
1805 option httpclose
1806 option http_proxy
1807
1808 See also : "option httpclose"
1809
1810
1811option httpchk
1812option httpchk <uri>
1813option httpchk <method> <uri>
1814option httpchk <method> <uri> <version>
1815 Enable HTTP protocol to check on the servers health
1816 May be used in sections : defaults | frontend | listen | backend
1817 yes | no | yes | yes
1818 Arguments :
1819 <method> is the optional HTTP method used with the requests. When not set,
1820 the "OPTIONS" method is used, as it generally requires low server
1821 processing and is easy to filter out from the logs. Any method
1822 may be used, though it is not recommended to invent non-standard
1823 ones.
1824
1825 <uri> is the URI referenced in the HTTP requests. It defaults to " / "
1826 which is accessible by default on almost any server, but may be
1827 changed to any other URI. Query strings are permitted.
1828
1829 <version> is the optional HTTP version string. It defaults to "HTTP/1.0"
1830 but some servers might behave incorrectly in HTTP 1.0, so turning
1831 it to HTTP/1.1 may sometimes help. Note that the Host field is
1832 mandatory in HTTP/1.1, and as a trick, it is possible to pass it
1833 after "\r\n" following the version string.
1834
1835 By default, server health checks only consist in trying to establish a TCP
1836 connection. When "option httpchk" is specified, a complete HTTP request is
1837 sent once the TCP connection is established, and responses 2xx and 3xx are
1838 considered valid, while all other ones indicate a server failure, including
1839 the lack of any response.
1840
1841 The port and interval are specified in the server configuration.
1842
1843 This option does not necessarily require an HTTP backend, it also works with
1844 plain TCP backends. This is particularly useful to check simple scripts bound
1845 to some dedicated ports using the inetd daemon.
1846
1847 Examples :
1848 # Relay HTTPS traffic to Apache instance and check service availability
1849 # using HTTP request "OPTIONS * HTTP/1.1" on port 80.
1850 backend https_relay
1851 mode tcp
1852 option httpchk OPTIONS * HTTP/1.1\r\nHost: www
1853 server apache1 192.168.1.1:443 check port 80
1854
1855 See also : "option ssl-hello-chk", "option smtpchk", "http-check" and the
1856 "check", "port" and "interval" server options.
1857
1858
1859option httpclose
1860no option httpclose
1861 Enable or disable passive HTTP connection closing
1862 May be used in sections : defaults | frontend | listen | backend
1863 yes | yes | yes | yes
1864 Arguments : none
1865
1866 As stated in section 2.1, HAProxy does not yes support the HTTP keep-alive
1867 mode. So by default, if a client communicates with a server in this mode, it
1868 will only analyze, log, and process the first request of each connection. To
1869 workaround this limitation, it is possible to specify "option httpclose". It
1870 will check if a "Connection: close" header is already set in each direction,
1871 and will add one if missing. Each end should react to this by actively
1872 closing the TCP connection after each transfer, thus resulting in a switch to
1873 the HTTP close mode. Any "Connection" header different from "close" will also
1874 be removed.
1875
1876 It seldom happens that some servers incorrectly ignore this header and do not
1877 close the connection eventough they reply "Connection: close". For this
1878 reason, they are not compatible with older HTTP 1.0 browsers. If this
1879 happens it is possible to use the "option forceclose" which actively closes
1880 the request connection once the server responds.
1881
1882 This option may be set both in a frontend and in a backend. It is enabled if
1883 at least one of the frontend or backend holding a connection has it enabled.
1884 If "option forceclose" is specified too, it has precedence over "httpclose".
1885
1886 If this option has been enabled in a "defaults" section, it can be disabled
1887 in a specific instance by prepending the "no" keyword before it.
1888
1889 See also : "option forceclose"
1890
1891
1892option httplog
1893 Enable logging of HTTP request, session state and timers
1894 May be used in sections : defaults | frontend | listen | backend
1895 yes | yes | yes | yes
1896 Arguments : none
1897
1898 By default, the log output format is very poor, as it only contains the
1899 source and destination addresses, and the instance name. By specifying
1900 "option httplog", each log line turns into a much richer format including,
1901 but not limited to, the HTTP request, the connection timers, the session
1902 status, the connections numbers, the captured headers and cookies, the
1903 frontend, backend and server name, and of course the source address and
1904 ports.
1905
1906 This option may be set either in the frontend or the backend.
1907
Willy Tarreau844e3c52008-01-11 16:28:18 +01001908 See also : section 2.5 about logging.
Willy Tarreauc27debf2008-01-06 08:57:02 +01001909
Willy Tarreauc27debf2008-01-06 08:57:02 +01001910
1911option logasap
1912no option logasap
1913 Enable or disable early logging of HTTP requests
1914 May be used in sections : defaults | frontend | listen | backend
1915 yes | yes | yes | no
1916 Arguments : none
1917
1918 By default, HTTP requests are logged upon termination so that the total
1919 transfer time and the number of bytes appear in the logs. When large objects
1920 are being transferred, it may take a while before the request appears in the
1921 logs. Using "option logasap", the request gets logged as soon as the server
1922 sends the complete headers. The only missing information in the logs will be
1923 the total number of bytes which will indicate everything except the amount
1924 of data transferred, and the total time which will not take the transfer
1925 time into account. In such a situation, it's a good practise to capture the
1926 "Content-Length" response header so that the logs at least indicate how many
1927 bytes are expected to be transferred.
1928
Willy Tarreau844e3c52008-01-11 16:28:18 +01001929 See also : "option httplog", "capture response header", and section 2.5 about
Willy Tarreauc27debf2008-01-06 08:57:02 +01001930 logging.
1931
1932
Willy Tarreaua453bdd2008-01-08 19:50:52 +01001933option nolinger
1934no option nolinger
1935 Enable or disable immediate session ressource cleaning after close
1936 May be used in sections: defaults | frontend | listen | backend
1937 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01001938 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01001939
1940 When clients or servers abort connections in a dirty way (eg: they are
1941 physically disconnected), the session timeouts triggers and the session is
1942 closed. But it will remain in FIN_WAIT1 state for some time in the system,
1943 using some resources and possibly limiting the ability to establish newer
1944 connections.
1945
1946 When this happens, it is possible to activate "option nolinger" which forces
1947 the system to immediately remove any socket's pending data on close. Thus,
1948 the session is instantly purged from the system's tables. This usually has
1949 side effects such as increased number of TCP resets due to old retransmits
1950 getting immediately rejected. Some firewalls may sometimes complain about
1951 this too.
1952
1953 For this reason, it is not recommended to use this option when not absolutely
1954 needed. You know that you need it when you have thousands of FIN_WAIT1
1955 sessions on your system (TIME_WAIT ones do not count).
1956
1957 This option may be used both on frontends and backends, depending on the side
1958 where it is required. Use it on the frontend for clients, and on the backend
1959 for servers.
1960
1961 If this option has been enabled in a "defaults" section, it can be disabled
1962 in a specific instance by prepending the "no" keyword before it.
1963
1964
1965option persist
1966no option persist
1967 Enable or disable forced persistence on down servers
1968 May be used in sections: defaults | frontend | listen | backend
1969 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01001970 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01001971
1972 When an HTTP request reaches a backend with a cookie which references a dead
1973 server, by default it is redispatched to another server. It is possible to
1974 force the request to be sent to the dead server first using "option persist"
1975 if absolutely needed. A common use case is when servers are under extreme
1976 load and spend their time flapping. In this case, the users would still be
1977 directed to the server they opened the session on, in the hope they would be
1978 correctly served. It is recommended to use "option redispatch" in conjunction
1979 with this option so that in the event it would not be possible to connect to
1980 the server at all (server definitely dead), the client would finally be
1981 redirected to another valid server.
1982
1983 If this option has been enabled in a "defaults" section, it can be disabled
1984 in a specific instance by prepending the "no" keyword before it.
1985
1986 See also : "option redispatch", "retries"
1987
1988
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01001989option redispatch
1990no option redispatch
1991 Enable or disable session redistribution in case of connection failure
1992 May be used in sections: defaults | frontend | listen | backend
1993 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01001994 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01001995
1996 In HTTP mode, if a server designated by a cookie is down, clients may
1997 definitely stick to it because they cannot flush the cookie, so they will not
1998 be able to access the service anymore.
1999
2000 Specifying "option redispatch" will allow the proxy to break their
2001 persistence and redistribute them to a working server.
2002
2003 It also allows to retry last connection to another server in case of multiple
2004 connection failures. Of course, it requires having "retries" set to a nonzero
2005 value.
2006
2007 This form is the preferred form, which replaces both the "redispatch" and
2008 "redisp" keywords.
2009
2010 If this option has been enabled in a "defaults" section, it can be disabled
2011 in a specific instance by prepending the "no" keyword before it.
2012
2013 See also : "redispatch", "retries"
2014
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002015
2016option smtpchk
2017option smtpchk <hello> <domain>
2018 Use SMTP health checks for server testing
2019 May be used in sections : defaults | frontend | listen | backend
2020 yes | no | yes | yes
2021 Arguments :
2022 <hello> is an optional argument. It is the "hello" command to use. It can
2023 be either "HELO" (for SMTP) or "EHLO" (for ESTMP). All other
2024 values will be turned into the default command ("HELO").
2025
2026 <domain> is the domain name to present to the server. It may only be
2027 specified (and is mandatory) if the hello command has been
2028 specified. By default, "localhost" is used.
2029
2030 When "option smtpchk" is set, the health checks will consist in TCP
2031 connections followed by an SMTP command. By default, this command is
2032 "HELO localhost". The server's return code is analyzed and only return codes
2033 starting with a "2" will be considered as valid. All other responses,
2034 including a lack of response will constitute an error and will indicate a
2035 dead server.
2036
2037 This test is meant to be used with SMTP servers or relays. Depending on the
2038 request, it is possible that some servers do not log each connection attempt,
2039 so you may want to experiment to improve the behaviour. Using telnet on port
2040 25 is often easier than adjusting the configuration.
2041
2042 Most often, an incoming SMTP server needs to see the client's IP address for
2043 various purposes, including spam filtering, anti-spoofing and logging. When
2044 possible, it is often wise to masquerade the client's IP address when
2045 connecting to the server using the "usesrc" argument of the "source" keyword,
2046 which requires the cttproxy feature to be compiled in.
2047
2048 Example :
2049 option smtpchk HELO mydomain.org
2050
2051 See also : "option httpchk", "source"
2052
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002053
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002054option srvtcpka
2055no option srvtcpka
2056 Enable or disable the sending of TCP keepalive packets on the server side
2057 May be used in sections : defaults | frontend | listen | backend
2058 yes | no | yes | yes
2059 Arguments : none
2060
2061 When there is a firewall or any session-aware component between a client and
2062 a server, and when the protocol involves very long sessions with long idle
2063 periods (eg: remote desktops), there is a risk that one of the intermediate
2064 components decides to expire a session which has remained idle for too long.
2065
2066 Enabling socket-level TCP keep-alives makes the system regularly send packets
2067 to the other end of the connection, leaving it active. The delay between
2068 keep-alive probes is controlled by the system only and depends both on the
2069 operating system and its tuning parameters.
2070
2071 It is important to understand that keep-alive packets are neither emitted nor
2072 received at the application level. It is only the network stacks which sees
2073 them. For this reason, even if one side of the proxy already uses keep-alives
2074 to maintain its connection alive, those keep-alive packets will not be
2075 forwarded to the other side of the proxy.
2076
2077 Please note that this has nothing to do with HTTP keep-alive.
2078
2079 Using option "srvtcpka" enables the emission of TCP keep-alive probes on the
2080 server side of a connection, which should help when session expirations are
2081 noticed between HAProxy and a server.
2082
2083 If this option has been enabled in a "defaults" section, it can be disabled
2084 in a specific instance by prepending the "no" keyword before it.
2085
2086 See also : "option clitcpka", "option tcpka"
2087
2088
Willy Tarreaua453bdd2008-01-08 19:50:52 +01002089option ssl-hello-chk
2090 Use SSLv3 client hello health checks for server testing
2091 May be used in sections : defaults | frontend | listen | backend
2092 yes | no | yes | yes
2093 Arguments : none
2094
2095 When some SSL-based protocols are relayed in TCP mode through HAProxy, it is
2096 possible to test that the server correctly talks SSL instead of just testing
2097 that it accepts the TCP connection. When "option ssl-hello-chk" is set, pure
2098 SSLv3 client hello messages are sent once the connection is established to
2099 the server, and the response is analyzed to find an SSL server hello message.
2100 The server is considered valid only when the response contains this server
2101 hello message.
2102
2103 All servers tested till there correctly reply to SSLv3 client hello messages,
2104 and most servers tested do not even log the requests containing only hello
2105 messages, which is appreciable.
2106
2107 See also: "option httpchk"
2108
2109
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002110option tcpka
2111 Enable or disable the sending of TCP keepalive packets on both sides
2112 May be used in sections : defaults | frontend | listen | backend
2113 yes | yes | yes | yes
2114 Arguments : none
2115
2116 When there is a firewall or any session-aware component between a client and
2117 a server, and when the protocol involves very long sessions with long idle
2118 periods (eg: remote desktops), there is a risk that one of the intermediate
2119 components decides to expire a session which has remained idle for too long.
2120
2121 Enabling socket-level TCP keep-alives makes the system regularly send packets
2122 to the other end of the connection, leaving it active. The delay between
2123 keep-alive probes is controlled by the system only and depends both on the
2124 operating system and its tuning parameters.
2125
2126 It is important to understand that keep-alive packets are neither emitted nor
2127 received at the application level. It is only the network stacks which sees
2128 them. For this reason, even if one side of the proxy already uses keep-alives
2129 to maintain its connection alive, those keep-alive packets will not be
2130 forwarded to the other side of the proxy.
2131
2132 Please note that this has nothing to do with HTTP keep-alive.
2133
2134 Using option "tcpka" enables the emission of TCP keep-alive probes on both
2135 the client and server sides of a connection. Note that this is meaningful
2136 only in "defaults" or "listen" sections. If this option is used in a
2137 frontend, only the client side will get keep-alives, and if this option is
2138 used in a backend, only the server side will get keep-alives. For this
2139 reason, it is strongly recommended to explicitly use "option clitcpka" and
2140 "option srvtcpka" when the configuration is split between frontends and
2141 backends.
2142
2143 See also : "option clitcpka", "option srvtcpka"
2144
Willy Tarreau844e3c52008-01-11 16:28:18 +01002145
2146option tcplog
2147 Enable advanced logging of TCP connections with session state and timers
2148 May be used in sections : defaults | frontend | listen | backend
2149 yes | yes | yes | yes
2150 Arguments : none
2151
2152 By default, the log output format is very poor, as it only contains the
2153 source and destination addresses, and the instance name. By specifying
2154 "option tcplog", each log line turns into a much richer format including, but
2155 not limited to, the connection timers, the session status, the connections
2156 numbers, the frontend, backend and server name, and of course the source
2157 address and ports. This option is useful for pure TCP proxies in order to
2158 find which of the client or server disconnects or times out. For normal HTTP
2159 proxies, it's better to use "option httplog" which is even more complete.
2160
2161 This option may be set either in the frontend or the backend.
2162
2163 See also : "option httplog", and section 2.5 about logging.
2164
2165
2166option tcpsplice [ experimental ]
2167 Enable linux kernel-based acceleration of data relaying
2168 May be used in sections : defaults | frontend | listen | backend
2169 yes | yes | yes | yes
2170 Arguments : none
2171
2172 This option is only available when HAProxy has been built for use on Linux
2173 with USE_TCPSPLICE=1. This option requires a kernel patch which is available
2174 on http://www.linux-l7sw.org/.
2175
2176 When "option tcpsplice" is set, as soon as the server's response headers have
2177 been transferred, the session handling is transferred to the kernel which
2178 will forward all subsequent data from the server to the client untill the
2179 session closes. This leads to much faster data transfers between client and
2180 server since the data is not copied twice between kernel and user space, but
2181 there are some limitations such as the lack of information about the number
2182 of bytes transferred and the total transfer time.
2183
2184 This is an experimental feature. It happens to reliably work but issues
2185 caused by corner cases are to be expected.
2186
2187 Note that this option requires that the process permanently runs with
2188 CAP_NETADMIN privileges, which most often translates into running as root.
2189
2190
2191option transparent
2192no option transparent
2193 Enable client-side transparent proxying
2194 May be used in sections : defaults | frontend | listen | backend
2195 yes | yes | yes | no
2196 Arguments : none
2197
2198 This option was introduced in order to provide layer 7 persistence to layer 3
2199 load balancers. The idea is to use the OS's ability to redirect an incoming
2200 connection for a remote address to a local process (here HAProxy), and let
2201 this process know what address was initially requested. When this option is
2202 used, sessions without cookies will be forwarded to the original destination
2203 IP address of the incoming request (which should match that of another
2204 equipment), while requests with cookies will still be forwarded to the
2205 appropriate server.
2206
2207 Note that contrary to a common belief, this option does NOT make HAProxy
2208 present the client's IP to the server when establishing the connection.
2209
2210 Use of this option is really discouraged, and since no really valid use of it
2211 has been reported for years, it will probably be removed in future versions.
2212
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002213 See also: the "usersrc" argument of the "source" keyword, and the
2214 "transparent" option of the "bind" keyword.
Willy Tarreau844e3c52008-01-11 16:28:18 +01002215
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002216
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002217redisp (deprecated)
2218redispatch (deprecated)
2219 Enable or disable session redistribution in case of connection failure
2220 May be used in sections: defaults | frontend | listen | backend
2221 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002222 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002223
2224 In HTTP mode, if a server designated by a cookie is down, clients may
2225 definitely stick to it because they cannot flush the cookie, so they will not
2226 be able to access the service anymore.
2227
2228 Specifying "redispatch" will allow the proxy to break their persistence and
2229 redistribute them to a working server.
2230
2231 It also allows to retry last connection to another server in case of multiple
2232 connection failures. Of course, it requires having "retries" set to a nonzero
2233 value.
2234
2235 This form is deprecated, do not use it in any new configuration, use the new
2236 "option redispatch" instead.
2237
2238 See also : "option redispatch"
2239
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002240
Willy Tarreau303c0352008-01-17 19:01:39 +01002241reqadd <string>
2242 Add a header at the end of the HTTP request
2243 May be used in sections : defaults | frontend | listen | backend
2244 no | yes | yes | yes
2245 Arguments :
2246 <string> is the complete line to be added. Any space or known delimiter
2247 must be escaped using a backslash ('\'). Please refer to section
2248 2.6 about HTTP header manipulation for more information.
2249
2250 A new line consisting in <string> followed by a line feed will be added after
2251 the last header of an HTTP request.
2252
2253 Header transformations only apply to traffic which passes through HAProxy,
2254 and not to traffic generated by HAProxy, such as health-checks or error
2255 responses.
2256
2257 See also: "rspadd" and section 2.6 about HTTP header manipulation
2258
2259
2260reqallow <search>
2261reqiallow <search> (ignore case)
2262 Definitely allow an HTTP request if a line matches a regular expression
2263 May be used in sections : defaults | frontend | listen | backend
2264 no | yes | yes | yes
2265 Arguments :
2266 <search> is the regular expression applied to HTTP headers and to the
2267 request line. This is an extended regular expression. Parenthesis
2268 grouping is supported and no preliminary backslash is required.
2269 Any space or known delimiter must be escaped using a backslash
2270 ('\'). The pattern applies to a full line at a time. The
2271 "reqallow" keyword strictly matches case while "reqiallow"
2272 ignores case.
2273
2274 A request containing any line which matches extended regular expression
2275 <search> will mark the request as allowed, even if any later test would
2276 result in a deny. The test applies both to the request line and to request
2277 headers. Keep in mind that URLs in request line are case-sensitive while
2278 header names are not.
2279
2280 It is easier, faster and more powerful to use ACLs to write access policies.
2281 Reqdeny, reqallow and reqpass should be avoided in new designs.
2282
2283 Example :
2284 # allow www.* but refuse *.local
2285 reqiallow ^Host:\ www\.
2286 reqideny ^Host:\ .*\.local
2287
2288 See also: "reqdeny", "acl", "block" and section 2.6 about HTTP header
2289 manipulation
2290
2291
2292reqdel <search>
2293reqidel <search> (ignore case)
2294 Delete all headers matching a regular expression in an HTTP request
2295 May be used in sections : defaults | frontend | listen | backend
2296 no | yes | yes | yes
2297 Arguments :
2298 <search> is the regular expression applied to HTTP headers and to the
2299 request line. This is an extended regular expression. Parenthesis
2300 grouping is supported and no preliminary backslash is required.
2301 Any space or known delimiter must be escaped using a backslash
2302 ('\'). The pattern applies to a full line at a time. The "reqdel"
2303 keyword strictly matches case while "reqidel" ignores case.
2304
2305 Any header line matching extended regular expression <search> in the request
2306 will be completely deleted. Most common use of this is to remove unwanted
2307 and/or dangerous headers or cookies from a request before passing it to the
2308 next servers.
2309
2310 Header transformations only apply to traffic which passes through HAProxy,
2311 and not to traffic generated by HAProxy, such as health-checks or error
2312 responses. Keep in mind that header names are not case-sensitive.
2313
2314 Example :
2315 # remove X-Forwarded-For header and SERVER cookie
2316 reqidel ^X-Forwarded-For:.*
2317 reqidel ^Cookie:.*SERVER=
2318
2319 See also: "reqadd", "reqrep", "rspdel" and section 2.6 about HTTP header
2320 manipulation
2321
2322
2323reqdeny <search>
2324reqideny <search> (ignore case)
2325 Deny an HTTP request if a line matches a regular expression
2326 May be used in sections : defaults | frontend | listen | backend
2327 no | yes | yes | yes
2328 Arguments :
2329 <search> is the regular expression applied to HTTP headers and to the
2330 request line. This is an extended regular expression. Parenthesis
2331 grouping is supported and no preliminary backslash is required.
2332 Any space or known delimiter must be escaped using a backslash
2333 ('\'). The pattern applies to a full line at a time. The
2334 "reqdeny" keyword strictly matches case while "reqideny" ignores
2335 case.
2336
2337 A request containing any line which matches extended regular expression
2338 <search> will mark the request as denied, even if any later test would
2339 result in an allow. The test applies both to the request line and to request
2340 headers. Keep in mind that URLs in request line are case-sensitive while
2341 header names are not.
2342
2343 It is easier, faster and more powerful to use ACLs to write access policies.
2344 Reqdeny, reqallow and reqpass should be avoided in new designs.
2345
2346 Example :
2347 # refuse *.local, then allow www.*
2348 reqideny ^Host:\ .*\.local
2349 reqiallow ^Host:\ www\.
2350
2351 See also: "reqallow", "rspdeny", "acl", "block" and section 2.6 about HTTP
2352 header manipulation
2353
2354
2355reqpass <search>
2356reqipass <search> (ignore case)
2357 Ignore any HTTP request line matching a regular expression in next rules
2358 May be used in sections : defaults | frontend | listen | backend
2359 no | yes | yes | yes
2360 Arguments :
2361 <search> is the regular expression applied to HTTP headers and to the
2362 request line. This is an extended regular expression. Parenthesis
2363 grouping is supported and no preliminary backslash is required.
2364 Any space or known delimiter must be escaped using a backslash
2365 ('\'). The pattern applies to a full line at a time. The
2366 "reqpass" keyword strictly matches case while "reqipass" ignores
2367 case.
2368
2369 A request containing any line which matches extended regular expression
2370 <search> will skip next rules, without assigning any deny or allow verdict.
2371 The test applies both to the request line and to request headers. Keep in
2372 mind that URLs in request line are case-sensitive while header names are not.
2373
2374 It is easier, faster and more powerful to use ACLs to write access policies.
2375 Reqdeny, reqallow and reqpass should be avoided in new designs.
2376
2377 Example :
2378 # refuse *.local, then allow www.*, but ignore "www.private.local"
2379 reqipass ^Host:\ www.private\.local
2380 reqideny ^Host:\ .*\.local
2381 reqiallow ^Host:\ www\.
2382
2383 See also: "reqallow", "reqdeny", "acl", "block" and section 2.6 about HTTP
2384 header manipulation
2385
2386
2387reqrep <search> <string>
2388reqirep <search> <string> (ignore case)
2389 Replace a regular expression with a string in an HTTP request line
2390 May be used in sections : defaults | frontend | listen | backend
2391 no | yes | yes | yes
2392 Arguments :
2393 <search> is the regular expression applied to HTTP headers and to the
2394 request line. This is an extended regular expression. Parenthesis
2395 grouping is supported and no preliminary backslash is required.
2396 Any space or known delimiter must be escaped using a backslash
2397 ('\'). The pattern applies to a full line at a time. The "reqrep"
2398 keyword strictly matches case while "reqirep" ignores case.
2399
2400 <string> is the complete line to be added. Any space or known delimiter
2401 must be escaped using a backslash ('\'). References to matched
2402 pattern groups are possible using the common \N form, with N
2403 being a single digit between 0 and 9. Please refer to section
2404 2.6 about HTTP header manipulation for more information.
2405
2406 Any line matching extended regular expression <search> in the request (both
2407 the request line and header lines) will be completely replaced with <string>.
2408 Most common use of this is to rewrite URLs or domain names in "Host" headers.
2409
2410 Header transformations only apply to traffic which passes through HAProxy,
2411 and not to traffic generated by HAProxy, such as health-checks or error
2412 responses. Note that for increased readability, it is suggested to add enough
2413 spaces between the request and the response. Keep in mind that URLs in
2414 request line are case-sensitive while header names are not.
2415
2416 Example :
2417 # replace "/static/" with "/" at the beginning of any request path.
2418 reqrep ^([^\ ]*)\ /static/(.*) \1\ /\2
2419 # replace "www.mydomain.com" with "www" in the host name.
2420 reqirep ^Host:\ www.mydomain.com Host:\ www
2421
2422 See also: "reqadd", "reqdel", "rsprep" and section 2.6 about HTTP header
2423 manipulation
2424
2425
2426reqtarpit <search>
2427reqitarpit <search> (ignore case)
2428 Tarpit an HTTP request containing a line matching a regular expression
2429 May be used in sections : defaults | frontend | listen | backend
2430 no | yes | yes | yes
2431 Arguments :
2432 <search> is the regular expression applied to HTTP headers and to the
2433 request line. This is an extended regular expression. Parenthesis
2434 grouping is supported and no preliminary backslash is required.
2435 Any space or known delimiter must be escaped using a backslash
2436 ('\'). The pattern applies to a full line at a time. The
2437 "reqtarpit" keyword strictly matches case while "reqitarpit"
2438 ignores case.
2439
2440 A request containing any line which matches extended regular expression
2441 <search> will be tarpitted, which means that it will connect to nowhere, will
2442 be kept open for a pre-defined time, then will return an HTTP error 500. The
2443 delay is defined by "timeout tarpit", or "timeout connect" if the former is
2444 not set.
2445
2446 The goal of the tarpit is to slow down robots attacking servers with
2447 identifiable requests. Many robots limit their outgoing number of connections
2448 and stay connected waiting for a reply which can take several minutes to
2449 come. Depending on the environment and attack, it may be particularly
2450 efficient at reducing the load on the network and firewalls.
2451
2452 Example :
2453 # ignore user-agents reporting any flavour of "Mozilla" or "MSIE", but
2454 # block all others.
2455 reqipass ^User-Agent:\.*(Mozilla|MSIE)
2456 reqitarpit ^User-Agent:
2457
2458 See also: "reqallow", "reqdeny", "reqpass", and section 2.6 about HTTP header
2459 manipulation
2460
2461
2462rspadd <string>
2463 Add a header at the end of the HTTP response
2464 May be used in sections : defaults | frontend | listen | backend
2465 no | yes | yes | yes
2466 Arguments :
2467 <string> is the complete line to be added. Any space or known delimiter
2468 must be escaped using a backslash ('\'). Please refer to section
2469 2.6 about HTTP header manipulation for more information.
2470
2471 A new line consisting in <string> followed by a line feed will be added after
2472 the last header of an HTTP response.
2473
2474 Header transformations only apply to traffic which passes through HAProxy,
2475 and not to traffic generated by HAProxy, such as health-checks or error
2476 responses.
2477
2478 See also: "reqadd" and section 2.6 about HTTP header manipulation
2479
2480
2481rspdel <search>
2482rspidel <search> (ignore case)
2483 Delete all headers matching a regular expression in an HTTP response
2484 May be used in sections : defaults | frontend | listen | backend
2485 no | yes | yes | yes
2486 Arguments :
2487 <search> is the regular expression applied to HTTP headers and to the
2488 response line. This is an extended regular expression, so
2489 parenthesis grouping is supported and no preliminary backslash
2490 is required. Any space or known delimiter must be escaped using
2491 a backslash ('\'). The pattern applies to a full line at a time.
2492 The "rspdel" keyword strictly matches case while "rspidel"
2493 ignores case.
2494
2495 Any header line matching extended regular expression <search> in the response
2496 will be completely deleted. Most common use of this is to remove unwanted
2497 and/or sensible headers or cookies from a response before passing it to the
2498 client.
2499
2500 Header transformations only apply to traffic which passes through HAProxy,
2501 and not to traffic generated by HAProxy, such as health-checks or error
2502 responses. Keep in mind that header names are not case-sensitive.
2503
2504 Example :
2505 # remove the Server header from responses
2506 reqidel ^Server:.*
2507
2508 See also: "rspadd", "rsprep", "reqdel" and section 2.6 about HTTP header
2509 manipulation
2510
2511
2512rspdeny <search>
2513rspideny <search> (ignore case)
2514 Block an HTTP response if a line matches a regular expression
2515 May be used in sections : defaults | frontend | listen | backend
2516 no | yes | yes | yes
2517 Arguments :
2518 <search> is the regular expression applied to HTTP headers and to the
2519 response line. This is an extended regular expression, so
2520 parenthesis grouping is supported and no preliminary backslash
2521 is required. Any space or known delimiter must be escaped using
2522 a backslash ('\'). The pattern applies to a full line at a time.
2523 The "rspdeny" keyword strictly matches case while "rspideny"
2524 ignores case.
2525
2526 A response containing any line which matches extended regular expression
2527 <search> will mark the request as denied. The test applies both to the
2528 response line and to response headers. Keep in mind that header names are not
2529 case-sensitive.
2530
2531 Main use of this keyword is to prevent sensitive information leak and to
2532 block the response before it reaches the client. If a response is denied,
2533 it will be replaced with an HTTP 502 error so that the client never gets
2534 the sensitive data.
2535
2536 It is easier, faster and more powerful to use ACLs to write access policies.
2537 Rspdeny should be avoided in new designs.
2538
2539 Example :
2540 # Ensure that no content type matching ms-word will leak
2541 rspideny ^Content-type:\.*/ms-word
2542
2543 See also: "reqdeny", "acl", "block" and section 2.6 about HTTP header
2544 manipulation
2545
2546
2547rsprep <search> <string>
2548rspirep <search> <string> (ignore case)
2549 Replace a regular expression with a string in an HTTP response line
2550 May be used in sections : defaults | frontend | listen | backend
2551 no | yes | yes | yes
2552 Arguments :
2553 <search> is the regular expression applied to HTTP headers and to the
2554 response line. This is an extended regular expression, so
2555 parenthesis grouping is supported and no preliminary backslash
2556 is required. Any space or known delimiter must be escaped using
2557 a backslash ('\'). The pattern applies to a full line at a time.
2558 The "rsprep" keyword strictly matches case while "rspirep"
2559 ignores case.
2560
2561 <string> is the complete line to be added. Any space or known delimiter
2562 must be escaped using a backslash ('\'). References to matched
2563 pattern groups are possible using the common \N form, with N
2564 being a single digit between 0 and 9. Please refer to section
2565 2.6 about HTTP header manipulation for more information.
2566
2567 Any line matching extended regular expression <search> in the response (both
2568 the response line and header lines) will be completely replaced with
2569 <string>. Most common use of this is to rewrite Location headers.
2570
2571 Header transformations only apply to traffic which passes through HAProxy,
2572 and not to traffic generated by HAProxy, such as health-checks or error
2573 responses. Note that for increased readability, it is suggested to add enough
2574 spaces between the request and the response. Keep in mind that header names
2575 are not case-sensitive.
2576
2577 Example :
2578 # replace "Location: 127.0.0.1:8080" with "Location: www.mydomain.com"
2579 rspirep ^Location:\ 127.0.0.1:8080 Location:\ www.mydomain.com
2580
2581 See also: "rspadd", "rspdel", "reqrep" and section 2.6 about HTTP header
2582 manipulation
2583
2584
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002585server <name> <address>[:port] [param*]
2586 Declare a server in a backend
2587 May be used in sections : defaults | frontend | listen | backend
2588 no | no | yes | yes
2589 Arguments :
2590 <name> is the internal name assigned to this server. This name will
2591 appear in logs and alerts.
2592
2593 <address> is the IPv4 address of the server. Alternatively, a resolvable
2594 hostname is supported, but this name will be resolved during
2595 start-up.
2596
2597 <ports> is an optional port specification. If set, all connections will
2598 be sent to this port. If unset, the same port the client
2599 connected to will be used. The port may also be prefixed by a "+"
2600 or a "-". In this case, the server's port will be determined by
2601 adding this value to the client's port.
2602
2603 <param*> is a list of parameters for this server. The "server" keywords
2604 accepts an important number of options and has a complete section
2605 dedicated to it. Please refer to section 2.4 for more details.
2606
2607 Examples :
2608 server first 10.1.1.1:1080 cookie first check inter 1000
2609 server second 10.1.1.2:1080 cookie second check inter 1000
2610
2611 See also : section 2.4 about server options
2612
2613
2614source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
2615 Set the source address for outgoing connections
2616 May be used in sections : defaults | frontend | listen | backend
2617 yes | no | yes | yes
2618 Arguments :
2619 <addr> is the IPv4 address HAProxy will bind to before connecting to a
2620 server. This address is also used as a source for health checks.
2621 The default value of 0.0.0.0 means that the system will select
2622 the most appropriate address to reach its destination.
2623
2624 <port> is an optional port. It is normally not needed but may be useful
2625 in some very specific contexts. The default value of zero means
2626 the system will select a free port.
2627
2628 <addr2> is the IP address to present to the server when connections are
2629 forwarded in full transparent proxy mode. This is currently only
2630 supported on some patched Linux kernels. When this address is
2631 specified, clients connecting to the server will be presented
2632 with this address, while health checks will still use the address
2633 <addr>.
2634
2635 <port2> is the optional port to present to the server when connections
2636 are forwarded in full transparent proxy mode (see <addr2> above).
2637 The default value of zero means the system will select a free
2638 port.
2639
2640 The "source" keyword is useful in complex environments where a specific
2641 address only is allowed to connect to the servers. It may be needed when a
2642 private address must be used through a public gateway for instance, and it is
2643 known that the system cannot determine the adequate source address by itself.
2644
2645 An extension which is available on certain patched Linux kernels may be used
2646 through the "usesrc" optional keyword. It makes it possible to connect to the
2647 servers with an IP address which does not belong to the system itself. This
2648 is called "full transparent proxy mode". For this to work, the destination
2649 servers have to route their traffic back to this address through the machine
2650 running HAProxy, and IP forwarding must generally be enabled on this machine.
2651
2652 In this "full transparent proxy" mode, it is possible to force a specific IP
2653 address to be presented to the servers. This is not much used in fact. A more
2654 common use is to tell HAProxy to present the client's IP address. For this,
2655 there are two methods :
2656
2657 - present the client's IP and port addresses. This is the most transparent
2658 mode, but it can cause problems when IP connection tracking is enabled on
2659 the machine, because a same connection may be seen twice with different
2660 states. However, this solution presents the huge advantage of not
2661 limiting the system to the 64k outgoing address+port couples, because all
2662 of the client ranges may be used.
2663
2664 - present only the client's IP address and select a spare port. This
2665 solution is still quite elegant but slightly less transparent (downstream
2666 firewalls logs will not match upstream's). It also presents the downside
2667 of limiting the number of concurrent connections to the usual 64k ports.
2668 However, since the upstream and downstream ports are different, local IP
2669 connection tracking on the machine will not be upset by the reuse of the
2670 same session.
2671
2672 Note that depending on the transparent proxy technology used, it may be
2673 required to force the source address. In fact, cttproxy version 2 requires an
2674 IP address in <addr> above, and does not support setting of "0.0.0.0" as the
2675 IP address because it creates NAT entries which much match the exact outgoing
2676 address. Tproxy version 4 and some other kernel patches which work in pure
2677 forwarding mode generally will not have this limitation.
2678
2679 This option sets the default source for all servers in the backend. It may
2680 also be specified in a "defaults" section. Finer source address specification
2681 is possible at the server level using the "source" server option. Refer to
2682 section 2.4 for more information.
2683
2684 Examples :
2685 backend private
2686 # Connect to the servers using our 192.168.1.200 source address
2687 source 192.168.1.200
2688
2689 backend transparent_ssl1
2690 # Connect to the SSL farm from the client's source address
2691 source 192.168.1.200 usesrc clientip
2692
2693 backend transparent_ssl2
2694 # Connect to the SSL farm from the client's source address and port
2695 # not recommended if IP conntrack is present on the local machine.
2696 source 192.168.1.200 usesrc client
2697
2698 backend transparent_ssl3
2699 # Connect to the SSL farm from the client's source address. It
2700 # is more conntrack-friendly.
2701 source 192.168.1.200 usesrc clientip
2702
2703 backend transparent_smtp
2704 # Connect to the SMTP farm from the client's source address/port
2705 # with Tproxy version 4.
2706 source 0.0.0.0 usesrc clientip
2707
2708 See also : the "source" server option in section 2.4, the Tproxy patches for
2709 the Linux kernel on www.balabit.com, the "bind" keyword.
2710
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002711
Willy Tarreau844e3c52008-01-11 16:28:18 +01002712srvtimeout <timeout> (deprecated)
2713 Set the maximum inactivity time on the server side.
2714 May be used in sections : defaults | frontend | listen | backend
2715 yes | no | yes | yes
2716 Arguments :
2717 <timeout> is the timeout value specified in milliseconds by default, but
2718 can be in any other unit if the number is suffixed by the unit,
2719 as explained at the top of this document.
2720
2721 The inactivity timeout applies when the server is expected to acknowledge or
2722 send data. In HTTP mode, this timeout is particularly important to consider
2723 during the first phase of the server's response, when it has to send the
2724 headers, as it directly represents the server's processing time for the
2725 request. To find out what value to put there, it's often good to start with
2726 what would be considered as unacceptable response times, then check the logs
2727 to observe the response time distribution, and adjust the value accordingly.
2728
2729 The value is specified in milliseconds by default, but can be in any other
2730 unit if the number is suffixed by the unit, as specified at the top of this
2731 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
2732 recommended that the client timeout remains equal to the server timeout in
2733 order to avoid complex situations to debug. Whatever the expected server
2734 response times, it is a good practise to cover at least one or several TCP
2735 packet losses by specifying timeouts that are slightly above multiples of 3
2736 seconds (eg: 4 or 5 seconds minimum).
2737
2738 This parameter is specific to backends, but can be specified once for all in
2739 "defaults" sections. This is in fact one of the easiest solutions not to
2740 forget about it. An unspecified timeout results in an infinite timeout, which
2741 is not recommended. Such a usage is accepted and works but reports a warning
2742 during startup because it may results in accumulation of expired sessions in
2743 the system if the system's timeouts are not configured either.
2744
2745 This parameter is provided for compatibility but is currently deprecated.
2746 Please use "timeout server" instead.
2747
2748 See also : "timeout server", "timeout client" and "clitimeout".
2749
2750
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002751stats auth <user>:<passwd>
2752 Enable statistics with authentication and grant access to an account
2753 May be used in sections : defaults | frontend | listen | backend
2754 yes | no | yes | yes
2755 Arguments :
2756 <user> is a user name to grant access to
2757
2758 <passwd> is the cleartext password associated to this user
2759
2760 This statement enables statistics with default settings, and restricts access
2761 to declared users only. It may be repeated as many times as necessary to
2762 allow as many users as desired. When a user tries to access the statistics
2763 without a valid account, a "401 Forbidden" response will be returned so that
2764 the browser asks the user to provide a valid user and password. The real
2765 which will be returned to the browser is configurable using "stats realm".
2766
2767 Since the authentication method is HTTP Basic Authentication, the passwords
2768 circulate in cleartext on the network. Thus, it was decided that the
2769 configuration file would also use cleartext passwords to remind the users
2770 that those ones should not be sensible and not shared with any other account.
2771
2772 It is also possible to reduce the scope of the proxies which appear in the
2773 report using "stats scope".
2774
2775 Though this statement alone is enough to enable statistics reporting, it is
2776 recommended to set all other settings in order to avoid relying on default
2777 unobvious parameters.
2778
2779 Example :
2780 # public access (limited to this backend only)
2781 backend public_www
2782 server srv1 192.168.0.1:80
2783 stats enable
2784 stats hide-version
2785 stats scope .
2786 stats uri /admin?stats
2787 stats realm Haproxy\ Statistics
2788 stats auth admin1:AdMiN123
2789 stats auth admin2:AdMiN321
2790
2791 # internal monitoring access (unlimited)
2792 backend private_monitoring
2793 stats enable
2794 stats uri /admin?stats
2795 stats refresh 5s
2796
2797 See also : "stats enable", "stats realm", "stats scope", "stats uri"
2798
2799
2800stats enable
2801 Enable statistics reporting with default settings
2802 May be used in sections : defaults | frontend | listen | backend
2803 yes | no | yes | yes
2804 Arguments : none
2805
2806 This statement enables statistics reporting with default settings defined
2807 at build time. Unless stated otherwise, these settings are used :
2808 - stats uri : /haproxy?stats
2809 - stats realm : "HAProxy Statistics"
2810 - stats auth : no authentication
2811 - stats scope : no restriction
2812
2813 Though this statement alone is enough to enable statistics reporting, it is
2814 recommended to set all other settings in order to avoid relying on default
2815 unobvious parameters.
2816
2817 Example :
2818 # public access (limited to this backend only)
2819 backend public_www
2820 server srv1 192.168.0.1:80
2821 stats enable
2822 stats hide-version
2823 stats scope .
2824 stats uri /admin?stats
2825 stats realm Haproxy\ Statistics
2826 stats auth admin1:AdMiN123
2827 stats auth admin2:AdMiN321
2828
2829 # internal monitoring access (unlimited)
2830 backend private_monitoring
2831 stats enable
2832 stats uri /admin?stats
2833 stats refresh 5s
2834
2835 See also : "stats auth", "stats realm", "stats uri"
2836
2837
2838stats realm <realm>
2839 Enable statistics and set authentication realm
2840 May be used in sections : defaults | frontend | listen | backend
2841 yes | no | yes | yes
2842 Arguments :
2843 <realm> is the name of the HTTP Basic Authentication realm reported to
2844 the browser. The browser uses it to display it in the pop-up
2845 inviting the user to enter a valid username and password.
2846
2847 The realm is read as a single word, so any spaces in it should be escaped
2848 using a backslash ('\').
2849
2850 This statement is useful only in conjunction with "stats auth" since it is
2851 only related to authentication.
2852
2853 Though this statement alone is enough to enable statistics reporting, it is
2854 recommended to set all other settings in order to avoid relying on default
2855 unobvious parameters.
2856
2857 Example :
2858 # public access (limited to this backend only)
2859 backend public_www
2860 server srv1 192.168.0.1:80
2861 stats enable
2862 stats hide-version
2863 stats scope .
2864 stats uri /admin?stats
2865 stats realm Haproxy\ Statistics
2866 stats auth admin1:AdMiN123
2867 stats auth admin2:AdMiN321
2868
2869 # internal monitoring access (unlimited)
2870 backend private_monitoring
2871 stats enable
2872 stats uri /admin?stats
2873 stats refresh 5s
2874
2875 See also : "stats auth", "stats enable", "stats uri"
2876
2877
2878stats refresh <delay>
2879 Enable statistics with automatic refresh
2880 May be used in sections : defaults | frontend | listen | backend
2881 yes | no | yes | yes
2882 Arguments :
2883 <delay> is the suggested refresh delay, specified in seconds, which will
2884 be returned to the browser consulting the report page. While the
2885 browser is free to apply any delay, it will generally respect it
2886 and refresh the page this every seconds. The refresh interval may
2887 be specified in any other non-default time unit, by suffixing the
2888 unit after the value, as explained at the top of this document.
2889
2890 This statement is useful on monitoring displays with a permanent page
2891 reporting the load balancer's activity. When set, the HTML report page will
2892 include a link "refresh"/"stop refresh" so that the user can select whether
2893 he wants automatic refresh of the page or not.
2894
2895 Though this statement alone is enough to enable statistics reporting, it is
2896 recommended to set all other settings in order to avoid relying on default
2897 unobvious parameters.
2898
2899 Example :
2900 # public access (limited to this backend only)
2901 backend public_www
2902 server srv1 192.168.0.1:80
2903 stats enable
2904 stats hide-version
2905 stats scope .
2906 stats uri /admin?stats
2907 stats realm Haproxy\ Statistics
2908 stats auth admin1:AdMiN123
2909 stats auth admin2:AdMiN321
2910
2911 # internal monitoring access (unlimited)
2912 backend private_monitoring
2913 stats enable
2914 stats uri /admin?stats
2915 stats refresh 5s
2916
2917 See also : "stats auth", "stats enable", "stats realm", "stats uri"
2918
2919
2920stats scope { <name> | "." }
2921 Enable statistics and limit access scope
2922 May be used in sections : defaults | frontend | listen | backend
2923 yes | no | yes | yes
2924 Arguments :
2925 <name> is the name of a listen, frontend or backend section to be
2926 reported. The special name "." (a single dot) designates the
2927 section in which the statement appears.
2928
2929 When this statement is specified, only the sections enumerated with this
2930 statement will appear in the report. All other ones will be hidden. This
2931 statement may appear as many times as needed if multiple sections need to be
2932 reported. Please note that the name checking is performed as simple string
2933 comparisons, and that it is never checked that a give section name really
2934 exists.
2935
2936 Though this statement alone is enough to enable statistics reporting, it is
2937 recommended to set all other settings in order to avoid relying on default
2938 unobvious parameters.
2939
2940 Example :
2941 # public access (limited to this backend only)
2942 backend public_www
2943 server srv1 192.168.0.1:80
2944 stats enable
2945 stats hide-version
2946 stats scope .
2947 stats uri /admin?stats
2948 stats realm Haproxy\ Statistics
2949 stats auth admin1:AdMiN123
2950 stats auth admin2:AdMiN321
2951
2952 # internal monitoring access (unlimited)
2953 backend private_monitoring
2954 stats enable
2955 stats uri /admin?stats
2956 stats refresh 5s
2957
2958 See also : "stats auth", "stats enable", "stats realm", "stats uri"
2959
2960
2961stats uri <prefix>
2962 Enable statistics and define the URI prefix to access them
2963 May be used in sections : defaults | frontend | listen | backend
2964 yes | no | yes | yes
2965 Arguments :
2966 <prefix> is the prefix of any URI which will be redirected to stats. This
2967 prefix may contain a question mark ('?') to indicate part of a
2968 query string.
2969
2970 The statistics URI is intercepted on the relayed traffic, so it appears as a
2971 page within the normal application. It is strongly advised to ensure that the
2972 selected URI will never appear in the application, otherwise it will never be
2973 possible to reach it in the application.
2974
2975 The default URI compiled in haproxy is "/haproxy?stats", but this may be
2976 changed at build time, so it's better to always explictly specify it here.
2977 It is generally a good idea to include a question mark in the URI so that
2978 intermediate proxies refrain from caching the results. Also, since any string
2979 beginning with the prefix will be accepted as a stats request, the question
2980 mark helps ensuring that no valid URI will begin with the same words.
2981
2982 It is sometimes very convenient to use "/" as the URI prefix, and put that
2983 statement in a "listen" instance of its own. That makes it easy to dedicate
2984 an address or a port to statistics only.
2985
2986 Though this statement alone is enough to enable statistics reporting, it is
2987 recommended to set all other settings in order to avoid relying on default
2988 unobvious parameters.
2989
2990 Example :
2991 # public access (limited to this backend only)
2992 backend public_www
2993 server srv1 192.168.0.1:80
2994 stats enable
2995 stats hide-version
2996 stats scope .
2997 stats uri /admin?stats
2998 stats realm Haproxy\ Statistics
2999 stats auth admin1:AdMiN123
3000 stats auth admin2:AdMiN321
3001
3002 # internal monitoring access (unlimited)
3003 backend private_monitoring
3004 stats enable
3005 stats uri /admin?stats
3006 stats refresh 5s
3007
3008 See also : "stats auth", "stats enable", "stats realm"
3009
3010
3011stats hide-version
3012 Enable statistics and hide HAProxy version reporting
3013 May be used in sections : defaults | frontend | listen | backend
3014 yes | no | yes | yes
3015 Arguments : none
3016
3017 By default, the stats page reports some useful status information along with
3018 the statistics. Among them is HAProxy's version. However, it is generally
3019 considered dangerous to report precise version to anyone, as it can help them
3020 target known weaknesses with specific attacks. The "stats hide-version"
3021 statement removes the version from the statistics report. This is recommended
3022 for public sites or any site with a weak login/password.
3023
3024 Though this statement alone is enough to enable statistics reporting, it is
3025 recommended to set all other settings in order to avoid relying on default
3026 unobvious parameters.
3027
3028 Example :
3029 # public access (limited to this backend only)
3030 backend public_www
3031 server srv1 192.168.0.1:80
3032 stats enable
3033 stats hide-version
3034 stats scope .
3035 stats uri /admin?stats
3036 stats realm Haproxy\ Statistics
3037 stats auth admin1:AdMiN123
3038 stats auth admin2:AdMiN321
3039
3040 # internal monitoring access (unlimited)
3041 backend private_monitoring
3042 stats enable
3043 stats uri /admin?stats
3044 stats refresh 5s
3045
3046 See also : "stats auth", "stats enable", "stats realm", "stats uri"
3047
3048
Willy Tarreau0ba27502007-12-24 16:55:16 +01003049timeout client <timeout>
3050timeout clitimeout <timeout> (deprecated)
3051 Set the maximum inactivity time on the client side.
3052 May be used in sections : defaults | frontend | listen | backend
3053 yes | yes | yes | no
3054 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003055 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01003056 can be in any other unit if the number is suffixed by the unit,
3057 as explained at the top of this document.
3058
3059 The inactivity timeout applies when the client is expected to acknowledge or
3060 send data. In HTTP mode, this timeout is particularly important to consider
3061 during the first phase, when the client sends the request, and during the
3062 response while it is reading data sent by the server. The value is specified
3063 in milliseconds by default, but can be in any other unit if the number is
3064 suffixed by the unit, as specified at the top of this document. In TCP mode
3065 (and to a lesser extent, in HTTP mode), it is highly recommended that the
3066 client timeout remains equal to the server timeout in order to avoid complex
3067 situations to debug. It is a good practise to cover one or several TCP packet
3068 losses by specifying timeouts that are slightly above multiples of 3 seconds
3069 (eg: 4 or 5 seconds).
3070
3071 This parameter is specific to frontends, but can be specified once for all in
3072 "defaults" sections. This is in fact one of the easiest solutions not to
3073 forget about it. An unspecified timeout results in an infinite timeout, which
3074 is not recommended. Such a usage is accepted and works but reports a warning
3075 during startup because it may results in accumulation of expired sessions in
3076 the system if the system's timeouts are not configured either.
3077
3078 This parameter replaces the old, deprecated "clitimeout". It is recommended
3079 to use it to write new configurations. The form "timeout clitimeout" is
3080 provided only by backwards compatibility but its use is strongly discouraged.
3081
3082 See also : "clitimeout", "timeout server".
3083
3084
3085timeout connect <timeout>
3086timeout contimeout <timeout> (deprecated)
3087 Set the maximum time to wait for a connection attempt to a server to succeed.
3088 May be used in sections : defaults | frontend | listen | backend
3089 yes | no | yes | yes
3090 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003091 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01003092 can be in any other unit if the number is suffixed by the unit,
3093 as explained at the top of this document.
3094
3095 If the server is located on the same LAN as haproxy, the connection should be
3096 immediate (less than a few milliseconds). Anyway, it is a good practise to
3097 cover one or several TCP packet losses by specifying timeouts that are
3098 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
3099 connect timeout also presets the queue timeout to the same value if this one
3100 has not been specified.
3101
3102 This parameter is specific to backends, but can be specified once for all in
3103 "defaults" sections. This is in fact one of the easiest solutions not to
3104 forget about it. An unspecified timeout results in an infinite timeout, which
3105 is not recommended. Such a usage is accepted and works but reports a warning
3106 during startup because it may results in accumulation of failed sessions in
3107 the system if the system's timeouts are not configured either.
3108
3109 This parameter replaces the old, deprecated "contimeout". It is recommended
3110 to use it to write new configurations. The form "timeout contimeout" is
3111 provided only by backwards compatibility but its use is strongly discouraged.
3112
3113 See also : "timeout queue", "timeout server", "contimeout".
3114
3115
Willy Tarreau036fae02008-01-06 13:24:40 +01003116timeout http-request <timeout>
3117 Set the maximum allowed time to wait for a complete HTTP request
3118 May be used in sections : defaults | frontend | listen | backend
3119 yes | yes | yes | no
3120 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01003121 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau036fae02008-01-06 13:24:40 +01003122 can be in any other unit if the number is suffixed by the unit,
3123 as explained at the top of this document.
3124
3125 In order to offer DoS protection, it may be required to lower the maximum
3126 accepted time to receive a complete HTTP request without affecting the client
3127 timeout. This helps protecting against established connections on which
3128 nothing is sent. The client timeout cannot offer a good protection against
3129 this abuse because it is an inactivity timeout, which means that if the
3130 attacker sends one character every now and then, the timeout will not
3131 trigger. With the HTTP request timeout, no matter what speed the client
3132 types, the request will be aborted if it does not complete in time.
3133
3134 Note that this timeout only applies to the header part of the request, and
3135 not to any data. As soon as the empty line is received, this timeout is not
3136 used anymore.
3137
3138 Generally it is enough to set it to a few seconds, as most clients send the
3139 full request immediately upon connection. Add 3 or more seconds to cover TCP
3140 retransmits but that's all. Setting it to very low values (eg: 50 ms) will
3141 generally work on local networks as long as there are no packet losses. This
3142 will prevent people from sending bare HTTP requests using telnet.
3143
3144 If this parameter is not set, the client timeout still applies between each
3145 chunk of the incoming request.
3146
3147 See also : "timeout client".
3148
Willy Tarreau844e3c52008-01-11 16:28:18 +01003149
3150timeout queue <timeout>
3151 Set the maximum time to wait in the queue for a connection slot to be free
3152 May be used in sections : defaults | frontend | listen | backend
3153 yes | no | yes | yes
3154 Arguments :
3155 <timeout> is the timeout value specified in milliseconds by default, but
3156 can be in any other unit if the number is suffixed by the unit,
3157 as explained at the top of this document.
3158
3159 When a server's maxconn is reached, connections are left pending in a queue
3160 which may be server-specific or global to the backend. In order not to wait
3161 indefinitely, a timeout is applied to requests pending in the queue. If the
3162 timeout is reached, it is considered that the request will almost never be
3163 served, so it is dropped and a 503 error is returned to the client.
3164
3165 The "timeout queue" statement allows to fix the maximum time for a request to
3166 be left pending in a queue. If unspecified, the same value as the backend's
3167 connection timeout ("timeout connect") is used, for backwards compatibility
3168 with older versions with no "timeout queue" parameter.
3169
3170 See also : "timeout connect", "contimeout".
3171
3172
3173timeout server <timeout>
3174timeout srvtimeout <timeout> (deprecated)
3175 Set the maximum inactivity time on the server side.
3176 May be used in sections : defaults | frontend | listen | backend
3177 yes | no | yes | yes
3178 Arguments :
3179 <timeout> is the timeout value specified in milliseconds by default, but
3180 can be in any other unit if the number is suffixed by the unit,
3181 as explained at the top of this document.
3182
3183 The inactivity timeout applies when the server is expected to acknowledge or
3184 send data. In HTTP mode, this timeout is particularly important to consider
3185 during the first phase of the server's response, when it has to send the
3186 headers, as it directly represents the server's processing time for the
3187 request. To find out what value to put there, it's often good to start with
3188 what would be considered as unacceptable response times, then check the logs
3189 to observe the response time distribution, and adjust the value accordingly.
3190
3191 The value is specified in milliseconds by default, but can be in any other
3192 unit if the number is suffixed by the unit, as specified at the top of this
3193 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
3194 recommended that the client timeout remains equal to the server timeout in
3195 order to avoid complex situations to debug. Whatever the expected server
3196 response times, it is a good practise to cover at least one or several TCP
3197 packet losses by specifying timeouts that are slightly above multiples of 3
3198 seconds (eg: 4 or 5 seconds minimum).
3199
3200 This parameter is specific to backends, but can be specified once for all in
3201 "defaults" sections. This is in fact one of the easiest solutions not to
3202 forget about it. An unspecified timeout results in an infinite timeout, which
3203 is not recommended. Such a usage is accepted and works but reports a warning
3204 during startup because it may results in accumulation of expired sessions in
3205 the system if the system's timeouts are not configured either.
3206
3207 This parameter replaces the old, deprecated "srvtimeout". It is recommended
3208 to use it to write new configurations. The form "timeout srvtimeout" is
3209 provided only by backwards compatibility but its use is strongly discouraged.
3210
3211 See also : "srvtimeout", "timeout client".
3212
3213
3214timeout tarpit <timeout>
3215 Set the duration for which tapitted connections will be maintained
3216 May be used in sections : defaults | frontend | listen | backend
3217 yes | yes | yes | yes
3218 Arguments :
3219 <timeout> is the tarpit duration specified in milliseconds by default, but
3220 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 When a connection is tarpitted using "reqtarpit", it is maintained open with
3224 no activity for a certain amount of time, then closed. "timeout tarpit"
3225 defines how long it will be maintained open.
3226
3227 The value is specified in milliseconds by default, but can be in any other
3228 unit if the number is suffixed by the unit, as specified at the top of this
3229 document. If unspecified, the same value as the backend's connection timeout
3230 ("timeout connect") is used, for backwards compatibility with older versions
3231 with no "timeout tapit" parameter.
3232
3233 See also : "timeout connect", "contimeout".
3234
3235
3236transparent (deprecated)
3237 Enable client-side transparent proxying
3238 May be used in sections : defaults | frontend | listen | backend
3239 yes | yes | yes | no
3240 Arguments : none
3241
3242 This keyword was introduced in order to provide layer 7 persistence to layer
3243 3 load balancers. The idea is to use the OS's ability to redirect an incoming
3244 connection for a remote address to a local process (here HAProxy), and let
3245 this process know what address was initially requested. When this option is
3246 used, sessions without cookies will be forwarded to the original destination
3247 IP address of the incoming request (which should match that of another
3248 equipment), while requests with cookies will still be forwarded to the
3249 appropriate server.
3250
3251 The "transparent" keyword is deprecated, use "option transparent" instead.
3252
3253 Note that contrary to a common belief, this option does NOT make HAProxy
3254 present the client's IP to the server when establishing the connection.
3255
3256 Use of this option is really discouraged, and since no really valid use of it
3257 has been reported for years, it will probably be removed in future versions.
3258
3259 See also: "option transparent"
3260
3261
3262use_backend <backend> if <condition>
3263use_backend <backend> unless <condition>
3264 Switch to a specific backend if/unless a Layer 7 condition is matched.
3265 May be used in sections : defaults | frontend | listen | backend
3266 no | yes | yes | no
3267 Arguments :
3268 <backend> is the name of a valid backend or "listen" section.
3269
3270 <condition> is a condition composed of ACLs, as described in section 2.3.
3271
3272 When doing content-switching, connections arrive on a frontend and are then
3273 dispatched to various backends depending on a number of conditions. The
3274 relation between the conditions and the backends is described with the
3275 "use_backend" keyword. This is supported only in HTTP mode.
3276
3277 There may be as many "use_backend" rules as desired. All of these rules are
3278 evaluated in their declaration order, and the first one which matches will
3279 assign the backend.
3280
3281 In the first form, the backend will be used if the condition is met. In the
3282 second form, the backend will be used if the condition is not met. If no
3283 condition is valid, the backend defined with "default_backend" will be used.
3284 If no default backend is defined, either the servers in the same section are
3285 used (in case of a "listen" section) or, in case of a frontend, no server is
3286 used and a 503 service unavailable response is returned.
3287
3288 See also: "default_backend" and section 2.3 about ACLs.
3289
Willy Tarreau036fae02008-01-06 13:24:40 +01003290
Willy Tarreau0ba27502007-12-24 16:55:16 +010032912.3) Using ACLs
Willy Tarreau6a06a402007-07-15 20:15:28 +02003292---------------
3293
3294The use of Access Control Lists (ACL) provides a flexible solution to perform
Willy Tarreau0ba27502007-12-24 16:55:16 +01003295content switching and generally to take decisions based on content extracted
3296from the request, the response or any environmental status. The principle is
3297simple :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003298
3299 - define test criteria with sets of values
3300 - perform actions only if a set of tests is valid
3301
3302The actions generally consist in blocking the request, or selecting a backend.
3303
3304In order to define a test, the "acl" keyword is used. The syntax is :
3305
3306 acl <aclname> <criterion> [flags] [operator] <value> ...
3307
Willy Tarreau0ba27502007-12-24 16:55:16 +01003308This creates a new ACL <aclname> or completes an existing one with new tests.
3309Those tests apply to the portion of request/response specified in <criterion>
Willy Tarreau6a06a402007-07-15 20:15:28 +02003310and may be adjusted with optional flags [flags]. Some criteria also support
3311an operator which may be specified before the set of values. The values are
3312of the type supported by the criterion, and are separated by spaces.
3313
Willy Tarreau0ba27502007-12-24 16:55:16 +01003314ACL names must be formed from upper and lower case letters, digits, '-' (dash),
3315'_' (underscore) , '.' (dot) and ':' (colon). ACL names are case-sensitive,
3316which means that "my_acl" and "My_Acl" are two different ACLs.
3317
3318There is no enforced limit to the number of ACLs. The unused ones do not affect
Willy Tarreau6a06a402007-07-15 20:15:28 +02003319performance, they just consume a small amount of memory.
3320
Willy Tarreau0ba27502007-12-24 16:55:16 +01003321The following ACL flags are currently supported :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003322
3323 -i : ignore case during matching.
3324 -- : force end of flags. Useful when a string looks like one of the flags.
3325
3326Supported types of values are :
Willy Tarreau0ba27502007-12-24 16:55:16 +01003327
Willy Tarreau6a06a402007-07-15 20:15:28 +02003328 - integers or integer ranges
3329 - strings
3330 - regular expressions
3331 - IP addresses and networks
3332
3333
Willy Tarreau0ba27502007-12-24 16:55:16 +010033342.3.1) Matching integers
Willy Tarreau6a06a402007-07-15 20:15:28 +02003335------------------------
3336
3337Matching integers is special in that ranges and operators are permitted. Note
3338that integer matching only applies to positive values. A range is a value
3339expressed with a lower and an upper bound separated with a colon, both of which
3340may be omitted.
3341
3342For instance, "1024:65535" is a valid range to represent a range of
3343unprivileged ports, and "1024:" would also work. "0:1023" is a valid
3344representation of privileged ports, and ":1023" would also work.
3345
3346For an easier usage, comparison operators are also supported. Note that using
Willy Tarreau0ba27502007-12-24 16:55:16 +01003347operators with ranges does not make much sense and is strongly discouraged.
3348Similarly, it does not make much sense to perform order comparisons with a set
3349of values.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003350
Willy Tarreau0ba27502007-12-24 16:55:16 +01003351Available operators for integer matching are :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003352
3353 eq : true if the tested value equals at least one value
3354 ge : true if the tested value is greater than or equal to at least one value
3355 gt : true if the tested value is greater than at least one value
3356 le : true if the tested value is less than or equal to at least one value
3357 lt : true if the tested value is less than at least one value
3358
Willy Tarreau0ba27502007-12-24 16:55:16 +01003359For instance, the following ACL matches any negative Content-Length header :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003360
3361 acl negative-length hdr_val(content-length) lt 0
3362
3363
Willy Tarreau0ba27502007-12-24 16:55:16 +010033642.3.2) Matching strings
Willy Tarreau6a06a402007-07-15 20:15:28 +02003365-----------------------
3366
3367String matching applies to verbatim strings as they are passed, with the
3368exception of the backslash ("\") which makes it possible to escape some
3369characters such as the space. If the "-i" flag is passed before the first
3370string, then the matching will be performed ignoring the case. In order
3371to match the string "-i", either set it second, or pass the "--" flag
Willy Tarreau0ba27502007-12-24 16:55:16 +01003372before the first string. Same applies of course to match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02003373
3374
Willy Tarreau0ba27502007-12-24 16:55:16 +010033752.3.3) Matching regular expressions (regexes)
Willy Tarreau6a06a402007-07-15 20:15:28 +02003376---------------------------------------------
3377
3378Just like with string matching, regex matching applies to verbatim strings as
3379they are passed, with the exception of the backslash ("\") which makes it
3380possible to escape some characters such as the space. If the "-i" flag is
3381passed before the first regex, then the matching will be performed ignoring
3382the case. In order to match the string "-i", either set it second, or pass
Willy Tarreau0ba27502007-12-24 16:55:16 +01003383the "--" flag before the first string. Same principle applies of course to
3384match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02003385
3386
Willy Tarreau0ba27502007-12-24 16:55:16 +010033872.3.4) Matching IPv4 addresses
3388------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02003389
3390IPv4 addresses values can be specified either as plain addresses or with a
3391netmask appended, in which case the IPv4 address matches whenever it is
3392within the network. Plain addresses may also be replaced with a resolvable
3393host name, but this practise is generally discouraged as it makes it more
Willy Tarreau0ba27502007-12-24 16:55:16 +01003394difficult to read and debug configurations. If hostnames are used, you should
3395at least ensure that they are present in /etc/hosts so that the configuration
3396does not depend on any random DNS match at the moment the configuration is
3397parsed.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003398
3399
Willy Tarreau0ba27502007-12-24 16:55:16 +010034002.3.5) Available matching criteria
Willy Tarreau6a06a402007-07-15 20:15:28 +02003401----------------------------------
3402
Willy Tarreau0ba27502007-12-24 16:55:16 +010034032.3.5.1) Matching at Layer 4 and below
3404--------------------------------------
3405
3406A first set of criteria applies to information which does not require any
3407analysis of the request or response contents. Those generally include TCP/IP
3408addresses and ports, as well as internal values independant on the stream.
3409
Willy Tarreau6a06a402007-07-15 20:15:28 +02003410always_false
3411 This one never matches. All values and flags are ignored. It may be used as
3412 a temporary replacement for another one when adjusting configurations.
3413
3414always_true
3415 This one always matches. All values and flags are ignored. It may be used as
3416 a temporary replacement for another one when adjusting configurations.
3417
3418src <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003419 Applies to the client's IPv4 address. It is usually used to limit access to
Willy Tarreau6a06a402007-07-15 20:15:28 +02003420 certain resources such as statistics. Note that it is the TCP-level source
3421 address which is used, and not the address of a client behind a proxy.
3422
3423src_port <integer>
3424 Applies to the client's TCP source port. This has a very limited usage.
3425
3426dst <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003427 Applies to the local IPv4 address the client connected to. It can be used to
Willy Tarreau6a06a402007-07-15 20:15:28 +02003428 switch to a different backend for some alternative addresses.
3429
3430dst_port <integer>
3431 Applies to the local port the client connected to. It can be used to switch
3432 to a different backend for some alternative ports.
3433
3434dst_conn <integer>
3435 Applies to the number of currently established connections on the frontend,
3436 including the one being evaluated. It can be used to either return a sorry
Willy Tarreau0ba27502007-12-24 16:55:16 +01003437 page before hard-blocking, or to use a specific backend to drain new requests
Willy Tarreau6a06a402007-07-15 20:15:28 +02003438 when the farm is considered saturated.
3439
Willy Tarreau0ba27502007-12-24 16:55:16 +01003440nbsrv <integer>
3441nbsrv(backend) <integer>
3442 Returns true when the number of usable servers of either the current backend
3443 or the named backend matches the values or ranges specified. This is used to
3444 switch to an alternate backend when the number of servers is too low to
3445 to handle some load. It is useful to report a failure when combined with
3446 "monitor fail".
3447
3448
34492.3.5.2) Matching at Layer 7
3450----------------------------
3451
3452A second set of criteria applies to information which can be found at the
3453application layer (layer 7). Those require that a full HTTP request has been
3454read, and are only evaluated then. They may require slightly more CPU resources
3455than the layer 4 ones, but not much since the request and response are indexed.
3456
Willy Tarreau6a06a402007-07-15 20:15:28 +02003457method <string>
3458 Applies to the method in the HTTP request, eg: "GET". Some predefined ACL
3459 already check for most common methods.
3460
3461req_ver <string>
3462 Applies to the version string in the HTTP request, eg: "1.0". Some predefined
3463 ACL already check for versions 1.0 and 1.1.
3464
3465path <string>
3466 Returns true when the path part of the request, which starts at the first
3467 slash and ends before the question mark, equals one of the strings. It may be
3468 used to match known files, such as /favicon.ico.
3469
3470path_beg <string>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003471 Returns true when the path begins with one of the strings. This can be used
3472 to send certain directory names to alternative backends.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003473
3474path_end <string>
3475 Returns true when the path ends with one of the strings. This may be used to
3476 control file name extension.
3477
3478path_sub <string>
3479 Returns true when the path contains one of the strings. It can be used to
3480 detect particular patterns in paths, such as "../" for example. See also
3481 "path_dir".
3482
3483path_dir <string>
3484 Returns true when one of the strings is found isolated or delimited with
3485 slashes in the path. This is used to perform filename or directory name
3486 matching without the risk of wrong match due to colliding prefixes. See also
3487 "url_dir" and "path_sub".
3488
3489path_dom <string>
3490 Returns true when one of the strings is found isolated or delimited with dots
3491 in the path. This may be used to perform domain name matching in proxy
3492 requests. See also "path_sub" and "url_dom".
3493
3494path_reg <regex>
3495 Returns true when the path matches one of the regular expressions. It can be
3496 used any time, but it is important to remember that regex matching is slower
3497 than other methods. See also "url_reg" and all "path_" criteria.
3498
3499url <string>
3500 Applies to the whole URL passed in the request. The only real use is to match
3501 "*", for which there already is a predefined ACL.
3502
3503url_beg <string>
3504 Returns true when the URL begins with one of the strings. This can be used to
3505 check whether a URL begins with a slash or with a protocol scheme.
3506
3507url_end <string>
3508 Returns true when the URL ends with one of the strings. It has very limited
3509 use. "path_end" should be used instead for filename matching.
3510
3511url_sub <string>
3512 Returns true when the URL contains one of the strings. It can be used to
3513 detect particular patterns in query strings for example. See also "path_sub".
3514
3515url_dir <string>
3516 Returns true when one of the strings is found isolated or delimited with
3517 slashes in the URL. This is used to perform filename or directory name
3518 matching without the risk of wrong match due to colliding prefixes. See also
3519 "path_dir" and "url_sub".
3520
3521url_dom <string>
3522 Returns true when one of the strings is found isolated or delimited with dots
3523 in the URL. This is used to perform domain name matching without the risk of
3524 wrong match due to colliding prefixes. See also "url_sub".
3525
3526url_reg <regex>
3527 Returns true when the URL matches one of the regular expressions. It can be
3528 used any time, but it is important to remember that regex matching is slower
3529 than other methods. See also "path_reg" and all "url_" criteria.
3530
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01003531url_ip <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003532 Applies to the IP address specified in the absolute URI in an HTTP request.
3533 It can be used to prevent access to certain resources such as local network.
Willy Tarreau198a7442008-01-17 12:05:32 +01003534 It is useful with option "http_proxy".
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01003535
3536url_port <integer>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003537 Applies to the port specified in the absolute URI in an HTTP request. It can
3538 be used to prevent access to certain resources. It is useful with option
Willy Tarreau198a7442008-01-17 12:05:32 +01003539 "http_proxy". Note that if the port is not specified in the request, port 80
Willy Tarreau0ba27502007-12-24 16:55:16 +01003540 is assumed.
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01003541
Willy Tarreau6a06a402007-07-15 20:15:28 +02003542hdr <string>
3543hdr(header) <string>
3544 Note: all the "hdr*" matching criteria either apply to all headers, or to a
3545 particular header whose name is passed between parenthesis and without any
Willy Tarreau0ba27502007-12-24 16:55:16 +01003546 space. The header name is not case-sensitive. The header matching complies
3547 with RFC2616, and treats as separate headers all values delimited by commas.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003548
3549 The "hdr" criteria returns true if any of the headers matching the criteria
Willy Tarreau0ba27502007-12-24 16:55:16 +01003550 match any of the strings. This can be used to check exact for values. For
Willy Tarreau6a06a402007-07-15 20:15:28 +02003551 instance, checking that "connection: close" is set :
3552
3553 hdr(Connection) -i close
3554
3555hdr_beg <string>
3556hdr_beg(header) <string>
3557 Returns true when one of the headers begins with one of the strings. See
3558 "hdr" for more information on header matching.
3559
3560hdr_end <string>
3561hdr_end(header) <string>
3562 Returns true when one of the headers ends with one of the strings. See "hdr"
3563 for more information on header matching.
3564
3565hdr_sub <string>
3566hdr_sub(header) <string>
3567 Returns true when one of the headers contains one of the strings. See "hdr"
3568 for more information on header matching.
3569
3570hdr_dir <string>
3571hdr_dir(header) <string>
3572 Returns true when one of the headers contains one of the strings either
3573 isolated or delimited by slashes. This is used to perform filename or
3574 directory name matching, and may be used with Referer. See "hdr" for more
3575 information on header matching.
3576
3577hdr_dom <string>
3578hdr_dom(header) <string>
3579 Returns true when one of the headers contains one of the strings either
3580 isolated or delimited by dots. This is used to perform domain name matching,
3581 and may be used with the Host header. See "hdr" for more information on
3582 header matching.
3583
3584hdr_reg <regex>
3585hdr_reg(header) <regex>
3586 Returns true when one of the headers matches of the regular expressions. It
3587 can be used at any time, but it is important to remember that regex matching
3588 is slower than other methods. See also other "hdr_" criteria, as well as
3589 "hdr" for more information on header matching.
3590
3591hdr_val <integer>
3592hdr_val(header) <integer>
3593 Returns true when one of the headers starts with a number which matches the
3594 values or ranges specified. This may be used to limit content-length to
3595 acceptable values for example. See "hdr" for more information on header
3596 matching.
3597
3598hdr_cnt <integer>
3599hdr_cnt(header) <integer>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003600 Returns true when the number of occurrence of the specified header matches
3601 the values or ranges specified. It is important to remember that one header
3602 line may count as several headers if it has several values. This is used to
3603 detect presence, absence or abuse of a specific header, as well as to block
3604 request smugling attacks by rejecting requests which contain more than one
3605 of certain headers. See "hdr" for more information on header matching.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003606
3607
Willy Tarreau0ba27502007-12-24 16:55:16 +010036082.3.6) Pre-defined ACLs
Willy Tarreau6a06a402007-07-15 20:15:28 +02003609-----------------------
3610
3611Some predefined ACLs are hard-coded so that they do not have to be declared in
3612every frontend which needs them. They all have their names in upper case in
Willy Tarreau0ba27502007-12-24 16:55:16 +01003613order to avoid confusion. Their equivalence is provided below. Please note that
3614only the first three ones are not layer 7 based.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003615
3616ACL name Equivalent to Usage
3617---------------+-----------------------------+---------------------------------
3618TRUE always_true 1 always match
3619FALSE always_false 0 never match
3620LOCALHOST src 127.0.0.1/8 match connection from local host
3621HTTP_1.0 req_ver 1.0 match HTTP version 1.0
3622HTTP_1.1 req_ver 1.1 match HTTP version 1.1
3623METH_CONNECT method CONNECT match HTTP CONNECT method
3624METH_GET method GET HEAD match HTTP GET or HEAD method
3625METH_HEAD method HEAD match HTTP HEAD method
3626METH_OPTIONS method OPTIONS match HTTP OPTIONS method
3627METH_POST method POST match HTTP POST method
3628METH_TRACE method TRACE match HTTP TRACE method
3629HTTP_URL_ABS url_reg ^[^/:]*:// match absolute URL with scheme
3630HTTP_URL_SLASH url_beg / match URL begining with "/"
3631HTTP_URL_STAR url * match URL equal to "*"
3632HTTP_CONTENT hdr_val(content-length) gt 0 match an existing content-length
3633---------------+-----------------------------+---------------------------------
3634
3635
Willy Tarreau0ba27502007-12-24 16:55:16 +010036362.3.7) Using ACLs to form conditions
Willy Tarreau6a06a402007-07-15 20:15:28 +02003637------------------------------------
3638
3639Some actions are only performed upon a valid condition. A condition is a
3640combination of ACLs with operators. 3 operators are supported :
3641
3642 - AND (implicit)
3643 - OR (explicit with the "or" keyword or the "||" operator)
3644 - Negation with the exclamation mark ("!")
3645
3646A condition is formed as a disjonctive form :
3647
3648 [!]acl1 [!]acl2 ... [!]acln { or [!]acl1 [!]acl2 ... [!]acln } ...
3649
3650Such conditions are generally used after an "if" or "unless" statement,
3651indicating when the condition will trigger the action.
3652
3653For instance, to block HTTP requests to the "*" URL with methods other than
Willy Tarreau0ba27502007-12-24 16:55:16 +01003654"OPTIONS", as well as POST requests without content-length, and GET or HEAD
3655requests with a content-length greater than 0, and finally every request which
3656is not either GET/HEAD/POST/OPTIONS !
Willy Tarreau6a06a402007-07-15 20:15:28 +02003657
3658 acl missing_cl hdr_cnt(Content-length) eq 0
3659 block if HTTP_URL_STAR !METH_OPTIONS || METH_POST missing_cl
3660 block if METH_GET HTTP_CONTENT
3661 block unless METH_GET or METH_POST or METH_OPTIONS
3662
3663To select a different backend for requests to static contents on the "www" site
3664and to every request on the "img", "video", "download" and "ftp" hosts :
3665
3666 acl url_static path_beg /static /images /img /css
3667 acl url_static path_end .gif .png .jpg .css .js
3668 acl host_www hdr_beg(host) -i www
3669 acl host_static hdr_beg(host) -i img. video. download. ftp.
3670
3671 # now use backend "static" for all static-only hosts, and for static urls
3672 # of host "www". Use backend "www" for the rest.
3673 use_backend static if host_static or host_www url_static
3674 use_backend www if host_www
3675
Willy Tarreau844e3c52008-01-11 16:28:18 +01003676See section 2.2 for detailed help on the "block" and "use_backend" keywords.
Willy Tarreaudbc36f62007-11-30 12:29:11 +01003677
3678
Willy Tarreauc7246fc2007-12-02 17:31:20 +010036792.4) Server options
Willy Tarreau5764b382007-11-30 17:46:49 +01003680-------------------
3681
Willy Tarreau198a7442008-01-17 12:05:32 +01003682The "server" keyword supports a certain number of settings which are all passed
3683as arguments on the server line. The order in which those arguments appear does
3684not count, and they are all optional. Some of those settings are single words
3685(booleans) while others expect one or several values after them. In this case,
3686the values must immediately follow the setting name. All those settings must be
3687specified after the server's address if they are used :
3688
3689 server <name> <address>[:port] [settings ...]
3690
3691The currently supported settings are the following ones.
3692
3693addr <ipv4>
3694 Using the "addr" parameter, it becomes possible to use a different IP address
3695 to send health-checks. On some servers, it may be desirable to dedicate an IP
3696 address to specific component able to perform complex tests which are more
3697 suitable to health-checks than the application. This parameter is ignored if
3698 the "check" parameter is not set. See also the "port" parameter.
3699
3700backup
3701 When "backup" is present on a server line, the server is only used in load
3702 balancing when all other non-backup servers are unavailable. Requests coming
3703 with a persistence cookie referencing the server will always be served
3704 though. By default, only the first operational backup server is used, unless
3705 the "useallbackup" option is set in the backend. See also the "useallbackup"
3706 option.
3707
3708check
3709 This option enables health checks on the server. By default, a server is
3710 always considered available. If "check" is set, the server will receive
3711 periodic health checks to ensure that it is really able to serve requests.
3712 The default address and port to send the tests to are those of the server,
3713 and the default source is the same as the one defined in the backend. It is
3714 possible to change the address using the "addr" parameter, the port using the
3715 "port" parameter, the source address using the "source" address, and the
3716 interval and timers using the "inter", "rise" and "fall" parameters. The
3717 request method is define in the backend using the "httpchk", "smtpchk",
3718 and "ssl-hello-chk" options. Please refer to those options and parameters for
3719 more information.
3720
3721cookie <value>
3722 The "cookie" parameter sets the cookie value assigned to the server to
3723 <value>. This value will be checked in incoming requests, and the first
3724 operational server possessing the same value will be selected. In return, in
3725 cookie insertion or rewrite modes, this value will be assigned to the cookie
3726 sent to the client. There is nothing wrong in having several servers sharing
3727 the same cookie value, and it is in fact somewhat common between normal and
3728 backup servers. See also the "cookie" keyword in backend section.
3729
3730fall <count>
3731 The "fall" parameter states that a server will be considered as dead after
3732 <count> consecutive unsuccessful health checks. This value defaults to 3 if
3733 unspecified. See also the "check", "inter" and "rise" parameters.
3734
3735inter <delay>
3736 The "inter" parameter sets the interval between two consecutive health checks
3737 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
3738 Just as with every other time-based parameter, it can be entered in any other
3739 explicit unit among { us, ms, s, m, h, d }. This parameter also serves as a
3740 timeout for health checks sent to servers. In order to reduce "resonance"
3741 effects when multiple servers are hosted on the same hardware, the
3742 health-checks of all servers are started with a small time offset between
3743 them. It is also possible to add some random noise in the health checks
3744 interval using the global "spread-checks" keyword. This makes sense for
3745 instance when a lot of backends use the same servers.
3746
3747maxconn <maxconn>
3748 The "maxconn" parameter specifies the maximal number of concurrent
3749 connections that will be sent to this server. If the number of incoming
3750 concurrent requests goes higher than this value, they will be queued, waiting
3751 for a connection to be released. This parameter is very important as it can
3752 save fragile servers from going down under extreme loads. If a "minconn"
3753 parameter is specified, the limit becomes dynamic. The default value is "0"
3754 which means unlimited. See also the "minconn" and "maxqueue" parameters, and
3755 the backend's "fullconn" keyword.
3756
3757maxqueue <maxqueue>
3758 The "maxqueue" parameter specifies the maximal number of connections which
3759 will wait in the queue for this server. If this limit is reached, next
3760 requests will be redispatched to other servers instead of indefinitely
3761 waiting to be served. This will break persistence but may allow people to
3762 quickly re-log in when the server they try to connect to is dying. The
3763 default value is "0" which means the queue is unlimited. See also the
3764 "maxconn" and "minconn" parameters.
3765
3766minconn <minconn>
3767 When the "minconn" parameter is set, the maxconn limit becomes a dynamic
3768 limit following the backend's load. The server will always accept at least
3769 <minconn> connections, never more than <maxconn>, and the limit will be on
3770 the ramp between both values when the backend has less than <fullconn>
3771 concurrent connections. This makes it possible to limit the load on the
3772 server during normal loads, but push it further for important loads without
3773 overloading the server during exceptionnal loads. See also the "maxconn"
3774 and "maxqueue" parameters, as well as the "fullconn" backend keyword.
3775
3776port <port>
3777 Using the "port" parameter, it becomes possible to use a different port to
3778 send health-checks. On some servers, it may be desirable to dedicate a port
3779 to a specific component able to perform complex tests which are more suitable
3780 to health-checks than the application. It is common to run a simple script in
3781 inetd for instance. This parameter is ignored if the "check" parameter is not
3782 set. See also the "addr" parameter.
3783
3784rise <count>
3785 The "rise" parameter states that a server will be considered as operational
3786 after <count> consecutive successful health checks. This value defaults to 2
3787 if unspecified. See also the "check", "inter" and "fall" parameters.
3788
Willy Tarreau5764b382007-11-30 17:46:49 +01003789slowstart <start_time_in_ms>
Willy Tarreau198a7442008-01-17 12:05:32 +01003790 The "slowstart" parameter for a server accepts a value in milliseconds which
Willy Tarreau5764b382007-11-30 17:46:49 +01003791 indicates after how long a server which has just come back up will run at
Willy Tarreaubefdff12007-12-02 22:27:38 +01003792 full speed. Just as with every other time-based parameter, it can be entered
3793 in any other explicit unit among { us, ms, s, m, h, d }. The speed grows
3794 linearly from 0 to 100% during this time. The limitation applies to two
3795 parameters :
Willy Tarreau5764b382007-11-30 17:46:49 +01003796
3797 - maxconn: the number of connections accepted by the server will grow from 1
3798 to 100% of the usual dynamic limit defined by (minconn,maxconn,fullconn).
3799
3800 - weight: when the backend uses a dynamic weighted algorithm, the weight
3801 grows linearly from 1 to 100%. In this case, the weight is updated at every
Willy Tarreau198a7442008-01-17 12:05:32 +01003802 health-check. For this reason, it is important that the "inter" parameter
3803 is smaller than the "slowstart", in order to maximize the number of steps.
Willy Tarreau5764b382007-11-30 17:46:49 +01003804
3805 The slowstart never applies when haproxy starts, otherwise it would cause
3806 trouble to running servers. It only applies when a server has been previously
3807 seen as failed.
3808
Willy Tarreau198a7442008-01-17 12:05:32 +01003809source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
3810 The "source" parameter sets the source address which will be used when
3811 connecting to the server. It follows the exact same parameters and principle
3812 as the backend "source" keyword, except that it only applies to the server
3813 referencing it. Please consult the "source" keyword for details.
3814
3815weight <weight>
3816 The "weight" parameter is used to adjust the server's weight relative to
3817 other servers. All servers will receive a load proportional to their weight
3818 relative to the sum of all weights, so the higher the weight, the higher the
3819 load. The default weight is 1, and the maximal value is 255. If this
3820 parameter is used to distribute the load according to server's capacity, it
3821 is recommended to start with values which can both grow and shrink, for
3822 instance between 10 and 100 to leave enough room above and below for later
3823 adjustments.
3824
Willy Tarreau5764b382007-11-30 17:46:49 +01003825
Willy Tarreau844e3c52008-01-11 16:28:18 +010038262.5) Logging
3827------------
3828
3829[to do]
3830
3831
Willy Tarreau0ba27502007-12-24 16:55:16 +01003832/*
3833 * Local variables:
3834 * fill-column: 79
3835 * End:
3836 */