blob: 2d6081c55d57ccee6d65adff5ba1d15389ab1bd9 [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
2241server <name> <address>[:port] [param*]
2242 Declare a server in a backend
2243 May be used in sections : defaults | frontend | listen | backend
2244 no | no | yes | yes
2245 Arguments :
2246 <name> is the internal name assigned to this server. This name will
2247 appear in logs and alerts.
2248
2249 <address> is the IPv4 address of the server. Alternatively, a resolvable
2250 hostname is supported, but this name will be resolved during
2251 start-up.
2252
2253 <ports> is an optional port specification. If set, all connections will
2254 be sent to this port. If unset, the same port the client
2255 connected to will be used. The port may also be prefixed by a "+"
2256 or a "-". In this case, the server's port will be determined by
2257 adding this value to the client's port.
2258
2259 <param*> is a list of parameters for this server. The "server" keywords
2260 accepts an important number of options and has a complete section
2261 dedicated to it. Please refer to section 2.4 for more details.
2262
2263 Examples :
2264 server first 10.1.1.1:1080 cookie first check inter 1000
2265 server second 10.1.1.2:1080 cookie second check inter 1000
2266
2267 See also : section 2.4 about server options
2268
2269
2270source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
2271 Set the source address for outgoing connections
2272 May be used in sections : defaults | frontend | listen | backend
2273 yes | no | yes | yes
2274 Arguments :
2275 <addr> is the IPv4 address HAProxy will bind to before connecting to a
2276 server. This address is also used as a source for health checks.
2277 The default value of 0.0.0.0 means that the system will select
2278 the most appropriate address to reach its destination.
2279
2280 <port> is an optional port. It is normally not needed but may be useful
2281 in some very specific contexts. The default value of zero means
2282 the system will select a free port.
2283
2284 <addr2> is the IP address to present to the server when connections are
2285 forwarded in full transparent proxy mode. This is currently only
2286 supported on some patched Linux kernels. When this address is
2287 specified, clients connecting to the server will be presented
2288 with this address, while health checks will still use the address
2289 <addr>.
2290
2291 <port2> is the optional port to present to the server when connections
2292 are forwarded in full transparent proxy mode (see <addr2> above).
2293 The default value of zero means the system will select a free
2294 port.
2295
2296 The "source" keyword is useful in complex environments where a specific
2297 address only is allowed to connect to the servers. It may be needed when a
2298 private address must be used through a public gateway for instance, and it is
2299 known that the system cannot determine the adequate source address by itself.
2300
2301 An extension which is available on certain patched Linux kernels may be used
2302 through the "usesrc" optional keyword. It makes it possible to connect to the
2303 servers with an IP address which does not belong to the system itself. This
2304 is called "full transparent proxy mode". For this to work, the destination
2305 servers have to route their traffic back to this address through the machine
2306 running HAProxy, and IP forwarding must generally be enabled on this machine.
2307
2308 In this "full transparent proxy" mode, it is possible to force a specific IP
2309 address to be presented to the servers. This is not much used in fact. A more
2310 common use is to tell HAProxy to present the client's IP address. For this,
2311 there are two methods :
2312
2313 - present the client's IP and port addresses. This is the most transparent
2314 mode, but it can cause problems when IP connection tracking is enabled on
2315 the machine, because a same connection may be seen twice with different
2316 states. However, this solution presents the huge advantage of not
2317 limiting the system to the 64k outgoing address+port couples, because all
2318 of the client ranges may be used.
2319
2320 - present only the client's IP address and select a spare port. This
2321 solution is still quite elegant but slightly less transparent (downstream
2322 firewalls logs will not match upstream's). It also presents the downside
2323 of limiting the number of concurrent connections to the usual 64k ports.
2324 However, since the upstream and downstream ports are different, local IP
2325 connection tracking on the machine will not be upset by the reuse of the
2326 same session.
2327
2328 Note that depending on the transparent proxy technology used, it may be
2329 required to force the source address. In fact, cttproxy version 2 requires an
2330 IP address in <addr> above, and does not support setting of "0.0.0.0" as the
2331 IP address because it creates NAT entries which much match the exact outgoing
2332 address. Tproxy version 4 and some other kernel patches which work in pure
2333 forwarding mode generally will not have this limitation.
2334
2335 This option sets the default source for all servers in the backend. It may
2336 also be specified in a "defaults" section. Finer source address specification
2337 is possible at the server level using the "source" server option. Refer to
2338 section 2.4 for more information.
2339
2340 Examples :
2341 backend private
2342 # Connect to the servers using our 192.168.1.200 source address
2343 source 192.168.1.200
2344
2345 backend transparent_ssl1
2346 # Connect to the SSL farm from the client's source address
2347 source 192.168.1.200 usesrc clientip
2348
2349 backend transparent_ssl2
2350 # Connect to the SSL farm from the client's source address and port
2351 # not recommended if IP conntrack is present on the local machine.
2352 source 192.168.1.200 usesrc client
2353
2354 backend transparent_ssl3
2355 # Connect to the SSL farm from the client's source address. It
2356 # is more conntrack-friendly.
2357 source 192.168.1.200 usesrc clientip
2358
2359 backend transparent_smtp
2360 # Connect to the SMTP farm from the client's source address/port
2361 # with Tproxy version 4.
2362 source 0.0.0.0 usesrc clientip
2363
2364 See also : the "source" server option in section 2.4, the Tproxy patches for
2365 the Linux kernel on www.balabit.com, the "bind" keyword.
2366
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01002367
Willy Tarreau844e3c52008-01-11 16:28:18 +01002368srvtimeout <timeout> (deprecated)
2369 Set the maximum inactivity time on the server side.
2370 May be used in sections : defaults | frontend | listen | backend
2371 yes | no | yes | yes
2372 Arguments :
2373 <timeout> is the timeout value specified in milliseconds by default, but
2374 can be in any other unit if the number is suffixed by the unit,
2375 as explained at the top of this document.
2376
2377 The inactivity timeout applies when the server is expected to acknowledge or
2378 send data. In HTTP mode, this timeout is particularly important to consider
2379 during the first phase of the server's response, when it has to send the
2380 headers, as it directly represents the server's processing time for the
2381 request. To find out what value to put there, it's often good to start with
2382 what would be considered as unacceptable response times, then check the logs
2383 to observe the response time distribution, and adjust the value accordingly.
2384
2385 The value is specified in milliseconds by default, but can be in any other
2386 unit if the number is suffixed by the unit, as specified at the top of this
2387 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
2388 recommended that the client timeout remains equal to the server timeout in
2389 order to avoid complex situations to debug. Whatever the expected server
2390 response times, it is a good practise to cover at least one or several TCP
2391 packet losses by specifying timeouts that are slightly above multiples of 3
2392 seconds (eg: 4 or 5 seconds minimum).
2393
2394 This parameter is specific to backends, but can be specified once for all in
2395 "defaults" sections. This is in fact one of the easiest solutions not to
2396 forget about it. An unspecified timeout results in an infinite timeout, which
2397 is not recommended. Such a usage is accepted and works but reports a warning
2398 during startup because it may results in accumulation of expired sessions in
2399 the system if the system's timeouts are not configured either.
2400
2401 This parameter is provided for compatibility but is currently deprecated.
2402 Please use "timeout server" instead.
2403
2404 See also : "timeout server", "timeout client" and "clitimeout".
2405
2406
Willy Tarreaueabeafa2008-01-16 16:17:06 +01002407stats auth <user>:<passwd>
2408 Enable statistics with authentication and grant access to an account
2409 May be used in sections : defaults | frontend | listen | backend
2410 yes | no | yes | yes
2411 Arguments :
2412 <user> is a user name to grant access to
2413
2414 <passwd> is the cleartext password associated to this user
2415
2416 This statement enables statistics with default settings, and restricts access
2417 to declared users only. It may be repeated as many times as necessary to
2418 allow as many users as desired. When a user tries to access the statistics
2419 without a valid account, a "401 Forbidden" response will be returned so that
2420 the browser asks the user to provide a valid user and password. The real
2421 which will be returned to the browser is configurable using "stats realm".
2422
2423 Since the authentication method is HTTP Basic Authentication, the passwords
2424 circulate in cleartext on the network. Thus, it was decided that the
2425 configuration file would also use cleartext passwords to remind the users
2426 that those ones should not be sensible and not shared with any other account.
2427
2428 It is also possible to reduce the scope of the proxies which appear in the
2429 report using "stats scope".
2430
2431 Though this statement alone is enough to enable statistics reporting, it is
2432 recommended to set all other settings in order to avoid relying on default
2433 unobvious parameters.
2434
2435 Example :
2436 # public access (limited to this backend only)
2437 backend public_www
2438 server srv1 192.168.0.1:80
2439 stats enable
2440 stats hide-version
2441 stats scope .
2442 stats uri /admin?stats
2443 stats realm Haproxy\ Statistics
2444 stats auth admin1:AdMiN123
2445 stats auth admin2:AdMiN321
2446
2447 # internal monitoring access (unlimited)
2448 backend private_monitoring
2449 stats enable
2450 stats uri /admin?stats
2451 stats refresh 5s
2452
2453 See also : "stats enable", "stats realm", "stats scope", "stats uri"
2454
2455
2456stats enable
2457 Enable statistics reporting with default settings
2458 May be used in sections : defaults | frontend | listen | backend
2459 yes | no | yes | yes
2460 Arguments : none
2461
2462 This statement enables statistics reporting with default settings defined
2463 at build time. Unless stated otherwise, these settings are used :
2464 - stats uri : /haproxy?stats
2465 - stats realm : "HAProxy Statistics"
2466 - stats auth : no authentication
2467 - stats scope : no restriction
2468
2469 Though this statement alone is enough to enable statistics reporting, it is
2470 recommended to set all other settings in order to avoid relying on default
2471 unobvious parameters.
2472
2473 Example :
2474 # public access (limited to this backend only)
2475 backend public_www
2476 server srv1 192.168.0.1:80
2477 stats enable
2478 stats hide-version
2479 stats scope .
2480 stats uri /admin?stats
2481 stats realm Haproxy\ Statistics
2482 stats auth admin1:AdMiN123
2483 stats auth admin2:AdMiN321
2484
2485 # internal monitoring access (unlimited)
2486 backend private_monitoring
2487 stats enable
2488 stats uri /admin?stats
2489 stats refresh 5s
2490
2491 See also : "stats auth", "stats realm", "stats uri"
2492
2493
2494stats realm <realm>
2495 Enable statistics and set authentication realm
2496 May be used in sections : defaults | frontend | listen | backend
2497 yes | no | yes | yes
2498 Arguments :
2499 <realm> is the name of the HTTP Basic Authentication realm reported to
2500 the browser. The browser uses it to display it in the pop-up
2501 inviting the user to enter a valid username and password.
2502
2503 The realm is read as a single word, so any spaces in it should be escaped
2504 using a backslash ('\').
2505
2506 This statement is useful only in conjunction with "stats auth" since it is
2507 only related to authentication.
2508
2509 Though this statement alone is enough to enable statistics reporting, it is
2510 recommended to set all other settings in order to avoid relying on default
2511 unobvious parameters.
2512
2513 Example :
2514 # public access (limited to this backend only)
2515 backend public_www
2516 server srv1 192.168.0.1:80
2517 stats enable
2518 stats hide-version
2519 stats scope .
2520 stats uri /admin?stats
2521 stats realm Haproxy\ Statistics
2522 stats auth admin1:AdMiN123
2523 stats auth admin2:AdMiN321
2524
2525 # internal monitoring access (unlimited)
2526 backend private_monitoring
2527 stats enable
2528 stats uri /admin?stats
2529 stats refresh 5s
2530
2531 See also : "stats auth", "stats enable", "stats uri"
2532
2533
2534stats refresh <delay>
2535 Enable statistics with automatic refresh
2536 May be used in sections : defaults | frontend | listen | backend
2537 yes | no | yes | yes
2538 Arguments :
2539 <delay> is the suggested refresh delay, specified in seconds, which will
2540 be returned to the browser consulting the report page. While the
2541 browser is free to apply any delay, it will generally respect it
2542 and refresh the page this every seconds. The refresh interval may
2543 be specified in any other non-default time unit, by suffixing the
2544 unit after the value, as explained at the top of this document.
2545
2546 This statement is useful on monitoring displays with a permanent page
2547 reporting the load balancer's activity. When set, the HTML report page will
2548 include a link "refresh"/"stop refresh" so that the user can select whether
2549 he wants automatic refresh of the page or not.
2550
2551 Though this statement alone is enough to enable statistics reporting, it is
2552 recommended to set all other settings in order to avoid relying on default
2553 unobvious parameters.
2554
2555 Example :
2556 # public access (limited to this backend only)
2557 backend public_www
2558 server srv1 192.168.0.1:80
2559 stats enable
2560 stats hide-version
2561 stats scope .
2562 stats uri /admin?stats
2563 stats realm Haproxy\ Statistics
2564 stats auth admin1:AdMiN123
2565 stats auth admin2:AdMiN321
2566
2567 # internal monitoring access (unlimited)
2568 backend private_monitoring
2569 stats enable
2570 stats uri /admin?stats
2571 stats refresh 5s
2572
2573 See also : "stats auth", "stats enable", "stats realm", "stats uri"
2574
2575
2576stats scope { <name> | "." }
2577 Enable statistics and limit access scope
2578 May be used in sections : defaults | frontend | listen | backend
2579 yes | no | yes | yes
2580 Arguments :
2581 <name> is the name of a listen, frontend or backend section to be
2582 reported. The special name "." (a single dot) designates the
2583 section in which the statement appears.
2584
2585 When this statement is specified, only the sections enumerated with this
2586 statement will appear in the report. All other ones will be hidden. This
2587 statement may appear as many times as needed if multiple sections need to be
2588 reported. Please note that the name checking is performed as simple string
2589 comparisons, and that it is never checked that a give section name really
2590 exists.
2591
2592 Though this statement alone is enough to enable statistics reporting, it is
2593 recommended to set all other settings in order to avoid relying on default
2594 unobvious parameters.
2595
2596 Example :
2597 # public access (limited to this backend only)
2598 backend public_www
2599 server srv1 192.168.0.1:80
2600 stats enable
2601 stats hide-version
2602 stats scope .
2603 stats uri /admin?stats
2604 stats realm Haproxy\ Statistics
2605 stats auth admin1:AdMiN123
2606 stats auth admin2:AdMiN321
2607
2608 # internal monitoring access (unlimited)
2609 backend private_monitoring
2610 stats enable
2611 stats uri /admin?stats
2612 stats refresh 5s
2613
2614 See also : "stats auth", "stats enable", "stats realm", "stats uri"
2615
2616
2617stats uri <prefix>
2618 Enable statistics and define the URI prefix to access them
2619 May be used in sections : defaults | frontend | listen | backend
2620 yes | no | yes | yes
2621 Arguments :
2622 <prefix> is the prefix of any URI which will be redirected to stats. This
2623 prefix may contain a question mark ('?') to indicate part of a
2624 query string.
2625
2626 The statistics URI is intercepted on the relayed traffic, so it appears as a
2627 page within the normal application. It is strongly advised to ensure that the
2628 selected URI will never appear in the application, otherwise it will never be
2629 possible to reach it in the application.
2630
2631 The default URI compiled in haproxy is "/haproxy?stats", but this may be
2632 changed at build time, so it's better to always explictly specify it here.
2633 It is generally a good idea to include a question mark in the URI so that
2634 intermediate proxies refrain from caching the results. Also, since any string
2635 beginning with the prefix will be accepted as a stats request, the question
2636 mark helps ensuring that no valid URI will begin with the same words.
2637
2638 It is sometimes very convenient to use "/" as the URI prefix, and put that
2639 statement in a "listen" instance of its own. That makes it easy to dedicate
2640 an address or a port to statistics only.
2641
2642 Though this statement alone is enough to enable statistics reporting, it is
2643 recommended to set all other settings in order to avoid relying on default
2644 unobvious parameters.
2645
2646 Example :
2647 # public access (limited to this backend only)
2648 backend public_www
2649 server srv1 192.168.0.1:80
2650 stats enable
2651 stats hide-version
2652 stats scope .
2653 stats uri /admin?stats
2654 stats realm Haproxy\ Statistics
2655 stats auth admin1:AdMiN123
2656 stats auth admin2:AdMiN321
2657
2658 # internal monitoring access (unlimited)
2659 backend private_monitoring
2660 stats enable
2661 stats uri /admin?stats
2662 stats refresh 5s
2663
2664 See also : "stats auth", "stats enable", "stats realm"
2665
2666
2667stats hide-version
2668 Enable statistics and hide HAProxy version reporting
2669 May be used in sections : defaults | frontend | listen | backend
2670 yes | no | yes | yes
2671 Arguments : none
2672
2673 By default, the stats page reports some useful status information along with
2674 the statistics. Among them is HAProxy's version. However, it is generally
2675 considered dangerous to report precise version to anyone, as it can help them
2676 target known weaknesses with specific attacks. The "stats hide-version"
2677 statement removes the version from the statistics report. This is recommended
2678 for public sites or any site with a weak login/password.
2679
2680 Though this statement alone is enough to enable statistics reporting, it is
2681 recommended to set all other settings in order to avoid relying on default
2682 unobvious parameters.
2683
2684 Example :
2685 # public access (limited to this backend only)
2686 backend public_www
2687 server srv1 192.168.0.1:80
2688 stats enable
2689 stats hide-version
2690 stats scope .
2691 stats uri /admin?stats
2692 stats realm Haproxy\ Statistics
2693 stats auth admin1:AdMiN123
2694 stats auth admin2:AdMiN321
2695
2696 # internal monitoring access (unlimited)
2697 backend private_monitoring
2698 stats enable
2699 stats uri /admin?stats
2700 stats refresh 5s
2701
2702 See also : "stats auth", "stats enable", "stats realm", "stats uri"
2703
2704
Willy Tarreau0ba27502007-12-24 16:55:16 +01002705timeout client <timeout>
2706timeout clitimeout <timeout> (deprecated)
2707 Set the maximum inactivity time on the client side.
2708 May be used in sections : defaults | frontend | listen | backend
2709 yes | yes | yes | no
2710 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01002711 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01002712 can be in any other unit if the number is suffixed by the unit,
2713 as explained at the top of this document.
2714
2715 The inactivity timeout applies when the client is expected to acknowledge or
2716 send data. In HTTP mode, this timeout is particularly important to consider
2717 during the first phase, when the client sends the request, and during the
2718 response while it is reading data sent by the server. The value is specified
2719 in milliseconds by default, but can be in any other unit if the number is
2720 suffixed by the unit, as specified at the top of this document. In TCP mode
2721 (and to a lesser extent, in HTTP mode), it is highly recommended that the
2722 client timeout remains equal to the server timeout in order to avoid complex
2723 situations to debug. It is a good practise to cover one or several TCP packet
2724 losses by specifying timeouts that are slightly above multiples of 3 seconds
2725 (eg: 4 or 5 seconds).
2726
2727 This parameter is specific to frontends, but can be specified once for all in
2728 "defaults" sections. This is in fact one of the easiest solutions not to
2729 forget about it. An unspecified timeout results in an infinite timeout, which
2730 is not recommended. Such a usage is accepted and works but reports a warning
2731 during startup because it may results in accumulation of expired sessions in
2732 the system if the system's timeouts are not configured either.
2733
2734 This parameter replaces the old, deprecated "clitimeout". It is recommended
2735 to use it to write new configurations. The form "timeout clitimeout" is
2736 provided only by backwards compatibility but its use is strongly discouraged.
2737
2738 See also : "clitimeout", "timeout server".
2739
2740
2741timeout connect <timeout>
2742timeout contimeout <timeout> (deprecated)
2743 Set the maximum time to wait for a connection attempt to a server to succeed.
2744 May be used in sections : defaults | frontend | listen | backend
2745 yes | no | yes | yes
2746 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01002747 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01002748 can be in any other unit if the number is suffixed by the unit,
2749 as explained at the top of this document.
2750
2751 If the server is located on the same LAN as haproxy, the connection should be
2752 immediate (less than a few milliseconds). Anyway, it is a good practise to
2753 cover one or several TCP packet losses by specifying timeouts that are
2754 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
2755 connect timeout also presets the queue timeout to the same value if this one
2756 has not been specified.
2757
2758 This parameter is specific to backends, but can be specified once for all in
2759 "defaults" sections. This is in fact one of the easiest solutions not to
2760 forget about it. An unspecified timeout results in an infinite timeout, which
2761 is not recommended. Such a usage is accepted and works but reports a warning
2762 during startup because it may results in accumulation of failed sessions in
2763 the system if the system's timeouts are not configured either.
2764
2765 This parameter replaces the old, deprecated "contimeout". It is recommended
2766 to use it to write new configurations. The form "timeout contimeout" is
2767 provided only by backwards compatibility but its use is strongly discouraged.
2768
2769 See also : "timeout queue", "timeout server", "contimeout".
2770
2771
Willy Tarreau036fae02008-01-06 13:24:40 +01002772timeout http-request <timeout>
2773 Set the maximum allowed time to wait for a complete HTTP request
2774 May be used in sections : defaults | frontend | listen | backend
2775 yes | yes | yes | no
2776 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01002777 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau036fae02008-01-06 13:24:40 +01002778 can be in any other unit if the number is suffixed by the unit,
2779 as explained at the top of this document.
2780
2781 In order to offer DoS protection, it may be required to lower the maximum
2782 accepted time to receive a complete HTTP request without affecting the client
2783 timeout. This helps protecting against established connections on which
2784 nothing is sent. The client timeout cannot offer a good protection against
2785 this abuse because it is an inactivity timeout, which means that if the
2786 attacker sends one character every now and then, the timeout will not
2787 trigger. With the HTTP request timeout, no matter what speed the client
2788 types, the request will be aborted if it does not complete in time.
2789
2790 Note that this timeout only applies to the header part of the request, and
2791 not to any data. As soon as the empty line is received, this timeout is not
2792 used anymore.
2793
2794 Generally it is enough to set it to a few seconds, as most clients send the
2795 full request immediately upon connection. Add 3 or more seconds to cover TCP
2796 retransmits but that's all. Setting it to very low values (eg: 50 ms) will
2797 generally work on local networks as long as there are no packet losses. This
2798 will prevent people from sending bare HTTP requests using telnet.
2799
2800 If this parameter is not set, the client timeout still applies between each
2801 chunk of the incoming request.
2802
2803 See also : "timeout client".
2804
Willy Tarreau844e3c52008-01-11 16:28:18 +01002805
2806timeout queue <timeout>
2807 Set the maximum time to wait in the queue for a connection slot to be free
2808 May be used in sections : defaults | frontend | listen | backend
2809 yes | no | yes | yes
2810 Arguments :
2811 <timeout> is the timeout value specified in milliseconds by default, but
2812 can be in any other unit if the number is suffixed by the unit,
2813 as explained at the top of this document.
2814
2815 When a server's maxconn is reached, connections are left pending in a queue
2816 which may be server-specific or global to the backend. In order not to wait
2817 indefinitely, a timeout is applied to requests pending in the queue. If the
2818 timeout is reached, it is considered that the request will almost never be
2819 served, so it is dropped and a 503 error is returned to the client.
2820
2821 The "timeout queue" statement allows to fix the maximum time for a request to
2822 be left pending in a queue. If unspecified, the same value as the backend's
2823 connection timeout ("timeout connect") is used, for backwards compatibility
2824 with older versions with no "timeout queue" parameter.
2825
2826 See also : "timeout connect", "contimeout".
2827
2828
2829timeout server <timeout>
2830timeout srvtimeout <timeout> (deprecated)
2831 Set the maximum inactivity time on the server side.
2832 May be used in sections : defaults | frontend | listen | backend
2833 yes | no | yes | yes
2834 Arguments :
2835 <timeout> is the timeout value specified in milliseconds by default, but
2836 can be in any other unit if the number is suffixed by the unit,
2837 as explained at the top of this document.
2838
2839 The inactivity timeout applies when the server is expected to acknowledge or
2840 send data. In HTTP mode, this timeout is particularly important to consider
2841 during the first phase of the server's response, when it has to send the
2842 headers, as it directly represents the server's processing time for the
2843 request. To find out what value to put there, it's often good to start with
2844 what would be considered as unacceptable response times, then check the logs
2845 to observe the response time distribution, and adjust the value accordingly.
2846
2847 The value is specified in milliseconds by default, but can be in any other
2848 unit if the number is suffixed by the unit, as specified at the top of this
2849 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
2850 recommended that the client timeout remains equal to the server timeout in
2851 order to avoid complex situations to debug. Whatever the expected server
2852 response times, it is a good practise to cover at least one or several TCP
2853 packet losses by specifying timeouts that are slightly above multiples of 3
2854 seconds (eg: 4 or 5 seconds minimum).
2855
2856 This parameter is specific to backends, but can be specified once for all in
2857 "defaults" sections. This is in fact one of the easiest solutions not to
2858 forget about it. An unspecified timeout results in an infinite timeout, which
2859 is not recommended. Such a usage is accepted and works but reports a warning
2860 during startup because it may results in accumulation of expired sessions in
2861 the system if the system's timeouts are not configured either.
2862
2863 This parameter replaces the old, deprecated "srvtimeout". It is recommended
2864 to use it to write new configurations. The form "timeout srvtimeout" is
2865 provided only by backwards compatibility but its use is strongly discouraged.
2866
2867 See also : "srvtimeout", "timeout client".
2868
2869
2870timeout tarpit <timeout>
2871 Set the duration for which tapitted connections will be maintained
2872 May be used in sections : defaults | frontend | listen | backend
2873 yes | yes | yes | yes
2874 Arguments :
2875 <timeout> is the tarpit duration specified in milliseconds by default, but
2876 can be in any other unit if the number is suffixed by the unit,
2877 as explained at the top of this document.
2878
2879 When a connection is tarpitted using "reqtarpit", it is maintained open with
2880 no activity for a certain amount of time, then closed. "timeout tarpit"
2881 defines how long it will be maintained open.
2882
2883 The value is specified in milliseconds by default, but can be in any other
2884 unit if the number is suffixed by the unit, as specified at the top of this
2885 document. If unspecified, the same value as the backend's connection timeout
2886 ("timeout connect") is used, for backwards compatibility with older versions
2887 with no "timeout tapit" parameter.
2888
2889 See also : "timeout connect", "contimeout".
2890
2891
2892transparent (deprecated)
2893 Enable client-side transparent proxying
2894 May be used in sections : defaults | frontend | listen | backend
2895 yes | yes | yes | no
2896 Arguments : none
2897
2898 This keyword was introduced in order to provide layer 7 persistence to layer
2899 3 load balancers. The idea is to use the OS's ability to redirect an incoming
2900 connection for a remote address to a local process (here HAProxy), and let
2901 this process know what address was initially requested. When this option is
2902 used, sessions without cookies will be forwarded to the original destination
2903 IP address of the incoming request (which should match that of another
2904 equipment), while requests with cookies will still be forwarded to the
2905 appropriate server.
2906
2907 The "transparent" keyword is deprecated, use "option transparent" instead.
2908
2909 Note that contrary to a common belief, this option does NOT make HAProxy
2910 present the client's IP to the server when establishing the connection.
2911
2912 Use of this option is really discouraged, and since no really valid use of it
2913 has been reported for years, it will probably be removed in future versions.
2914
2915 See also: "option transparent"
2916
2917
2918use_backend <backend> if <condition>
2919use_backend <backend> unless <condition>
2920 Switch to a specific backend if/unless a Layer 7 condition is matched.
2921 May be used in sections : defaults | frontend | listen | backend
2922 no | yes | yes | no
2923 Arguments :
2924 <backend> is the name of a valid backend or "listen" section.
2925
2926 <condition> is a condition composed of ACLs, as described in section 2.3.
2927
2928 When doing content-switching, connections arrive on a frontend and are then
2929 dispatched to various backends depending on a number of conditions. The
2930 relation between the conditions and the backends is described with the
2931 "use_backend" keyword. This is supported only in HTTP mode.
2932
2933 There may be as many "use_backend" rules as desired. All of these rules are
2934 evaluated in their declaration order, and the first one which matches will
2935 assign the backend.
2936
2937 In the first form, the backend will be used if the condition is met. In the
2938 second form, the backend will be used if the condition is not met. If no
2939 condition is valid, the backend defined with "default_backend" will be used.
2940 If no default backend is defined, either the servers in the same section are
2941 used (in case of a "listen" section) or, in case of a frontend, no server is
2942 used and a 503 service unavailable response is returned.
2943
2944 See also: "default_backend" and section 2.3 about ACLs.
2945
Willy Tarreau036fae02008-01-06 13:24:40 +01002946
Willy Tarreau0ba27502007-12-24 16:55:16 +010029472.3) Using ACLs
Willy Tarreau6a06a402007-07-15 20:15:28 +02002948---------------
2949
2950The use of Access Control Lists (ACL) provides a flexible solution to perform
Willy Tarreau0ba27502007-12-24 16:55:16 +01002951content switching and generally to take decisions based on content extracted
2952from the request, the response or any environmental status. The principle is
2953simple :
Willy Tarreau6a06a402007-07-15 20:15:28 +02002954
2955 - define test criteria with sets of values
2956 - perform actions only if a set of tests is valid
2957
2958The actions generally consist in blocking the request, or selecting a backend.
2959
2960In order to define a test, the "acl" keyword is used. The syntax is :
2961
2962 acl <aclname> <criterion> [flags] [operator] <value> ...
2963
Willy Tarreau0ba27502007-12-24 16:55:16 +01002964This creates a new ACL <aclname> or completes an existing one with new tests.
2965Those tests apply to the portion of request/response specified in <criterion>
Willy Tarreau6a06a402007-07-15 20:15:28 +02002966and may be adjusted with optional flags [flags]. Some criteria also support
2967an operator which may be specified before the set of values. The values are
2968of the type supported by the criterion, and are separated by spaces.
2969
Willy Tarreau0ba27502007-12-24 16:55:16 +01002970ACL names must be formed from upper and lower case letters, digits, '-' (dash),
2971'_' (underscore) , '.' (dot) and ':' (colon). ACL names are case-sensitive,
2972which means that "my_acl" and "My_Acl" are two different ACLs.
2973
2974There is no enforced limit to the number of ACLs. The unused ones do not affect
Willy Tarreau6a06a402007-07-15 20:15:28 +02002975performance, they just consume a small amount of memory.
2976
Willy Tarreau0ba27502007-12-24 16:55:16 +01002977The following ACL flags are currently supported :
Willy Tarreau6a06a402007-07-15 20:15:28 +02002978
2979 -i : ignore case during matching.
2980 -- : force end of flags. Useful when a string looks like one of the flags.
2981
2982Supported types of values are :
Willy Tarreau0ba27502007-12-24 16:55:16 +01002983
Willy Tarreau6a06a402007-07-15 20:15:28 +02002984 - integers or integer ranges
2985 - strings
2986 - regular expressions
2987 - IP addresses and networks
2988
2989
Willy Tarreau0ba27502007-12-24 16:55:16 +010029902.3.1) Matching integers
Willy Tarreau6a06a402007-07-15 20:15:28 +02002991------------------------
2992
2993Matching integers is special in that ranges and operators are permitted. Note
2994that integer matching only applies to positive values. A range is a value
2995expressed with a lower and an upper bound separated with a colon, both of which
2996may be omitted.
2997
2998For instance, "1024:65535" is a valid range to represent a range of
2999unprivileged ports, and "1024:" would also work. "0:1023" is a valid
3000representation of privileged ports, and ":1023" would also work.
3001
3002For an easier usage, comparison operators are also supported. Note that using
Willy Tarreau0ba27502007-12-24 16:55:16 +01003003operators with ranges does not make much sense and is strongly discouraged.
3004Similarly, it does not make much sense to perform order comparisons with a set
3005of values.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003006
Willy Tarreau0ba27502007-12-24 16:55:16 +01003007Available operators for integer matching are :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003008
3009 eq : true if the tested value equals at least one value
3010 ge : true if the tested value is greater than or equal to at least one value
3011 gt : true if the tested value is greater than at least one value
3012 le : true if the tested value is less than or equal to at least one value
3013 lt : true if the tested value is less than at least one value
3014
Willy Tarreau0ba27502007-12-24 16:55:16 +01003015For instance, the following ACL matches any negative Content-Length header :
Willy Tarreau6a06a402007-07-15 20:15:28 +02003016
3017 acl negative-length hdr_val(content-length) lt 0
3018
3019
Willy Tarreau0ba27502007-12-24 16:55:16 +010030202.3.2) Matching strings
Willy Tarreau6a06a402007-07-15 20:15:28 +02003021-----------------------
3022
3023String matching applies to verbatim strings as they are passed, with the
3024exception of the backslash ("\") which makes it possible to escape some
3025characters such as the space. If the "-i" flag is passed before the first
3026string, then the matching will be performed ignoring the case. In order
3027to match the string "-i", either set it second, or pass the "--" flag
Willy Tarreau0ba27502007-12-24 16:55:16 +01003028before the first string. Same applies of course to match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02003029
3030
Willy Tarreau0ba27502007-12-24 16:55:16 +010030312.3.3) Matching regular expressions (regexes)
Willy Tarreau6a06a402007-07-15 20:15:28 +02003032---------------------------------------------
3033
3034Just like with string matching, regex matching applies to verbatim strings as
3035they are passed, with the exception of the backslash ("\") which makes it
3036possible to escape some characters such as the space. If the "-i" flag is
3037passed before the first regex, then the matching will be performed ignoring
3038the case. In order to match the string "-i", either set it second, or pass
Willy Tarreau0ba27502007-12-24 16:55:16 +01003039the "--" flag before the first string. Same principle applies of course to
3040match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02003041
3042
Willy Tarreau0ba27502007-12-24 16:55:16 +010030432.3.4) Matching IPv4 addresses
3044------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02003045
3046IPv4 addresses values can be specified either as plain addresses or with a
3047netmask appended, in which case the IPv4 address matches whenever it is
3048within the network. Plain addresses may also be replaced with a resolvable
3049host name, but this practise is generally discouraged as it makes it more
Willy Tarreau0ba27502007-12-24 16:55:16 +01003050difficult to read and debug configurations. If hostnames are used, you should
3051at least ensure that they are present in /etc/hosts so that the configuration
3052does not depend on any random DNS match at the moment the configuration is
3053parsed.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003054
3055
Willy Tarreau0ba27502007-12-24 16:55:16 +010030562.3.5) Available matching criteria
Willy Tarreau6a06a402007-07-15 20:15:28 +02003057----------------------------------
3058
Willy Tarreau0ba27502007-12-24 16:55:16 +010030592.3.5.1) Matching at Layer 4 and below
3060--------------------------------------
3061
3062A first set of criteria applies to information which does not require any
3063analysis of the request or response contents. Those generally include TCP/IP
3064addresses and ports, as well as internal values independant on the stream.
3065
Willy Tarreau6a06a402007-07-15 20:15:28 +02003066always_false
3067 This one never matches. All values and flags are ignored. It may be used as
3068 a temporary replacement for another one when adjusting configurations.
3069
3070always_true
3071 This one always matches. All values and flags are ignored. It may be used as
3072 a temporary replacement for another one when adjusting configurations.
3073
3074src <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003075 Applies to the client's IPv4 address. It is usually used to limit access to
Willy Tarreau6a06a402007-07-15 20:15:28 +02003076 certain resources such as statistics. Note that it is the TCP-level source
3077 address which is used, and not the address of a client behind a proxy.
3078
3079src_port <integer>
3080 Applies to the client's TCP source port. This has a very limited usage.
3081
3082dst <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003083 Applies to the local IPv4 address the client connected to. It can be used to
Willy Tarreau6a06a402007-07-15 20:15:28 +02003084 switch to a different backend for some alternative addresses.
3085
3086dst_port <integer>
3087 Applies to the local port the client connected to. It can be used to switch
3088 to a different backend for some alternative ports.
3089
3090dst_conn <integer>
3091 Applies to the number of currently established connections on the frontend,
3092 including the one being evaluated. It can be used to either return a sorry
Willy Tarreau0ba27502007-12-24 16:55:16 +01003093 page before hard-blocking, or to use a specific backend to drain new requests
Willy Tarreau6a06a402007-07-15 20:15:28 +02003094 when the farm is considered saturated.
3095
Willy Tarreau0ba27502007-12-24 16:55:16 +01003096nbsrv <integer>
3097nbsrv(backend) <integer>
3098 Returns true when the number of usable servers of either the current backend
3099 or the named backend matches the values or ranges specified. This is used to
3100 switch to an alternate backend when the number of servers is too low to
3101 to handle some load. It is useful to report a failure when combined with
3102 "monitor fail".
3103
3104
31052.3.5.2) Matching at Layer 7
3106----------------------------
3107
3108A second set of criteria applies to information which can be found at the
3109application layer (layer 7). Those require that a full HTTP request has been
3110read, and are only evaluated then. They may require slightly more CPU resources
3111than the layer 4 ones, but not much since the request and response are indexed.
3112
Willy Tarreau6a06a402007-07-15 20:15:28 +02003113method <string>
3114 Applies to the method in the HTTP request, eg: "GET". Some predefined ACL
3115 already check for most common methods.
3116
3117req_ver <string>
3118 Applies to the version string in the HTTP request, eg: "1.0". Some predefined
3119 ACL already check for versions 1.0 and 1.1.
3120
3121path <string>
3122 Returns true when the path part of the request, which starts at the first
3123 slash and ends before the question mark, equals one of the strings. It may be
3124 used to match known files, such as /favicon.ico.
3125
3126path_beg <string>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003127 Returns true when the path begins with one of the strings. This can be used
3128 to send certain directory names to alternative backends.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003129
3130path_end <string>
3131 Returns true when the path ends with one of the strings. This may be used to
3132 control file name extension.
3133
3134path_sub <string>
3135 Returns true when the path contains one of the strings. It can be used to
3136 detect particular patterns in paths, such as "../" for example. See also
3137 "path_dir".
3138
3139path_dir <string>
3140 Returns true when one of the strings is found isolated or delimited with
3141 slashes in the path. This is used to perform filename or directory name
3142 matching without the risk of wrong match due to colliding prefixes. See also
3143 "url_dir" and "path_sub".
3144
3145path_dom <string>
3146 Returns true when one of the strings is found isolated or delimited with dots
3147 in the path. This may be used to perform domain name matching in proxy
3148 requests. See also "path_sub" and "url_dom".
3149
3150path_reg <regex>
3151 Returns true when the path matches one of the regular expressions. It can be
3152 used any time, but it is important to remember that regex matching is slower
3153 than other methods. See also "url_reg" and all "path_" criteria.
3154
3155url <string>
3156 Applies to the whole URL passed in the request. The only real use is to match
3157 "*", for which there already is a predefined ACL.
3158
3159url_beg <string>
3160 Returns true when the URL begins with one of the strings. This can be used to
3161 check whether a URL begins with a slash or with a protocol scheme.
3162
3163url_end <string>
3164 Returns true when the URL ends with one of the strings. It has very limited
3165 use. "path_end" should be used instead for filename matching.
3166
3167url_sub <string>
3168 Returns true when the URL contains one of the strings. It can be used to
3169 detect particular patterns in query strings for example. See also "path_sub".
3170
3171url_dir <string>
3172 Returns true when one of the strings is found isolated or delimited with
3173 slashes in the URL. This is used to perform filename or directory name
3174 matching without the risk of wrong match due to colliding prefixes. See also
3175 "path_dir" and "url_sub".
3176
3177url_dom <string>
3178 Returns true when one of the strings is found isolated or delimited with dots
3179 in the URL. This is used to perform domain name matching without the risk of
3180 wrong match due to colliding prefixes. See also "url_sub".
3181
3182url_reg <regex>
3183 Returns true when the URL matches one of the regular expressions. It can be
3184 used any time, but it is important to remember that regex matching is slower
3185 than other methods. See also "path_reg" and all "url_" criteria.
3186
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01003187url_ip <ip_address>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003188 Applies to the IP address specified in the absolute URI in an HTTP request.
3189 It can be used to prevent access to certain resources such as local network.
Willy Tarreau198a7442008-01-17 12:05:32 +01003190 It is useful with option "http_proxy".
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01003191
3192url_port <integer>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003193 Applies to the port specified in the absolute URI in an HTTP request. It can
3194 be used to prevent access to certain resources. It is useful with option
Willy Tarreau198a7442008-01-17 12:05:32 +01003195 "http_proxy". Note that if the port is not specified in the request, port 80
Willy Tarreau0ba27502007-12-24 16:55:16 +01003196 is assumed.
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01003197
Willy Tarreau6a06a402007-07-15 20:15:28 +02003198hdr <string>
3199hdr(header) <string>
3200 Note: all the "hdr*" matching criteria either apply to all headers, or to a
3201 particular header whose name is passed between parenthesis and without any
Willy Tarreau0ba27502007-12-24 16:55:16 +01003202 space. The header name is not case-sensitive. The header matching complies
3203 with RFC2616, and treats as separate headers all values delimited by commas.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003204
3205 The "hdr" criteria returns true if any of the headers matching the criteria
Willy Tarreau0ba27502007-12-24 16:55:16 +01003206 match any of the strings. This can be used to check exact for values. For
Willy Tarreau6a06a402007-07-15 20:15:28 +02003207 instance, checking that "connection: close" is set :
3208
3209 hdr(Connection) -i close
3210
3211hdr_beg <string>
3212hdr_beg(header) <string>
3213 Returns true when one of the headers begins with one of the strings. See
3214 "hdr" for more information on header matching.
3215
3216hdr_end <string>
3217hdr_end(header) <string>
3218 Returns true when one of the headers ends with one of the strings. See "hdr"
3219 for more information on header matching.
3220
3221hdr_sub <string>
3222hdr_sub(header) <string>
3223 Returns true when one of the headers contains one of the strings. See "hdr"
3224 for more information on header matching.
3225
3226hdr_dir <string>
3227hdr_dir(header) <string>
3228 Returns true when one of the headers contains one of the strings either
3229 isolated or delimited by slashes. This is used to perform filename or
3230 directory name matching, and may be used with Referer. See "hdr" for more
3231 information on header matching.
3232
3233hdr_dom <string>
3234hdr_dom(header) <string>
3235 Returns true when one of the headers contains one of the strings either
3236 isolated or delimited by dots. This is used to perform domain name matching,
3237 and may be used with the Host header. See "hdr" for more information on
3238 header matching.
3239
3240hdr_reg <regex>
3241hdr_reg(header) <regex>
3242 Returns true when one of the headers matches of the regular expressions. It
3243 can be used at any time, but it is important to remember that regex matching
3244 is slower than other methods. See also other "hdr_" criteria, as well as
3245 "hdr" for more information on header matching.
3246
3247hdr_val <integer>
3248hdr_val(header) <integer>
3249 Returns true when one of the headers starts with a number which matches the
3250 values or ranges specified. This may be used to limit content-length to
3251 acceptable values for example. See "hdr" for more information on header
3252 matching.
3253
3254hdr_cnt <integer>
3255hdr_cnt(header) <integer>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003256 Returns true when the number of occurrence of the specified header matches
3257 the values or ranges specified. It is important to remember that one header
3258 line may count as several headers if it has several values. This is used to
3259 detect presence, absence or abuse of a specific header, as well as to block
3260 request smugling attacks by rejecting requests which contain more than one
3261 of certain headers. See "hdr" for more information on header matching.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003262
3263
Willy Tarreau0ba27502007-12-24 16:55:16 +010032642.3.6) Pre-defined ACLs
Willy Tarreau6a06a402007-07-15 20:15:28 +02003265-----------------------
3266
3267Some predefined ACLs are hard-coded so that they do not have to be declared in
3268every frontend which needs them. They all have their names in upper case in
Willy Tarreau0ba27502007-12-24 16:55:16 +01003269order to avoid confusion. Their equivalence is provided below. Please note that
3270only the first three ones are not layer 7 based.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003271
3272ACL name Equivalent to Usage
3273---------------+-----------------------------+---------------------------------
3274TRUE always_true 1 always match
3275FALSE always_false 0 never match
3276LOCALHOST src 127.0.0.1/8 match connection from local host
3277HTTP_1.0 req_ver 1.0 match HTTP version 1.0
3278HTTP_1.1 req_ver 1.1 match HTTP version 1.1
3279METH_CONNECT method CONNECT match HTTP CONNECT method
3280METH_GET method GET HEAD match HTTP GET or HEAD method
3281METH_HEAD method HEAD match HTTP HEAD method
3282METH_OPTIONS method OPTIONS match HTTP OPTIONS method
3283METH_POST method POST match HTTP POST method
3284METH_TRACE method TRACE match HTTP TRACE method
3285HTTP_URL_ABS url_reg ^[^/:]*:// match absolute URL with scheme
3286HTTP_URL_SLASH url_beg / match URL begining with "/"
3287HTTP_URL_STAR url * match URL equal to "*"
3288HTTP_CONTENT hdr_val(content-length) gt 0 match an existing content-length
3289---------------+-----------------------------+---------------------------------
3290
3291
Willy Tarreau0ba27502007-12-24 16:55:16 +010032922.3.7) Using ACLs to form conditions
Willy Tarreau6a06a402007-07-15 20:15:28 +02003293------------------------------------
3294
3295Some actions are only performed upon a valid condition. A condition is a
3296combination of ACLs with operators. 3 operators are supported :
3297
3298 - AND (implicit)
3299 - OR (explicit with the "or" keyword or the "||" operator)
3300 - Negation with the exclamation mark ("!")
3301
3302A condition is formed as a disjonctive form :
3303
3304 [!]acl1 [!]acl2 ... [!]acln { or [!]acl1 [!]acl2 ... [!]acln } ...
3305
3306Such conditions are generally used after an "if" or "unless" statement,
3307indicating when the condition will trigger the action.
3308
3309For instance, to block HTTP requests to the "*" URL with methods other than
Willy Tarreau0ba27502007-12-24 16:55:16 +01003310"OPTIONS", as well as POST requests without content-length, and GET or HEAD
3311requests with a content-length greater than 0, and finally every request which
3312is not either GET/HEAD/POST/OPTIONS !
Willy Tarreau6a06a402007-07-15 20:15:28 +02003313
3314 acl missing_cl hdr_cnt(Content-length) eq 0
3315 block if HTTP_URL_STAR !METH_OPTIONS || METH_POST missing_cl
3316 block if METH_GET HTTP_CONTENT
3317 block unless METH_GET or METH_POST or METH_OPTIONS
3318
3319To select a different backend for requests to static contents on the "www" site
3320and to every request on the "img", "video", "download" and "ftp" hosts :
3321
3322 acl url_static path_beg /static /images /img /css
3323 acl url_static path_end .gif .png .jpg .css .js
3324 acl host_www hdr_beg(host) -i www
3325 acl host_static hdr_beg(host) -i img. video. download. ftp.
3326
3327 # now use backend "static" for all static-only hosts, and for static urls
3328 # of host "www". Use backend "www" for the rest.
3329 use_backend static if host_static or host_www url_static
3330 use_backend www if host_www
3331
Willy Tarreau844e3c52008-01-11 16:28:18 +01003332See section 2.2 for detailed help on the "block" and "use_backend" keywords.
Willy Tarreaudbc36f62007-11-30 12:29:11 +01003333
3334
Willy Tarreauc7246fc2007-12-02 17:31:20 +010033352.4) Server options
Willy Tarreau5764b382007-11-30 17:46:49 +01003336-------------------
3337
Willy Tarreau198a7442008-01-17 12:05:32 +01003338The "server" keyword supports a certain number of settings which are all passed
3339as arguments on the server line. The order in which those arguments appear does
3340not count, and they are all optional. Some of those settings are single words
3341(booleans) while others expect one or several values after them. In this case,
3342the values must immediately follow the setting name. All those settings must be
3343specified after the server's address if they are used :
3344
3345 server <name> <address>[:port] [settings ...]
3346
3347The currently supported settings are the following ones.
3348
3349addr <ipv4>
3350 Using the "addr" parameter, it becomes possible to use a different IP address
3351 to send health-checks. On some servers, it may be desirable to dedicate an IP
3352 address to specific component able to perform complex tests which are more
3353 suitable to health-checks than the application. This parameter is ignored if
3354 the "check" parameter is not set. See also the "port" parameter.
3355
3356backup
3357 When "backup" is present on a server line, the server is only used in load
3358 balancing when all other non-backup servers are unavailable. Requests coming
3359 with a persistence cookie referencing the server will always be served
3360 though. By default, only the first operational backup server is used, unless
3361 the "useallbackup" option is set in the backend. See also the "useallbackup"
3362 option.
3363
3364check
3365 This option enables health checks on the server. By default, a server is
3366 always considered available. If "check" is set, the server will receive
3367 periodic health checks to ensure that it is really able to serve requests.
3368 The default address and port to send the tests to are those of the server,
3369 and the default source is the same as the one defined in the backend. It is
3370 possible to change the address using the "addr" parameter, the port using the
3371 "port" parameter, the source address using the "source" address, and the
3372 interval and timers using the "inter", "rise" and "fall" parameters. The
3373 request method is define in the backend using the "httpchk", "smtpchk",
3374 and "ssl-hello-chk" options. Please refer to those options and parameters for
3375 more information.
3376
3377cookie <value>
3378 The "cookie" parameter sets the cookie value assigned to the server to
3379 <value>. This value will be checked in incoming requests, and the first
3380 operational server possessing the same value will be selected. In return, in
3381 cookie insertion or rewrite modes, this value will be assigned to the cookie
3382 sent to the client. There is nothing wrong in having several servers sharing
3383 the same cookie value, and it is in fact somewhat common between normal and
3384 backup servers. See also the "cookie" keyword in backend section.
3385
3386fall <count>
3387 The "fall" parameter states that a server will be considered as dead after
3388 <count> consecutive unsuccessful health checks. This value defaults to 3 if
3389 unspecified. See also the "check", "inter" and "rise" parameters.
3390
3391inter <delay>
3392 The "inter" parameter sets the interval between two consecutive health checks
3393 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
3394 Just as with every other time-based parameter, it can be entered in any other
3395 explicit unit among { us, ms, s, m, h, d }. This parameter also serves as a
3396 timeout for health checks sent to servers. In order to reduce "resonance"
3397 effects when multiple servers are hosted on the same hardware, the
3398 health-checks of all servers are started with a small time offset between
3399 them. It is also possible to add some random noise in the health checks
3400 interval using the global "spread-checks" keyword. This makes sense for
3401 instance when a lot of backends use the same servers.
3402
3403maxconn <maxconn>
3404 The "maxconn" parameter specifies the maximal number of concurrent
3405 connections that will be sent to this server. If the number of incoming
3406 concurrent requests goes higher than this value, they will be queued, waiting
3407 for a connection to be released. This parameter is very important as it can
3408 save fragile servers from going down under extreme loads. If a "minconn"
3409 parameter is specified, the limit becomes dynamic. The default value is "0"
3410 which means unlimited. See also the "minconn" and "maxqueue" parameters, and
3411 the backend's "fullconn" keyword.
3412
3413maxqueue <maxqueue>
3414 The "maxqueue" parameter specifies the maximal number of connections which
3415 will wait in the queue for this server. If this limit is reached, next
3416 requests will be redispatched to other servers instead of indefinitely
3417 waiting to be served. This will break persistence but may allow people to
3418 quickly re-log in when the server they try to connect to is dying. The
3419 default value is "0" which means the queue is unlimited. See also the
3420 "maxconn" and "minconn" parameters.
3421
3422minconn <minconn>
3423 When the "minconn" parameter is set, the maxconn limit becomes a dynamic
3424 limit following the backend's load. The server will always accept at least
3425 <minconn> connections, never more than <maxconn>, and the limit will be on
3426 the ramp between both values when the backend has less than <fullconn>
3427 concurrent connections. This makes it possible to limit the load on the
3428 server during normal loads, but push it further for important loads without
3429 overloading the server during exceptionnal loads. See also the "maxconn"
3430 and "maxqueue" parameters, as well as the "fullconn" backend keyword.
3431
3432port <port>
3433 Using the "port" parameter, it becomes possible to use a different port to
3434 send health-checks. On some servers, it may be desirable to dedicate a port
3435 to a specific component able to perform complex tests which are more suitable
3436 to health-checks than the application. It is common to run a simple script in
3437 inetd for instance. This parameter is ignored if the "check" parameter is not
3438 set. See also the "addr" parameter.
3439
3440rise <count>
3441 The "rise" parameter states that a server will be considered as operational
3442 after <count> consecutive successful health checks. This value defaults to 2
3443 if unspecified. See also the "check", "inter" and "fall" parameters.
3444
Willy Tarreau5764b382007-11-30 17:46:49 +01003445slowstart <start_time_in_ms>
Willy Tarreau198a7442008-01-17 12:05:32 +01003446 The "slowstart" parameter for a server accepts a value in milliseconds which
Willy Tarreau5764b382007-11-30 17:46:49 +01003447 indicates after how long a server which has just come back up will run at
Willy Tarreaubefdff12007-12-02 22:27:38 +01003448 full speed. Just as with every other time-based parameter, it can be entered
3449 in any other explicit unit among { us, ms, s, m, h, d }. The speed grows
3450 linearly from 0 to 100% during this time. The limitation applies to two
3451 parameters :
Willy Tarreau5764b382007-11-30 17:46:49 +01003452
3453 - maxconn: the number of connections accepted by the server will grow from 1
3454 to 100% of the usual dynamic limit defined by (minconn,maxconn,fullconn).
3455
3456 - weight: when the backend uses a dynamic weighted algorithm, the weight
3457 grows linearly from 1 to 100%. In this case, the weight is updated at every
Willy Tarreau198a7442008-01-17 12:05:32 +01003458 health-check. For this reason, it is important that the "inter" parameter
3459 is smaller than the "slowstart", in order to maximize the number of steps.
Willy Tarreau5764b382007-11-30 17:46:49 +01003460
3461 The slowstart never applies when haproxy starts, otherwise it would cause
3462 trouble to running servers. It only applies when a server has been previously
3463 seen as failed.
3464
Willy Tarreau198a7442008-01-17 12:05:32 +01003465source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
3466 The "source" parameter sets the source address which will be used when
3467 connecting to the server. It follows the exact same parameters and principle
3468 as the backend "source" keyword, except that it only applies to the server
3469 referencing it. Please consult the "source" keyword for details.
3470
3471weight <weight>
3472 The "weight" parameter is used to adjust the server's weight relative to
3473 other servers. All servers will receive a load proportional to their weight
3474 relative to the sum of all weights, so the higher the weight, the higher the
3475 load. The default weight is 1, and the maximal value is 255. If this
3476 parameter is used to distribute the load according to server's capacity, it
3477 is recommended to start with values which can both grow and shrink, for
3478 instance between 10 and 100 to leave enough room above and below for later
3479 adjustments.
3480
Willy Tarreau5764b382007-11-30 17:46:49 +01003481
Willy Tarreau844e3c52008-01-11 16:28:18 +010034822.5) Logging
3483------------
3484
3485[to do]
3486
3487
Willy Tarreau0ba27502007-12-24 16:55:16 +01003488/*
3489 * Local variables:
3490 * fill-column: 79
3491 * End:
3492 */