From Voluminous Camel, 12 Years ago, written in Plain Text.
Embed
  1.                          ----------------------
  2.                                  HAProxy
  3.                           Configuration Manual
  4.                          ----------------------
  5.                              version 1.4.22
  6.                              willy tarreau
  7.                                2012/08/14
  8.  
  9.  
  10. This document covers the configuration language as implemented in the version
  11. specified above. It does not provide any hint, example or advice. For such
  12. documentation, please refer to the Reference Manual or the Architecture Manual.
  13. The summary below is meant to help you search sections by name and navigate
  14. through the document.
  15.  
  16. Note to documentation contributors :
  17.     This document is formated with 80 columns per line, with even number of
  18.     spaces for indentation and without tabs. Please follow these rules strictly
  19.     so that it remains easily printable everywhere. If a line needs to be
  20.     printed verbatim and does not fit, please end each line with a backslash
  21.     ('\') and continue on next line. If you add sections, please update the
  22.     summary below for easier searching.
  23.  
  24.  
  25. Summary
  26. -------
  27.  
  28. 1.    Quick reminder about HTTP
  29. 1.1.      The HTTP transaction model
  30. 1.2.      HTTP request
  31. 1.2.1.        The Request line
  32. 1.2.2.        The request headers
  33. 1.3.      HTTP response
  34. 1.3.1.        The Response line
  35. 1.3.2.        The response headers
  36.  
  37. 2.    Configuring HAProxy
  38. 2.1.      Configuration file format
  39. 2.2.      Time format
  40. 2.3.      Examples
  41.  
  42. 3.    Global parameters
  43. 3.1.      Process management and security
  44. 3.2.      Performance tuning
  45. 3.3.      Debugging
  46. 3.4.      Userlists
  47.  
  48. 4.    Proxies
  49. 4.1.      Proxy keywords matrix
  50. 4.2.      Alphabetically sorted keywords reference
  51.  
  52. 5.    Server and default-server options
  53.  
  54. 6.    HTTP header manipulation
  55.  
  56. 7.    Using ACLs and pattern extraction
  57. 7.1.      Matching integers
  58. 7.2.      Matching strings
  59. 7.3.      Matching regular expressions (regexes)
  60. 7.4.      Matching IPv4 addresses
  61. 7.5.      Available matching criteria
  62. 7.5.1.        Matching at Layer 4 and below
  63. 7.5.2.        Matching contents at Layer 4
  64. 7.5.3.        Matching at Layer 7
  65. 7.6.      Pre-defined ACLs
  66. 7.7.      Using ACLs to form conditions
  67. 7.8.      Pattern extraction
  68.  
  69. 8.    Logging
  70. 8.1.      Log levels
  71. 8.2.      Log formats
  72. 8.2.1.        Default log format
  73. 8.2.2.        TCP log format
  74. 8.2.3.        HTTP log format
  75. 8.3.      Advanced logging options
  76. 8.3.1.        Disabling logging of external tests
  77. 8.3.2.        Logging before waiting for the session to terminate
  78. 8.3.3.        Raising log level upon errors
  79. 8.3.4.        Disabling logging of successful connections
  80. 8.4.      Timing events
  81. 8.5.      Session state at disconnection
  82. 8.6.      Non-printable characters
  83. 8.7.      Capturing HTTP cookies
  84. 8.8.      Capturing HTTP headers
  85. 8.9.      Examples of logs
  86.  
  87. 9.    Statistics and monitoring
  88. 9.1.      CSV format
  89. 9.2.      Unix Socket commands
  90.  
  91.  
  92. 1. Quick reminder about HTTP
  93. ----------------------------
  94.  
  95. When haproxy is running in HTTP mode, both the request and the response are
  96. fully analyzed and indexed, thus it becomes possible to build matching criteria
  97. on almost anything found in the contents.
  98.  
  99. However, it is important to understand how HTTP requests and responses are
  100. formed, and how HAProxy decomposes them. It will then become easier to write
  101. correct rules and to debug existing configurations.
  102.  
  103.  
  104. 1.1. The HTTP transaction model
  105. -------------------------------
  106.  
  107. The HTTP protocol is transaction-driven. This means that each request will lead
  108. to one and only one response. Traditionally, a TCP connection is established
  109. from the client to the server, a request is sent by the client on the
  110. connection, the server responds and the connection is closed. A new request
  111. will involve a new connection :
  112.  
  113.   [CON1] [REQ1] ... [RESP1] [CLO1] [CON2] [REQ2] ... [RESP2] [CLO2] ...
  114.  
  115. In this mode, called the "HTTP close" mode, there are as many connection
  116. establishments as there are HTTP transactions. Since the connection is closed
  117. by the server after the response, the client does not need to know the content
  118. length.
  119.  
  120. Due to the transactional nature of the protocol, it was possible to improve it
  121. to avoid closing a connection between two subsequent transactions. In this mode
  122. however, it is mandatory that the server indicates the content length for each
  123. response so that the client does not wait indefinitely. For this, a special
  124. header is used: "Content-length". This mode is called the "keep-alive" mode :
  125.  
  126.   [CON] [REQ1] ... [RESP1] [REQ2] ... [RESP2] [CLO] ...
  127.  
  128. Its advantages are a reduced latency between transactions, and less processing
  129. power required on the server side. It is generally better than the close mode,
  130. but not always because the clients often limit their concurrent connections to
  131. a smaller value.
  132.  
  133. A last improvement in the communications is the pipelining mode. It still uses
  134. keep-alive, but the client does not wait for the first response to send the
  135. second request. This is useful for fetching large number of images composing a
  136. page :
  137.  
  138.   [CON] [REQ1] [REQ2] ... [RESP1] [RESP2] [CLO] ...
  139.  
  140. This can obviously have a tremendous benefit on performance because the network
  141. latency is eliminated between subsequent requests. Many HTTP agents do not
  142. correctly support pipelining since there is no way to associate a response with
  143. the corresponding request in HTTP. For this reason, it is mandatory for the
  144. server to reply in the exact same order as the requests were received.
  145.  
  146. By default HAProxy operates in a tunnel-like mode with regards to persistent
  147. connections: for each connection it processes the first request and forwards
  148. everything else (including additional requests) to selected server. Once
  149. established, the connection is persisted both on the client and server
  150. sides. Use "option http-server-close" to preserve client persistent connections
  151. while handling every incoming request individually, dispatching them one after
  152. another to servers, in HTTP close mode. Use "option httpclose" to switch both
  153. sides to HTTP close mode. "option forceclose" and "option
  154. http-pretend-keepalive" help working around servers misbehaving in HTTP close
  155. mode.
  156.  
  157.  
  158. 1.2. HTTP request
  159. -----------------
  160.  
  161. First, let's consider this HTTP request :
  162.  
  163.   Line     Contents
  164.   number
  165.      1     GET /serv/login.php?lang=en&profile=2 HTTP/1.1
  166.      2     Host: www.mydomain.com
  167.      3     User-agent: my small browser
  168.      4     Accept: image/jpeg, image/gif
  169.      5     Accept: image/png
  170.  
  171.  
  172. 1.2.1. The Request line
  173. -----------------------
  174.  
  175. Line 1 is the "request line". It is always composed of 3 fields :
  176.  
  177.   - a METHOD      : GET
  178.   - a URI         : /serv/login.php?lang=en&profile=2
  179.   - a version tag : HTTP/1.1
  180.  
  181. All of them are delimited by what the standard calls LWS (linear white spaces),
  182. which are commonly spaces, but can also be tabs or line feeds/carriage returns
  183. followed by spaces/tabs. The method itself cannot contain any colon (':') and
  184. is limited to alphabetic letters. All those various combinations make it
  185. desirable that HAProxy performs the splitting itself rather than leaving it to
  186. the user to write a complex or inaccurate regular expression.
  187.  
  188. The URI itself can have several forms :
  189.  
  190.   - A "relative URI" :
  191.  
  192.       /serv/login.php?lang=en&profile=2
  193.  
  194.     It is a complete URL without the host part. This is generally what is
  195.     received by servers, reverse proxies and transparent proxies.
  196.  
  197.   - An "absolute URI", also called a "URL" :
  198.  
  199.       http://192.168.0.12:8080/serv/login.php?lang=en&profile=2
  200.  
  201.     It is composed of a "scheme" (the protocol name followed by '://'), a host
  202.     name or address, optionally a colon (':') followed by a port number, then
  203.     a relative URI beginning at the first slash ('/') after the address part.
  204.     This is generally what proxies receive, but a server supporting HTTP/1.1
  205.     must accept this form too.
  206.  
  207.   - a star ('*') : this form is only accepted in association with the OPTIONS
  208.     method and is not relayable. It is used to inquiry a next hop's
  209.     capabilities.
  210.  
  211.   - an address:port combination : 192.168.0.12:80
  212.     This is used with the CONNECT method, which is used to establish TCP
  213.     tunnels through HTTP proxies, generally for HTTPS, but sometimes for
  214.     other protocols too.
  215.  
  216. In a relative URI, two sub-parts are identified. The part before the question
  217. mark is called the "path". It is typically the relative path to static objects
  218. on the server. The part after the question mark is called the "query string".
  219. It is mostly used with GET requests sent to dynamic scripts and is very
  220. specific to the language, framework or application in use.
  221.  
  222.  
  223. 1.2.2. The request headers
  224. --------------------------
  225.  
  226. The headers start at the second line. They are composed of a name at the
  227. beginning of the line, immediately followed by a colon (':'). Traditionally,
  228. an LWS is added after the colon but that's not required. Then come the values.
  229. Multiple identical headers may be folded into one single line, delimiting the
  230. values with commas, provided that their order is respected. This is commonly
  231. encountered in the "Cookie:" field. A header may span over multiple lines if
  232. the subsequent lines begin with an LWS. In the example in 1.2, lines 4 and 5
  233. define a total of 3 values for the "Accept:" header.
  234.  
  235. Contrary to a common mis-conception, header names are not case-sensitive, and
  236. their values are not either if they refer to other header names (such as the
  237. "Connection:" header).
  238.  
  239. The end of the headers is indicated by the first empty line. People often say
  240. that it's a double line feed, which is not exact, even if a double line feed
  241. is one valid form of empty line.
  242.  
  243. Fortunately, HAProxy takes care of all these complex combinations when indexing
  244. headers, checking values and counting them, so there is no reason to worry
  245. about the way they could be written, but it is important not to accuse an
  246. application of being buggy if it does unusual, valid things.
  247.  
  248. Important note:
  249.    As suggested by RFC2616, HAProxy normalizes headers by replacing line breaks
  250.    in the middle of headers by LWS in order to join multi-line headers. This
  251.    is necessary for proper analysis and helps less capable HTTP parsers to work
  252.    correctly and not to be fooled by such complex constructs.
  253.  
  254.  
  255. 1.3. HTTP response
  256. ------------------
  257.  
  258. An HTTP response looks very much like an HTTP request. Both are called HTTP
  259. messages. Let's consider this HTTP response :
  260.  
  261.   Line     Contents
  262.   number
  263.      1     HTTP/1.1 200 OK
  264.      2     Content-length: 350
  265.      3     Content-Type: text/html
  266.  
  267. As a special case, HTTP supports so called "Informational responses" as status
  268. codes 1xx. These messages are special in that they don't convey any part of the
  269. response, they're just used as sort of a signaling message to ask a client to
  270. continue to post its request for instance. In the case of a status 100 response
  271. the requested information will be carried by the next non-100 response message
  272. following the informational one. This implies that multiple responses may be
  273. sent to a single request, and that this only works when keep-alive is enabled
  274. (1xx messages are HTTP/1.1 only). HAProxy handles these messages and is able to
  275. correctly forward and skip them, and only process the next non-100 response. As
  276. such, these messages are neither logged nor transformed, unless explicitly
  277. state otherwise. Status 101 messages indicate that the protocol is changing
  278. over the same connection and that haproxy must switch to tunnel mode, just as
  279. if a CONNECT had occurred. Then the Upgrade header would contain additional
  280. information about the type of protocol the connection is switching to.
  281.  
  282.  
  283. 1.3.1. The Response line
  284. ------------------------
  285.  
  286. Line 1 is the "response line". It is always composed of 3 fields :
  287.  
  288.   - a version tag : HTTP/1.1
  289.   - a status code : 200
  290.   - a reason      : OK
  291.  
  292. The status code is always 3-digit. The first digit indicates a general status :
  293.  - 1xx = informational message to be skipped (eg: 100, 101)
  294.  - 2xx = OK, content is following   (eg: 200, 206)
  295.  - 3xx = OK, no content following   (eg: 302, 304)
  296.  - 4xx = error caused by the client (eg: 401, 403, 404)
  297.  - 5xx = error caused by the server (eg: 500, 502, 503)
  298.  
  299. Please refer to RFC2616 for the detailed meaning of all such codes. The
  300. "reason" field is just a hint, but is not parsed by clients. Anything can be
  301. found there, but it's a common practice to respect the well-established
  302. messages. It can be composed of one or multiple words, such as "OK", "Found",
  303. or "Authentication Required".
  304.  
  305. Haproxy may emit the following status codes by itself :
  306.  
  307.   Code  When / reason
  308.    200  access to stats page, and when replying to monitoring requests
  309.    301  when performing a redirection, depending on the configured code
  310.    302  when performing a redirection, depending on the configured code
  311.    303  when performing a redirection, depending on the configured code
  312.    400  for an invalid or too large request
  313.    401  when an authentication is required to perform the action (when
  314.         accessing the stats page)
  315.    403  when a request is forbidden by a "block" ACL or "reqdeny" filter
  316.    408  when the request timeout strikes before the request is complete
  317.    500  when haproxy encounters an unrecoverable internal error, such as a
  318.         memory allocation failure, which should never happen
  319.    502  when the server returns an empty, invalid or incomplete response, or
  320.         when an "rspdeny" filter blocks the response.
  321.    503  when no server was available to handle the request, or in response to
  322.         monitoring requests which match the "monitor fail" condition
  323.    504  when the response timeout strikes before the server responds
  324.  
  325. The error 4xx and 5xx codes above may be customized (see "errorloc" in section
  326. 4.2).
  327.  
  328.  
  329. 1.3.2. The response headers
  330. ---------------------------
  331.  
  332. Response headers work exactly like request headers, and as such, HAProxy uses
  333. the same parsing function for both. Please refer to paragraph 1.2.2 for more
  334. details.
  335.  
  336.  
  337. 2. Configuring HAProxy
  338. ----------------------
  339.  
  340. 2.1. Configuration file format
  341. ------------------------------
  342.  
  343. HAProxy's configuration process involves 3 major sources of parameters :
  344.  
  345.   - the arguments from the command-line, which always take precedence
  346.   - the "global" section, which sets process-wide parameters
  347.   - the proxies sections which can take form of "defaults", "listen",
  348.     "frontend" and "backend".
  349.  
  350. The configuration file syntax consists in lines beginning with a keyword
  351. referenced in this manual, optionally followed by one or several parameters
  352. delimited by spaces. If spaces have to be entered in strings, then they must be
  353. preceded by a backslash ('\') to be escaped. Backslashes also have to be
  354. escaped by doubling them.
  355.  
  356.  
  357. 2.2. Time format
  358. ----------------
  359.  
  360. Some parameters involve values representing time, such as timeouts. These
  361. values are generally expressed in milliseconds (unless explicitly stated
  362. otherwise) but may be expressed in any other unit by suffixing the unit to the
  363. numeric value. It is important to consider this because it will not be repeated
  364. for every keyword. Supported units are :
  365.  
  366.   - us : microseconds. 1 microsecond = 1/1000000 second
  367.   - ms : milliseconds. 1 millisecond = 1/1000 second. This is the default.
  368.   - s  : seconds. 1s = 1000ms
  369.   - m  : minutes. 1m = 60s = 60000ms
  370.   - h  : hours.   1h = 60m = 3600s = 3600000ms
  371.   - d  : days.    1d = 24h = 1440m = 86400s = 86400000ms
  372.  
  373.  
  374. 2.3. Examples
  375. -------------
  376.  
  377.     # Simple configuration for an HTTP proxy listening on port 80 on all
  378.     # interfaces and forwarding requests to a single backend "servers" with a
  379.     # single server "server1" listening on 127.0.0.1:8000
  380.     global
  381.         daemon
  382.         maxconn 256
  383.  
  384.     defaults
  385.         mode http
  386.         timeout connect 5000ms
  387.         timeout client 50000ms
  388.         timeout server 50000ms
  389.  
  390.     frontend http-in
  391.         bind *:80
  392.         default_backend servers
  393.  
  394.     backend servers
  395.         server server1 127.0.0.1:8000 maxconn 32
  396.  
  397.  
  398.     # The same configuration defined with a single listen block. Shorter but
  399.     # less expressive, especially in HTTP mode.
  400.     global
  401.         daemon
  402.         maxconn 256
  403.  
  404.     defaults
  405.         mode http
  406.         timeout connect 5000ms
  407.         timeout client 50000ms
  408.         timeout server 50000ms
  409.  
  410.     listen http-in
  411.         bind *:80
  412.         server server1 127.0.0.1:8000 maxconn 32
  413.  
  414.  
  415. Assuming haproxy is in $PATH, test these configurations in a shell with:
  416.  
  417.     $ sudo haproxy -f configuration.conf -c
  418.  
  419.  
  420. 3. Global parameters
  421. --------------------
  422.  
  423. Parameters in the "global" section are process-wide and often OS-specific. They
  424. are generally set once for all and do not need being changed once correct. Some
  425. of them have command-line equivalents.
  426.  
  427. The following keywords are supported in the "global" section :
  428.  
  429.  * Process management and security
  430.    - chroot
  431.    - daemon
  432.    - gid
  433.    - group
  434.    - log
  435.    - log-send-hostname
  436.    - nbproc
  437.    - pidfile
  438.    - uid
  439.    - ulimit-n
  440.    - user
  441.    - stats
  442.    - node
  443.    - description
  444.  
  445.  * Performance tuning
  446.    - maxconn
  447.    - maxpipes
  448.    - noepoll
  449.    - nokqueue
  450.    - nopoll
  451.    - nosepoll
  452.    - nosplice
  453.    - spread-checks
  454.    - tune.bufsize
  455.    - tune.chksize
  456.    - tune.maxaccept
  457.    - tune.maxpollevents
  458.    - tune.maxrewrite
  459.    - tune.rcvbuf.client
  460.    - tune.rcvbuf.server
  461.    - tune.sndbuf.client
  462.    - tune.sndbuf.server
  463.  
  464.  * Debugging
  465.    - debug
  466.    - quiet
  467.  
  468.  
  469. 3.1. Process management and security
  470. ------------------------------------
  471.  
  472. chroot <jail dir>
  473.   Changes current directory to <jail dir> and performs a chroot() there before
  474.   dropping privileges. This increases the security level in case an unknown
  475.   vulnerability would be exploited, since it would make it very hard for the
  476.   attacker to exploit the system. This only works when the process is started
  477.   with superuser privileges. It is important to ensure that <jail_dir> is both
  478.   empty and unwritable to anyone.
  479.  
  480. daemon
  481.   Makes the process fork into background. This is the recommended mode of
  482.   operation. It is equivalent to the command line "-D" argument. It can be
  483.   disabled by the command line "-db" argument.
  484.  
  485. gid <number>
  486.   Changes the process' group ID to <number>. It is recommended that the group
  487.   ID is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
  488.   be started with a user belonging to this group, or with superuser privileges.
  489.   See also "group" and "uid".
  490.  
  491. group <group name>
  492.   Similar to "gid" but uses the GID of group name <group name> from /etc/group.
  493.   See also "gid" and "user".
  494.  
  495. log <address> <facility> [max level [min level]]
  496.   Adds a global syslog server. Up to two global servers can be defined. They
  497.   will receive logs for startups and exits, as well as all logs from proxies
  498.   configured with "log global".
  499.  
  500.   <address> can be one of:
  501.  
  502.         - An IPv4 address optionally followed by a colon and a UDP port. If
  503.           no port is specified, 514 is used by default (the standard syslog
  504.           port).
  505.  
  506.         - A filesystem path to a UNIX domain socket, keeping in mind
  507.           considerations for chroot (be sure the path is accessible inside
  508.           the chroot) and uid/gid (be sure the path is appropriately
  509.           writeable).
  510.  
  511.   <facility> must be one of the 24 standard syslog facilities :
  512.  
  513.           kern   user   mail   daemon auth   syslog lpr    news
  514.           uucp   cron   auth2  ftp    ntp    audit  alert  cron2
  515.           local0 local1 local2 local3 local4 local5 local6 local7
  516.  
  517.   An optional level can be specified to filter outgoing messages. By default,
  518.   all messages are sent. If a maximum level is specified, only messages with a
  519.   severity at least as important as this level will be sent. An optional minimum
  520.   level can be specified. If it is set, logs emitted with a more severe level
  521.   than this one will be capped to this level. This is used to avoid sending
  522.   "emerg" messages on all terminals on some default syslog configurations.
  523.   Eight levels are known :
  524.  
  525.           emerg  alert  crit   err    warning notice info  debug
  526.  
  527. log-send-hostname [<string>]
  528.   Sets the hostname field in the syslog header. If optional "string" parameter
  529.   is set the header is set to the string contents, otherwise uses the hostname
  530.   of the system. Generally used if one is not relaying logs through an
  531.   intermediate syslog server or for simply customizing the hostname printed in
  532.   the logs.
  533.  
  534. log-tag <string>
  535.   Sets the tag field in the syslog header to this string. It defaults to the
  536.   program name as launched from the command line, which usually is "haproxy".
  537.   Sometimes it can be useful to differentiate between multiple processes
  538.   running on the same host.
  539.  
  540. nbproc <number>
  541.   Creates <number> processes when going daemon. This requires the "daemon"
  542.   mode. By default, only one process is created, which is the recommended mode
  543.   of operation. For systems limited to small sets of file descriptors per
  544.   process, it may be needed to fork multiple daemons. USING MULTIPLE PROCESSES
  545.   IS HARDER TO DEBUG AND IS REALLY DISCOURAGED. See also "daemon".
  546.  
  547. pidfile <pidfile>
  548.   Writes pids of all daemons into file <pidfile>. This option is equivalent to
  549.   the "-p" command line argument. The file must be accessible to the user
  550.   starting the process. See also "daemon".
  551.  
  552. stats socket <path> [{uid | user} <uid>] [{gid | group} <gid>] [mode <mode>]
  553.              [level <level>]
  554.  
  555.   Creates a UNIX socket in stream mode at location <path>. Any previously
  556.   existing socket will be backed up then replaced. Connections to this socket
  557.   will return various statistics outputs and even allow some commands to be
  558.   issued. Please consult section 9.2 "Unix Socket commands" for more details.
  559.  
  560.   An optional "level" parameter can be specified to restrict the nature of
  561.   the commands that can be issued on the socket :
  562.     - "user" is the least privileged level ; only non-sensitive stats can be
  563.       read, and no change is allowed. It would make sense on systems where it
  564.       is not easy to restrict access to the socket.
  565.  
  566.     - "operator" is the default level and fits most common uses. All data can
  567.       be read, and only non-sensitive changes are permitted (eg: clear max
  568.       counters).
  569.  
  570.     - "admin" should be used with care, as everything is permitted (eg: clear
  571.       all counters).
  572.  
  573.   On platforms which support it, it is possible to restrict access to this
  574.   socket by specifying numerical IDs after "uid" and "gid", or valid user and
  575.   group names after the "user" and "group" keywords. It is also possible to
  576.   restrict permissions on the socket by passing an octal value after the "mode"
  577.   keyword (same syntax as chmod). Depending on the platform, the permissions on
  578.   the socket will be inherited from the directory which hosts it, or from the
  579.   user the process is started with.
  580.  
  581. stats timeout <timeout, in milliseconds>
  582.   The default timeout on the stats socket is set to 10 seconds. It is possible
  583.   to change this value with "stats timeout". The value must be passed in
  584.   milliseconds, or be suffixed by a time unit among { us, ms, s, m, h, d }.
  585.  
  586. stats maxconn <connections>
  587.   By default, the stats socket is limited to 10 concurrent connections. It is
  588.   possible to change this value with "stats maxconn".
  589.  
  590. uid <number>
  591.   Changes the process' user ID to <number>. It is recommended that the user ID
  592.   is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
  593.   be started with superuser privileges in order to be able to switch to another
  594.   one. See also "gid" and "user".
  595.  
  596. ulimit-n <number>
  597.   Sets the maximum number of per-process file-descriptors to <number>. By
  598.   default, it is automatically computed, so it is recommended not to use this
  599.   option.
  600.  
  601. user <user name>
  602.   Similar to "uid" but uses the UID of user name <user name> from /etc/passwd.
  603.   See also "uid" and "group".
  604.  
  605. node <name>
  606.   Only letters, digits, hyphen and underscore are allowed, like in DNS names.
  607.  
  608.   This statement is useful in HA configurations where two or more processes or
  609.   servers share the same IP address. By setting a different node-name on all
  610.   nodes, it becomes easy to immediately spot what server is handling the
  611.   traffic.
  612.  
  613. description <text>
  614.   Add a text that describes the instance.
  615.  
  616.   Please note that it is required to escape certain characters (# for example)
  617.   and this text is inserted into a html page so you should avoid using
  618.   "<" and ">" characters.
  619.  
  620.  
  621. 3.2. Performance tuning
  622. -----------------------
  623.  
  624. maxconn <number>
  625.   Sets the maximum per-process number of concurrent connections to <number>. It
  626.   is equivalent to the command-line argument "-n". Proxies will stop accepting
  627.   connections when this limit is reached. The "ulimit-n" parameter is
  628.   automatically adjusted according to this value. See also "ulimit-n".
  629.  
  630. maxpipes <number>
  631.   Sets the maximum per-process number of pipes to <number>. Currently, pipes
  632.   are only used by kernel-based tcp splicing. Since a pipe contains two file
  633.   descriptors, the "ulimit-n" value will be increased accordingly. The default
  634.   value is maxconn/4, which seems to be more than enough for most heavy usages.
  635.   The splice code dynamically allocates and releases pipes, and can fall back
  636.   to standard copy, so setting this value too low may only impact performance.
  637.  
  638. noepoll
  639.   Disables the use of the "epoll" event polling system on Linux. It is
  640.   equivalent to the command-line argument "-de". The next polling system
  641.   used will generally be "poll". See also "nosepoll", and "nopoll".
  642.  
  643. nokqueue
  644.   Disables the use of the "kqueue" event polling system on BSD. It is
  645.   equivalent to the command-line argument "-dk". The next polling system
  646.   used will generally be "poll". See also "nopoll".
  647.  
  648. nopoll
  649.   Disables the use of the "poll" event polling system. It is equivalent to the
  650.   command-line argument "-dp". The next polling system used will be "select".
  651.   It should never be needed to disable "poll" since it's available on all
  652.   platforms supported by HAProxy. See also "nosepoll", and "nopoll" and
  653.   "nokqueue".
  654.  
  655. nosepoll
  656.   Disables the use of the "speculative epoll" event polling system on Linux. It
  657.   is equivalent to the command-line argument "-ds". The next polling system
  658.   used will generally be "epoll". See also "nosepoll", and "nopoll".
  659.  
  660. nosplice
  661.   Disables the use of kernel tcp splicing between sockets on Linux. It is
  662.   equivalent to the command line argument "-dS".  Data will then be copied
  663.   using conventional and more portable recv/send calls. Kernel tcp splicing is
  664.   limited to some very recent instances of kernel 2.6. Most versions between
  665.   2.6.25 and 2.6.28 are buggy and will forward corrupted data, so they must not
  666.   be used. This option makes it easier to globally disable kernel splicing in
  667.   case of doubt. See also "option splice-auto", "option splice-request" and
  668.   "option splice-response".
  669.  
  670. spread-checks <0..50, in percent>
  671.   Sometimes it is desirable to avoid sending health checks to servers at exact
  672.   intervals, for instance when many logical servers are located on the same
  673.   physical server. With the help of this parameter, it becomes possible to add
  674.   some randomness in the check interval between 0 and +/- 50%. A value between
  675.   2 and 5 seems to show good results. The default value remains at 0.
  676.  
  677. tune.bufsize <number>
  678.   Sets the buffer size to this size (in bytes). Lower values allow more
  679.   sessions to coexist in the same amount of RAM, and higher values allow some
  680.   applications with very large cookies to work. The default value is 16384 and
  681.   can be changed at build time. It is strongly recommended not to change this
  682.   from the default value, as very low values will break some services such as
  683.   statistics, and values larger than default size will increase memory usage,
  684.   possibly causing the system to run out of memory. At least the global maxconn
  685.   parameter should be decreased by the same factor as this one is increased.
  686.  
  687. tune.chksize <number>
  688.   Sets the check buffer size to this size (in bytes). Higher values may help
  689.   find string or regex patterns in very large pages, though doing so may imply
  690.   more memory and CPU usage. The default value is 16384 and can be changed at
  691.   build time. It is not recommended to change this value, but to use better
  692.   checks whenever possible.
  693.  
  694. tune.maxaccept <number>
  695.   Sets the maximum number of consecutive accepts that a process may perform on
  696.   a single wake up. High values give higher priority to high connection rates,
  697.   while lower values give higher priority to already established connections.
  698.   This value is limited to 100 by default in single process mode. However, in
  699.   multi-process mode (nbproc > 1), it defaults to 8 so that when one process
  700.   wakes up, it does not take all incoming connections for itself and leaves a
  701.   part of them to other processes. Setting this value to -1 completely disables
  702.   the limitation. It should normally not be needed to tweak this value.
  703.  
  704. tune.maxpollevents <number>
  705.   Sets the maximum amount of events that can be processed at once in a call to
  706.   the polling system. The default value is adapted to the operating system. It
  707.   has been noticed that reducing it below 200 tends to slightly decrease
  708.   latency at the expense of network bandwidth, and increasing it above 200
  709.   tends to trade latency for slightly increased bandwidth.
  710.  
  711. tune.maxrewrite <number>
  712.   Sets the reserved buffer space to this size in bytes. The reserved space is
  713.   used for header rewriting or appending. The first reads on sockets will never
  714.   fill more than bufsize-maxrewrite. Historically it has defaulted to half of
  715.   bufsize, though that does not make much sense since there are rarely large
  716.   numbers of headers to add. Setting it too high prevents processing of large
  717.   requests or responses. Setting it too low prevents addition of new headers
  718.   to already large requests or to POST requests. It is generally wise to set it
  719.   to about 1024. It is automatically readjusted to half of bufsize if it is
  720.   larger than that. This means you don't have to worry about it when changing
  721.   bufsize.
  722.  
  723. tune.rcvbuf.client <number>
  724. tune.rcvbuf.server <number>
  725.   Forces the kernel socket receive buffer size on the client or the server side
  726.   to the specified value in bytes. This value applies to all TCP/HTTP frontends
  727.   and backends. It should normally never be set, and the default size (0) lets
  728.   the kernel autotune this value depending on the amount of available memory.
  729.   However it can sometimes help to set it to very low values (eg: 4096) in
  730.   order to save kernel memory by preventing it from buffering too large amounts
  731.   of received data. Lower values will significantly increase CPU usage though.
  732.  
  733. tune.sndbuf.client <number>
  734. tune.sndbuf.server <number>
  735.   Forces the kernel socket send buffer size on the client or the server side to
  736.   the specified value in bytes. This value applies to all TCP/HTTP frontends
  737.   and backends. It should normally never be set, and the default size (0) lets
  738.   the kernel autotune this value depending on the amount of available memory.
  739.   However it can sometimes help to set it to very low values (eg: 4096) in
  740.   order to save kernel memory by preventing it from buffering too large amounts
  741.   of received data. Lower values will significantly increase CPU usage though.
  742.   Another use case is to prevent write timeouts with extremely slow clients due
  743.   to the kernel waiting for a large part of the buffer to be read before
  744.   notifying haproxy again.
  745.  
  746.  
  747. 3.3. Debugging
  748. --------------
  749.  
  750. debug
  751.   Enables debug mode which dumps to stdout all exchanges, and disables forking
  752.   into background. It is the equivalent of the command-line argument "-d". It
  753.   should never be used in a production configuration since it may prevent full
  754.   system startup.
  755.  
  756. quiet
  757.   Do not display any message during startup. It is equivalent to the command-
  758.   line argument "-q".
  759.  
  760. 3.4. Userlists
  761. --------------
  762. It is possible to control access to frontend/backend/listen sections or to
  763. http stats by allowing only authenticated and authorized users. To do this,
  764. it is required to create at least one userlist and to define users.
  765.  
  766. userlist <listname>
  767.   Creates new userlist with name <listname>. Many independent userlists can be
  768.   used to store authentication & authorization data for independent customers.
  769.  
  770. group <groupname> [users <user>,<user>,(...)]
  771.   Adds group <groupname> to the current userlist. It is also possible to
  772.   attach users to this group by using a comma separated list of names
  773.   proceeded by "users" keyword.
  774.  
  775. user <username> [password|insecure-password <password>]
  776.                 [groups <group>,<group>,(...)]
  777.   Adds user <username> to the current userlist. Both secure (encrypted) and
  778.   insecure (unencrypted) passwords can be used. Encrypted passwords are
  779.   evaluated using the crypt(3) function so depending of the system's
  780.   capabilities, different algorithms are supported. For example modern Glibc
  781.   based Linux system supports MD5, SHA-256, SHA-512 and of course classic,
  782.   DES-based method of crypting passwords.
  783.  
  784.  
  785.   Example:
  786.         userlist L1
  787.           group G1 users tiger,scott
  788.           group G2 users xdb,scott
  789.  
  790.           user tiger password $6$k6y3o.eP$JlKBx9za9667qe4(...)xHSwRv6J.C0/D7cV91
  791.           user scott insecure-password elgato
  792.           user xdb insecure-password hello
  793.  
  794.         userlist L2
  795.           group G1
  796.           group G2
  797.  
  798.           user tiger password $6$k6y3o.eP$JlKBx(...)xHSwRv6J.C0/D7cV91 groups G1
  799.           user scott insecure-password elgato groups G1,G2
  800.           user xdb insecure-password hello groups G2
  801.  
  802.   Please note that both lists are functionally identical.
  803.  
  804. 4. Proxies
  805. ----------
  806.  
  807. Proxy configuration can be located in a set of sections :
  808.  - defaults <name>
  809.  - frontend <name>
  810.  - backend  <name>
  811.  - listen   <name>
  812.  
  813. A "defaults" section sets default parameters for all other sections following
  814. its declaration. Those default parameters are reset by the next "defaults"
  815. section. See below for the list of parameters which can be set in a "defaults"
  816. section. The name is optional but its use is encouraged for better readability.
  817.  
  818. A "frontend" section describes a set of listening sockets accepting client
  819. connections.
  820.  
  821. A "backend" section describes a set of servers to which the proxy will connect
  822. to forward incoming connections.
  823.  
  824. A "listen" section defines a complete proxy with its frontend and backend
  825. parts combined in one section. It is generally useful for TCP-only traffic.
  826.  
  827. All proxy names must be formed from upper and lower case letters, digits,
  828. '-' (dash), '_' (underscore) , '.' (dot) and ':' (colon). ACL names are
  829. case-sensitive, which means that "www" and "WWW" are two different proxies.
  830.  
  831. Historically, all proxy names could overlap, it just caused troubles in the
  832. logs. Since the introduction of content switching, it is mandatory that two
  833. proxies with overlapping capabilities (frontend/backend) have different names.
  834. However, it is still permitted that a frontend and a backend share the same
  835. name, as this configuration seems to be commonly encountered.
  836.  
  837. Right now, two major proxy modes are supported : "tcp", also known as layer 4,
  838. and "http", also known as layer 7. In layer 4 mode, HAProxy simply forwards
  839. bidirectional traffic between two sides. In layer 7 mode, HAProxy analyzes the
  840. protocol, and can interact with it by allowing, blocking, switching, adding,
  841. modifying, or removing arbitrary contents in requests or responses, based on
  842. arbitrary criteria.
  843.  
  844.  
  845. 4.1. Proxy keywords matrix
  846. --------------------------
  847.  
  848. The following list of keywords is supported. Most of them may only be used in a
  849. limited set of section types. Some of them are marked as "deprecated" because
  850. they are inherited from an old syntax which may be confusing or functionally
  851. limited, and there are new recommended keywords to replace them. Keywords
  852. marked with "(*)" can be optionally inverted using the "no" prefix, eg. "no
  853. option contstats". This makes sense when the option has been enabled by default
  854. and must be disabled for a specific instance. Such options may also be prefixed
  855. with "default" in order to restore default settings regardless of what has been
  856. specified in a previous "defaults" section.
  857.  
  858.  
  859.  keyword                              defaults   frontend   listen    backend
  860. ------------------------------------+----------+----------+---------+---------
  861. acl                                       -          X         X         X
  862. appsession                                -          -         X         X
  863. backlog                                   X          X         X         -
  864. balance                                   X          -         X         X
  865. bind                                      -          X         X         -
  866. bind-process                              X          X         X         X
  867. block                                     -          X         X         X
  868. capture cookie                            -          X         X         -
  869. capture request header                    -          X         X         -
  870. capture response header                   -          X         X         -
  871. clitimeout                  (deprecated)  X          X         X         -
  872. contimeout                  (deprecated)  X          -         X         X
  873. cookie                                    X          -         X         X
  874. default-server                            X          -         X         X
  875. default_backend                           X          X         X         -
  876. description                               -          X         X         X
  877. disabled                                  X          X         X         X
  878. dispatch                                  -          -         X         X
  879. enabled                                   X          X         X         X
  880. errorfile                                 X          X         X         X
  881. errorloc                                  X          X         X         X
  882. errorloc302                               X          X         X         X
  883. -- keyword -------------------------- defaults - frontend - listen -- backend -
  884. errorloc303                               X          X         X         X
  885. force-persist                             -          X         X         X
  886. fullconn                                  X          -         X         X
  887. grace                                     X          X         X         X
  888. hash-type                                 X          -         X         X
  889. http-check disable-on-404                 X          -         X         X
  890. http-check expect                         -          -         X         X
  891. http-check send-state                     X          -         X         X
  892. http-request                              -          X         X         X
  893. id                                        -          X         X         X
  894. ignore-persist                            -          X         X         X
  895. log                                       X          X         X         X
  896. maxconn                                   X          X         X         -
  897. mode                                      X          X         X         X
  898. monitor fail                              -          X         X         -
  899. monitor-net                               X          X         X         -
  900. monitor-uri                               X          X         X         -
  901. option abortonclose                  (*)  X          -         X         X
  902. option accept-invalid-http-request   (*)  X          X         X         -
  903. option accept-invalid-http-response  (*)  X          -         X         X
  904. option allbackups                    (*)  X          -         X         X
  905. option checkcache                    (*)  X          -         X         X
  906. option clitcpka                      (*)  X          X         X         -
  907. option contstats                     (*)  X          X         X         -
  908. option dontlog-normal                (*)  X          X         X         -
  909. option dontlognull                   (*)  X          X         X         -
  910. option forceclose                    (*)  X          X         X         X
  911. -- keyword -------------------------- defaults - frontend - listen -- backend -
  912. option forwardfor                         X          X         X         X
  913. option http-no-delay                 (*)  X          X         X         X
  914. option http-pretend-keepalive        (*)  X          X         X         X
  915. option http-server-close             (*)  X          X         X         X
  916. option http-use-proxy-header         (*)  X          X         X         -
  917. option httpchk                            X          -         X         X
  918. option httpclose                     (*)  X          X         X         X
  919. option httplog                            X          X         X         X
  920. option http_proxy                    (*)  X          X         X         X
  921. option independant-streams           (*)  X          X         X         X
  922. option ldap-check                         X          -         X         X
  923. option log-health-checks             (*)  X          -         X         X
  924. option log-separate-errors           (*)  X          X         X         -
  925. option logasap                       (*)  X          X         X         -
  926. option mysql-check                        X          -         X         X
  927. option nolinger                      (*)  X          X         X         X
  928. option originalto                         X          X         X         X
  929. option persist                       (*)  X          -         X         X
  930. option redispatch                    (*)  X          -         X         X
  931. option smtpchk                            X          -         X         X
  932. option socket-stats                  (*)  X          X         X         -
  933. option splice-auto                   (*)  X          X         X         X
  934. option splice-request                (*)  X          X         X         X
  935. option splice-response               (*)  X          X         X         X
  936. option srvtcpka                      (*)  X          -         X         X
  937. option ssl-hello-chk                      X          -         X         X
  938. -- keyword -------------------------- defaults - frontend - listen -- backend -
  939. option tcp-smart-accept              (*)  X          X         X         -
  940. option tcp-smart-connect             (*)  X          -         X         X
  941. option tcpka                              X          X         X         X
  942. option tcplog                             X          X         X         X
  943. option transparent                   (*)  X          -         X         X
  944. persist rdp-cookie                        X          -         X         X
  945. rate-limit sessions                       X          X         X         -
  946. redirect                                  -          X         X         X
  947. redisp                      (deprecated)  X          -         X         X
  948. redispatch                  (deprecated)  X          -         X         X
  949. reqadd                                    -          X         X         X
  950. reqallow                                  -          X         X         X
  951. reqdel                                    -          X         X         X
  952. reqdeny                                   -          X         X         X
  953. reqiallow                                 -          X         X         X
  954. reqidel                                   -          X         X         X
  955. reqideny                                  -          X         X         X
  956. reqipass                                  -          X         X         X
  957. reqirep                                   -          X         X         X
  958. reqisetbe                                 -          X         X         X
  959. reqitarpit                                -          X         X         X
  960. reqpass                                   -          X         X         X
  961. reqrep                                    -          X         X         X
  962. -- keyword -------------------------- defaults - frontend - listen -- backend -
  963. reqsetbe                                  -          X         X         X
  964. reqtarpit                                 -          X         X         X
  965. retries                                   X          -         X         X
  966. rspadd                                    -          X         X         X
  967. rspdel                                    -          X         X         X
  968. rspdeny                                   -          X         X         X
  969. rspidel                                   -          X         X         X
  970. rspideny                                  -          X         X         X
  971. rspirep                                   -          X         X         X
  972. rsprep                                    -          X         X         X
  973. server                                    -          -         X         X
  974. source                                    X          -         X         X
  975. srvtimeout                  (deprecated)  X          -         X         X
  976. stats admin                               -          -         X         X
  977. stats auth                                X          -         X         X
  978. stats enable                              X          -         X         X
  979. stats hide-version                        X          -         X         X
  980. stats http-request                        -          -         X         X
  981. stats realm                               X          -         X         X
  982. stats refresh                             X          -         X         X
  983. stats scope                               X          -         X         X
  984. stats show-desc                           X          -         X         X
  985. stats show-legends                        X          -         X         X
  986. stats show-node                           X          -         X         X
  987. stats uri                                 X          -         X         X
  988. -- keyword -------------------------- defaults - frontend - listen -- backend -
  989. stick match                               -          -         X         X
  990. stick on                                  -          -         X         X
  991. stick store-request                       -          -         X         X
  992. stick-table                               -          -         X         X
  993. tcp-request content accept                -          X         X         -
  994. tcp-request content reject                -          X         X         -
  995. tcp-request inspect-delay                 -          X         X         -
  996. timeout check                             X          -         X         X
  997. timeout client                            X          X         X         -
  998. timeout clitimeout          (deprecated)  X          X         X         -
  999. timeout connect                           X          -         X         X
  1000. timeout contimeout          (deprecated)  X          -         X         X
  1001. timeout http-keep-alive                   X          X         X         X
  1002. timeout http-request                      X          X         X         X
  1003. timeout queue                             X          -         X         X
  1004. timeout server                            X          -         X         X
  1005. timeout srvtimeout          (deprecated)  X          -         X         X
  1006. timeout tarpit                            X          X         X         X
  1007. transparent                 (deprecated)  X          -         X         X
  1008. use_backend                               -          X         X         -
  1009. ------------------------------------+----------+----------+---------+---------
  1010.  keyword                              defaults   frontend   listen    backend
  1011.  
  1012.  
  1013. 4.2. Alphabetically sorted keywords reference
  1014. ---------------------------------------------
  1015.  
  1016. This section provides a description of each keyword and its usage.
  1017.  
  1018.  
  1019. acl <aclname> <criterion> [flags] [operator] <value> ...
  1020.   Declare or complete an access list.
  1021.   May be used in sections :   defaults | frontend | listen | backend
  1022.                                  no    |    yes   |   yes  |   yes
  1023.   Example:
  1024.         acl invalid_src  src          0.0.0.0/7 224.0.0.0/3
  1025.         acl invalid_src  src_port     0:1023
  1026.         acl local_dst    hdr(host) -i localhost
  1027.  
  1028.   See section 7 about ACL usage.
  1029.  
  1030.  
  1031. appsession <cookie> len <length> timeout <holdtime>
  1032.            [request-learn] [prefix] [mode <path-parameters|query-string>]
  1033.   Define session stickiness on an existing application cookie.
  1034.   May be used in sections :   defaults | frontend | listen | backend
  1035.                                  no    |    no    |   yes  |   yes
  1036.   Arguments :
  1037.     <cookie>   this is the name of the cookie used by the application and which
  1038.                HAProxy will have to learn for each new session.
  1039.  
  1040.     <length>   this is the max number of characters that will be memorized and
  1041.                checked in each cookie value.
  1042.  
  1043.     <holdtime> this is the time after which the cookie will be removed from
  1044.                memory if unused. If no unit is specified, this time is in
  1045.                milliseconds.
  1046.  
  1047.     request-learn
  1048.                If this option is specified, then haproxy will be able to learn
  1049.                the cookie found in the request in case the server does not
  1050.                specify any in response. This is typically what happens with
  1051.                PHPSESSID cookies, or when haproxy's session expires before
  1052.                the application's session and the correct server is selected.
  1053.                It is recommended to specify this option to improve reliability.
  1054.  
  1055.     prefix     When this option is specified, haproxy will match on the cookie
  1056.                prefix (or URL parameter prefix). The appsession value is the
  1057.                data following this prefix.
  1058.  
  1059.                Example :
  1060.                appsession ASPSESSIONID len 64 timeout 3h prefix
  1061.  
  1062.                This will match the cookie ASPSESSIONIDXXXX=XXXXX,
  1063.                the appsession value will be XXXX=XXXXX.
  1064.  
  1065.     mode       This option allows to change the URL parser mode.
  1066.                2 modes are currently supported :
  1067.                - path-parameters :
  1068.                  The parser looks for the appsession in the path parameters
  1069.                  part (each parameter is separated by a semi-colon), which is
  1070.                  convenient for JSESSIONID for example.
  1071.                  This is the default mode if the option is not set.
  1072.                - query-string :
  1073.                  In this mode, the parser will look for the appsession in the
  1074.                  query string.
  1075.  
  1076.   When an application cookie is defined in a backend, HAProxy will check when
  1077.   the server sets such a cookie, and will store its value in a table, and
  1078.   associate it with the server's identifier. Up to <length> characters from
  1079.   the value will be retained. On each connection, haproxy will look for this
  1080.   cookie both in the "Cookie:" headers, and as a URL parameter (depending on
  1081.   the mode used). If a known value is found, the client will be directed to the
  1082.   server associated with this value. Otherwise, the load balancing algorithm is
  1083.   applied. Cookies are automatically removed from memory when they have been
  1084.   unused for a duration longer than <holdtime>.
  1085.  
  1086.   The definition of an application cookie is limited to one per backend.
  1087.  
  1088.   Note : Consider not using this feature in multi-process mode (nbproc > 1)
  1089.          unless you know what you do : memory is not shared between the
  1090.          processes, which can result in random behaviours.
  1091.  
  1092.   Example :
  1093.         appsession JSESSIONID len 52 timeout 3h
  1094.  
  1095.   See also : "cookie", "capture cookie", "balance", "stick", "stick-table",
  1096.              "ignore-persist", "nbproc" and "bind-process".
  1097.  
  1098.  
  1099. backlog <conns>
  1100.   Give hints to the system about the approximate listen backlog desired size
  1101.   May be used in sections :   defaults | frontend | listen | backend
  1102.                                  yes   |    yes   |   yes  |   no
  1103.   Arguments :
  1104.     <conns>   is the number of pending connections. Depending on the operating
  1105.               system, it may represent the number of already acknowledged
  1106.               connections, of non-acknowledged ones, or both.
  1107.  
  1108.   In order to protect against SYN flood attacks, one solution is to increase
  1109.   the system's SYN backlog size. Depending on the system, sometimes it is just
  1110.   tunable via a system parameter, sometimes it is not adjustable at all, and
  1111.   sometimes the system relies on hints given by the application at the time of
  1112.   the listen() syscall. By default, HAProxy passes the frontend's maxconn value
  1113.   to the listen() syscall. On systems which can make use of this value, it can
  1114.   sometimes be useful to be able to specify a different value, hence this
  1115.   backlog parameter.
  1116.  
  1117.   On Linux 2.4, the parameter is ignored by the system. On Linux 2.6, it is
  1118.   used as a hint and the system accepts up to the smallest greater power of
  1119.   two, and never more than some limits (usually 32768).
  1120.  
  1121.   See also : "maxconn" and the target operating system's tuning guide.
  1122.  
  1123.  
  1124. balance <algorithm> [ <arguments> ]
  1125. balance url_param <param> [check_post [<max_wait>]]
  1126.   Define the load balancing algorithm to be used in a backend.
  1127.   May be used in sections :   defaults | frontend | listen | backend
  1128.                                  yes   |    no    |   yes  |   yes
  1129.   Arguments :
  1130.     <algorithm> is the algorithm used to select a server when doing load
  1131.                 balancing. This only applies when no persistence information
  1132.                 is available, or when a connection is redispatched to another
  1133.                 server. <algorithm> may be one of the following :
  1134.  
  1135.       roundrobin  Each server is used in turns, according to their weights.
  1136.                   This is the smoothest and fairest algorithm when the server's
  1137.                   processing time remains equally distributed. This algorithm
  1138.                   is dynamic, which means that server weights may be adjusted
  1139.                   on the fly for slow starts for instance. It is limited by
  1140.                   design to 4128 active servers per backend. Note that in some
  1141.                   large farms, when a server becomes up after having been down
  1142.                   for a very short time, it may sometimes take a few hundreds
  1143.                   requests for it to be re-integrated into the farm and start
  1144.                   receiving traffic. This is normal, though very rare. It is
  1145.                   indicated here in case you would have the chance to observe
  1146.                   it, so that you don't worry.
  1147.  
  1148.       static-rr   Each server is used in turns, according to their weights.
  1149.                   This algorithm is as similar to roundrobin except that it is
  1150.                   static, which means that changing a server's weight on the
  1151.                   fly will have no effect. On the other hand, it has no design
  1152.                   limitation on the number of servers, and when a server goes
  1153.                   up, it is always immediately reintroduced into the farm, once
  1154.                   the full map is recomputed. It also uses slightly less CPU to
  1155.                   run (around -1%).
  1156.  
  1157.       leastconn   The server with the lowest number of connections receives the
  1158.                   connection. Round-robin is performed within groups of servers
  1159.                   of the same load to ensure that all servers will be used. Use
  1160.                   of this algorithm is recommended where very long sessions are
  1161.                   expected, such as LDAP, SQL, TSE, etc... but is not very well
  1162.                   suited for protocols using short sessions such as HTTP. This
  1163.                   algorithm is dynamic, which means that server weights may be
  1164.                   adjusted on the fly for slow starts for instance.
  1165.  
  1166.       source      The source IP address is hashed and divided by the total
  1167.                   weight of the running servers to designate which server will
  1168.                   receive the request. This ensures that the same client IP
  1169.                   address will always reach the same server as long as no
  1170.                   server goes down or up. If the hash result changes due to the
  1171.                   number of running servers changing, many clients will be
  1172.                   directed to a different server. This algorithm is generally
  1173.                   used in TCP mode where no cookie may be inserted. It may also
  1174.                   be used on the Internet to provide a best-effort stickiness
  1175.                   to clients which refuse session cookies. This algorithm is
  1176.                   static by default, which means that changing a server's
  1177.                   weight on the fly will have no effect, but this can be
  1178.                   changed using "hash-type".
  1179.  
  1180.       uri         This algorithm hashes either the left part of the URI (before
  1181.                   the question mark) or the whole URI (if the "whole" parameter
  1182.                   is present) and divides the hash value by the total weight of
  1183.                   the running servers. The result designates which server will
  1184.                   receive the request. This ensures that the same URI will
  1185.                   always be directed to the same server as long as no server
  1186.                   goes up or down. This is used with proxy caches and
  1187.                   anti-virus proxies in order to maximize the cache hit rate.
  1188.                   Note that this algorithm may only be used in an HTTP backend.
  1189.                   This algorithm is static by default, which means that
  1190.                   changing a server's weight on the fly will have no effect,
  1191.                   but this can be changed using "hash-type".
  1192.  
  1193.                   This algorithm supports two optional parameters "len" and
  1194.                   "depth", both followed by a positive integer number. These
  1195.                   options may be helpful when it is needed to balance servers
  1196.                   based on the beginning of the URI only. The "len" parameter
  1197.                   indicates that the algorithm should only consider that many
  1198.                   characters at the beginning of the URI to compute the hash.
  1199.                   Note that having "len" set to 1 rarely makes sense since most
  1200.                   URIs start with a leading "/".
  1201.  
  1202.                   The "depth" parameter indicates the maximum directory depth
  1203.                   to be used to compute the hash. One level is counted for each
  1204.                   slash in the request. If both parameters are specified, the
  1205.                   evaluation stops when either is reached.
  1206.  
  1207.       url_param   The URL parameter specified in argument will be looked up in
  1208.                   the query string of each HTTP GET request.
  1209.  
  1210.                   If the modifier "check_post" is used, then an HTTP POST
  1211.                   request entity will be searched for the parameter argument,
  1212.                   when it is not found in a query string after a question mark
  1213.                   ('?') in the URL. Optionally, specify a number of octets to
  1214.                   wait for before attempting to search the message body. If the
  1215.                   entity can not be searched, then round robin is used for each
  1216.                   request. For instance, if your clients always send the LB
  1217.                   parameter in the first 128 bytes, then specify that. The
  1218.                   default is 48. The entity data will not be scanned until the
  1219.                   required number of octets have arrived at the gateway, this
  1220.                   is the minimum of: (default/max_wait, Content-Length or first
  1221.                   chunk length). If Content-Length is missing or zero, it does
  1222.                   not need to wait for more data than the client promised to
  1223.                   send. When Content-Length is present and larger than
  1224.                   <max_wait>, then waiting is limited to <max_wait> and it is
  1225.                   assumed that this will be enough data to search for the
  1226.                   presence of the parameter. In the unlikely event that
  1227.                   Transfer-Encoding: chunked is used, only the first chunk is
  1228.                   scanned. Parameter values separated by a chunk boundary, may
  1229.                   be randomly balanced if at all.
  1230.  
  1231.                   If the parameter is found followed by an equal sign ('=') and
  1232.                   a value, then the value is hashed and divided by the total
  1233.                   weight of the running servers. The result designates which
  1234.                   server will receive the request.
  1235.  
  1236.                   This is used to track user identifiers in requests and ensure
  1237.                   that a same user ID will always be sent to the same server as
  1238.                   long as no server goes up or down. If no value is found or if
  1239.                   the parameter is not found, then a round robin algorithm is
  1240.                   applied. Note that this algorithm may only be used in an HTTP
  1241.                   backend. This algorithm is static by default, which means
  1242.                   that changing a server's weight on the fly will have no
  1243.                   effect, but this can be changed using "hash-type".
  1244.  
  1245.       hdr(<name>) The HTTP header <name> will be looked up in each HTTP request.
  1246.                   Just as with the equivalent ACL 'hdr()' function, the header
  1247.                   name in parenthesis is not case sensitive. If the header is
  1248.                   absent or if it does not contain any value, the roundrobin
  1249.                   algorithm is applied instead.
  1250.  
  1251.                   An optional 'use_domain_only' parameter is available, for
  1252.                   reducing the hash algorithm to the main domain part with some
  1253.                   specific headers such as 'Host'. For instance, in the Host
  1254.                   value "haproxy.1wt.eu", only "1wt" will be considered.
  1255.  
  1256.                   This algorithm is static by default, which means that
  1257.                   changing a server's weight on the fly will have no effect,
  1258.                   but this can be changed using "hash-type".
  1259.  
  1260.       rdp-cookie
  1261.       rdp-cookie(name)
  1262.                   The RDP cookie <name> (or "mstshash" if omitted) will be
  1263.                   looked up and hashed for each incoming TCP request. Just as
  1264.                   with the equivalent ACL 'req_rdp_cookie()' function, the name
  1265.                   is not case-sensitive. This mechanism is useful as a degraded
  1266.                   persistence mode, as it makes it possible to always send the
  1267.                   same user (or the same session ID) to the same server. If the
  1268.                   cookie is not found, the normal roundrobin algorithm is
  1269.                   used instead.
  1270.  
  1271.                   Note that for this to work, the frontend must ensure that an
  1272.                   RDP cookie is already present in the request buffer. For this
  1273.                   you must use 'tcp-request content accept' rule combined with
  1274.                   a 'req_rdp_cookie_cnt' ACL.
  1275.  
  1276.                   This algorithm is static by default, which means that
  1277.                   changing a server's weight on the fly will have no effect,
  1278.                   but this can be changed using "hash-type".
  1279.  
  1280.     <arguments> is an optional list of arguments which may be needed by some
  1281.                 algorithms. Right now, only "url_param" and "uri" support an
  1282.                 optional argument.
  1283.  
  1284.                 balance uri [len <len>] [depth <depth>]
  1285.                 balance url_param <param> [check_post [<max_wait>]]
  1286.  
  1287.   The load balancing algorithm of a backend is set to roundrobin when no other
  1288.   algorithm, mode nor option have been set. The algorithm may only be set once
  1289.   for each backend.
  1290.  
  1291.   Examples :
  1292.         balance roundrobin
  1293.         balance url_param userid
  1294.         balance url_param session_id check_post 64
  1295.         balance hdr(User-Agent)
  1296.         balance hdr(host)
  1297.         balance hdr(Host) use_domain_only
  1298.  
  1299.   Note: the following caveats and limitations on using the "check_post"
  1300.   extension with "url_param" must be considered :
  1301.  
  1302.     - all POST requests are eligible for consideration, because there is no way
  1303.       to determine if the parameters will be found in the body or entity which
  1304.       may contain binary data. Therefore another method may be required to
  1305.       restrict consideration of POST requests that have no URL parameters in
  1306.       the body. (see acl reqideny http_end)
  1307.  
  1308.     - using a <max_wait> value larger than the request buffer size does not
  1309.       make sense and is useless. The buffer size is set at build time, and
  1310.       defaults to 16 kB.
  1311.  
  1312.     - Content-Encoding is not supported, the parameter search will probably
  1313.       fail; and load balancing will fall back to Round Robin.
  1314.  
  1315.     - Expect: 100-continue is not supported, load balancing will fall back to
  1316.       Round Robin.
  1317.  
  1318.     - Transfer-Encoding (RFC2616 3.6.1) is only supported in the first chunk.
  1319.       If the entire parameter value is not present in the first chunk, the
  1320.       selection of server is undefined (actually, defined by how little
  1321.       actually appeared in the first chunk).
  1322.  
  1323.     - This feature does not support generation of a 100, 411 or 501 response.
  1324.  
  1325.     - In some cases, requesting "check_post" MAY attempt to scan the entire
  1326.       contents of a message body. Scanning normally terminates when linear
  1327.       white space or control characters are found, indicating the end of what
  1328.       might be a URL parameter list. This is probably not a concern with SGML
  1329.       type message bodies.
  1330.  
  1331.   See also : "dispatch", "cookie", "appsession", "transparent", "hash-type" and
  1332.              "http_proxy".
  1333.  
  1334.  
  1335. bind [<address>]:<port_range> [, ...]
  1336. bind [<address>]:<port_range> [, ...] interface <interface>
  1337. bind [<address>]:<port_range> [, ...] mss <maxseg>
  1338. bind [<address>]:<port_range> [, ...] transparent
  1339. bind [<address>]:<port_range> [, ...] id <id>
  1340. bind [<address>]:<port_range> [, ...] name <name>
  1341. bind [<address>]:<port_range> [, ...] defer-accept
  1342.   Define one or several listening addresses and/or ports in a frontend.
  1343.   May be used in sections :   defaults | frontend | listen | backend
  1344.                                   no   |    yes   |   yes  |   no
  1345.   Arguments :
  1346.     <address>     is optional and can be a host name, an IPv4 address, an IPv6
  1347.                   address, or '*'. It designates the address the frontend will
  1348.                   listen on. If unset, all IPv4 addresses of the system will be
  1349.                   listened on. The same will apply for '*' or the system's
  1350.                   special address "0.0.0.0".
  1351.  
  1352.     <port_range>  is either a unique TCP port, or a port range for which the
  1353.                   proxy will accept connections for the IP address specified
  1354.                   above. The port is mandatory. Note that in the case of an
  1355.                   IPv6 address, the port is always the number after the last
  1356.                   colon (':'). A range can either be :
  1357.                    - a numerical port (ex: '80')
  1358.                    - a dash-delimited ports range explicitly stating the lower
  1359.                      and upper bounds (ex: '2000-2100') which are included in
  1360.                      the range.
  1361.  
  1362.                   Particular care must be taken against port ranges, because
  1363.                   every <address:port> couple consumes one socket (= a file
  1364.                   descriptor), so it's easy to consume lots of descriptors
  1365.                   with a simple range, and to run out of sockets. Also, each
  1366.                   <address:port> couple must be used only once among all
  1367.                   instances running on a same system. Please note that binding
  1368.                   to ports lower than 1024 generally require particular
  1369.                   privileges to start the program, which are independant of
  1370.                   the 'uid' parameter.
  1371.  
  1372.     <interface>   is an optional physical interface name. This is currently
  1373.                   only supported on Linux. The interface must be a physical
  1374.                   interface, not an aliased interface. When specified, all
  1375.                   addresses on the same line will only be accepted if the
  1376.                   incoming packet physically come through the designated
  1377.                   interface. It is also possible to bind multiple frontends to
  1378.                   the same address if they are bound to different interfaces.
  1379.                   Note that binding to a physical interface requires root
  1380.                   privileges.
  1381.  
  1382.     <maxseg>      is an optional TCP Maximum Segment Size (MSS) value to be
  1383.                   advertised on incoming connections. This can be used to force
  1384.                   a lower MSS for certain specific ports, for instance for
  1385.                   connections passing through a VPN. Note that this relies on a
  1386.                   kernel feature which is theorically supported under Linux but
  1387.                   was buggy in all versions prior to 2.6.28. It may or may not
  1388.                   work on other operating systems. The commonly advertised
  1389.                   value on Ethernet networks is 1460 = 1500(MTU) - 40(IP+TCP).
  1390.  
  1391.     <id>          is a persistent value for socket ID. Must be positive and
  1392.                   unique in the proxy. An unused value will automatically be
  1393.                   assigned if unset. Can only be used when defining only a
  1394.                   single socket.
  1395.  
  1396.     <name>        is an optional name provided for stats
  1397.  
  1398.     transparent   is an optional keyword which is supported only on certain
  1399.                   Linux kernels. It indicates that the addresses will be bound
  1400.                   even if they do not belong to the local machine. Any packet
  1401.                   targeting any of these addresses will be caught just as if
  1402.                   the address was locally configured. This normally requires
  1403.                   that IP forwarding is enabled. Caution! do not use this with
  1404.                   the default address '*', as it would redirect any traffic for
  1405.                   the specified port. This keyword is available only when
  1406.                   HAProxy is built with USE_LINUX_TPROXY=1.
  1407.  
  1408.     defer-accept  is an optional keyword which is supported only on certain
  1409.                   Linux kernels. It states that a connection will only be
  1410.                   accepted once some data arrive on it, or at worst after the
  1411.                   first retransmit. This should be used only on protocols for
  1412.                   which the client talks first (eg: HTTP). It can slightly
  1413.                   improve performance by ensuring that most of the request is
  1414.                   already available when the connection is accepted. On the
  1415.                   other hand, it will not be able to detect connections which
  1416.                   don't talk. It is important to note that this option is
  1417.                   broken in all kernels up to 2.6.31, as the connection is
  1418.                   never accepted until the client talks. This can cause issues
  1419.                   with front firewalls which would see an established
  1420.                   connection while the proxy will only see it in SYN_RECV.
  1421.  
  1422.   It is possible to specify a list of address:port combinations delimited by
  1423.   commas. The frontend will then listen on all of these addresses. There is no
  1424.   fixed limit to the number of addresses and ports which can be listened on in
  1425.   a frontend, as well as there is no limit to the number of "bind" statements
  1426.   in a frontend.
  1427.  
  1428.   Example :
  1429.         listen http_proxy
  1430.             bind :80,:443
  1431.             bind 10.0.0.1:10080,10.0.0.1:10443
  1432.  
  1433.   See also : "source".
  1434.  
  1435.  
  1436. bind-process [ all | odd | even | <number 1-32> ] ...
  1437.   Limit visibility of an instance to a certain set of processes numbers.
  1438.   May be used in sections :   defaults | frontend | listen | backend
  1439.                                  yes   |    yes   |   yes  |   yes
  1440.   Arguments :
  1441.     all           All process will see this instance. This is the default. It
  1442.                   may be used to override a default value.
  1443.  
  1444.     odd           This instance will be enabled on processes 1,3,5,...31. This
  1445.                   option may be combined with other numbers.
  1446.  
  1447.     even          This instance will be enabled on processes 2,4,6,...32. This
  1448.                   option may be combined with other numbers. Do not use it
  1449.                   with less than 2 processes otherwise some instances might be
  1450.                   missing from all processes.
  1451.  
  1452.     number        The instance will be enabled on this process number, between
  1453.                   1 and 32. You must be careful not to reference a process
  1454.                   number greater than the configured global.nbproc, otherwise
  1455.                   some instances might be missing from all processes.
  1456.  
  1457.   This keyword limits binding of certain instances to certain processes. This
  1458.   is useful in order not to have too many processes listening to the same
  1459.   ports. For instance, on a dual-core machine, it might make sense to set
  1460.   'nbproc 2' in the global section, then distributes the listeners among 'odd'
  1461.   and 'even' instances.
  1462.  
  1463.   At the moment, it is not possible to reference more than 32 processes using
  1464.   this keyword, but this should be more than enough for most setups. Please
  1465.   note that 'all' really means all processes and is not limited to the first
  1466.   32.
  1467.  
  1468.   If some backends are referenced by frontends bound to other processes, the
  1469.   backend automatically inherits the frontend's processes.
  1470.  
  1471.   Example :
  1472.         listen app_ip1
  1473.             bind 10.0.0.1:80
  1474.             bind-process odd
  1475.  
  1476.         listen app_ip2
  1477.             bind 10.0.0.2:80
  1478.             bind-process even
  1479.  
  1480.         listen management
  1481.             bind 10.0.0.3:80
  1482.             bind-process 1 2 3 4
  1483.  
  1484.   See also : "nbproc" in global section.
  1485.  
  1486.  
  1487. block { if | unless } <condition>
  1488.   Block a layer 7 request if/unless a condition is matched
  1489.   May be used in sections :   defaults | frontend | listen | backend
  1490.                                  no    |    yes   |   yes  |   yes
  1491.  
  1492.   The HTTP request will be blocked very early in the layer 7 processing
  1493.   if/unless <condition> is matched. A 403 error will be returned if the request
  1494.   is blocked. The condition has to reference ACLs (see section 7). This is
  1495.   typically used to deny access to certain sensitive resources if some
  1496.   conditions are met or not met. There is no fixed limit to the number of
  1497.   "block" statements per instance.
  1498.  
  1499.   Example:
  1500.         acl invalid_src  src          0.0.0.0/7 224.0.0.0/3
  1501.         acl invalid_src  src_port     0:1023
  1502.         acl local_dst    hdr(host) -i localhost
  1503.         block if invalid_src || local_dst
  1504.  
  1505.   See section 7 about ACL usage.
  1506.  
  1507.  
  1508. capture cookie <name> len <length>
  1509.   Capture and log a cookie in the request and in the response.
  1510.   May be used in sections :   defaults | frontend | listen | backend
  1511.                                   no   |    yes   |   yes  |   no
  1512.   Arguments :
  1513.     <name>    is the beginning of the name of the cookie to capture. In order
  1514.               to match the exact name, simply suffix the name with an equal
  1515.               sign ('='). The full name will appear in the logs, which is
  1516.               useful with application servers which adjust both the cookie name
  1517.               and value (eg: ASPSESSIONXXXXX).
  1518.  
  1519.     <length>  is the maximum number of characters to report in the logs, which
  1520.               include the cookie name, the equal sign and the value, all in the
  1521.               standard "name=value" form. The string will be truncated on the
  1522.               right if it exceeds <length>.
  1523.  
  1524.   Only the first cookie is captured. Both the "cookie" request headers and the
  1525.   "set-cookie" response headers are monitored. This is particularly useful to
  1526.   check for application bugs causing session crossing or stealing between
  1527.   users, because generally the user's cookies can only change on a login page.
  1528.  
  1529.   When the cookie was not presented by the client, the associated log column
  1530.   will report "-". When a request does not cause a cookie to be assigned by the
  1531.   server, a "-" is reported in the response column.
  1532.  
  1533.   The capture is performed in the frontend only because it is necessary that
  1534.   the log format does not change for a given frontend depending on the
  1535.   backends. This may change in the future. Note that there can be only one
  1536.   "capture cookie" statement in a frontend. The maximum capture length is
  1537.   configured in the sources by default to 64 characters. It is not possible to
  1538.   specify a capture in a "defaults" section.
  1539.  
  1540.   Example:
  1541.         capture cookie ASPSESSION len 32
  1542.  
  1543.   See also : "capture request header", "capture response header" as well as
  1544.             section 8 about logging.
  1545.  
  1546.  
  1547. capture request header <name> len <length>
  1548.   Capture and log the first occurrence of the specified request header.
  1549.   May be used in sections :   defaults | frontend | listen | backend
  1550.                                   no   |    yes   |   yes  |   no
  1551.   Arguments :
  1552.     <name>    is the name of the header to capture. The header names are not
  1553.               case-sensitive, but it is a common practice to write them as they
  1554.               appear in the requests, with the first letter of each word in
  1555.               upper case. The header name will not appear in the logs, only the
  1556.               value is reported, but the position in the logs is respected.
  1557.  
  1558.     <length>  is the maximum number of characters to extract from the value and
  1559.               report in the logs. The string will be truncated on the right if
  1560.               it exceeds <length>.
  1561.  
  1562.   Only the first value of the last occurrence of the header is captured. The
  1563.   value will be added to the logs between braces ('{}'). If multiple headers
  1564.   are captured, they will be delimited by a vertical bar ('|') and will appear
  1565.   in the same order they were declared in the configuration. Non-existent
  1566.   headers will be logged just as an empty string. Common uses for request
  1567.   header captures include the "Host" field in virtual hosting environments, the
  1568.   "Content-length" when uploads are supported, "User-agent" to quickly
  1569.   differentiate between real users and robots, and "X-Forwarded-For" in proxied
  1570.   environments to find where the request came from.
  1571.  
  1572.   Note that when capturing headers such as "User-agent", some spaces may be
  1573.   logged, making the log analysis more difficult. Thus be careful about what
  1574.   you log if you know your log parser is not smart enough to rely on the
  1575.   braces.
  1576.  
  1577.   There is no limit to the number of captured request headers, but each capture
  1578.   is limited to 64 characters. In order to keep log format consistent for a
  1579.   same frontend, header captures can only be declared in a frontend. It is not
  1580.   possible to specify a capture in a "defaults" section.
  1581.  
  1582.   Example:
  1583.         capture request header Host len 15
  1584.         capture request header X-Forwarded-For len 15
  1585.         capture request header Referrer len 15
  1586.  
  1587.   See also : "capture cookie", "capture response header" as well as section 8
  1588.              about logging.
  1589.  
  1590.  
  1591. capture response header <name> len <length>
  1592.   Capture and log the first occurrence of the specified response header.
  1593.   May be used in sections :   defaults | frontend | listen | backend
  1594.                                   no   |    yes   |   yes  |   no
  1595.   Arguments :
  1596.     <name>    is the name of the header to capture. The header names are not
  1597.               case-sensitive, but it is a common practice to write them as they
  1598.               appear in the response, with the first letter of each word in
  1599.               upper case. The header name will not appear in the logs, only the
  1600.               value is reported, but the position in the logs is respected.
  1601.  
  1602.     <length>  is the maximum number of characters to extract from the value and
  1603.               report in the logs. The string will be truncated on the right if
  1604.               it exceeds <length>.
  1605.  
  1606.   Only the first value of the last occurrence of the header is captured. The
  1607.   result will be added to the logs between braces ('{}') after the captured
  1608.   request headers. If multiple headers are captured, they will be delimited by
  1609.   a vertical bar ('|') and will appear in the same order they were declared in
  1610.   the configuration. Non-existent headers will be logged just as an empty
  1611.   string. Common uses for response header captures include the "Content-length"
  1612.   header which indicates how many bytes are expected to be returned, the
  1613.   "Location" header to track redirections.
  1614.  
  1615.   There is no limit to the number of captured response headers, but each
  1616.   capture is limited to 64 characters. In order to keep log format consistent
  1617.   for a same frontend, header captures can only be declared in a frontend. It
  1618.   is not possible to specify a capture in a "defaults" section.
  1619.  
  1620.   Example:
  1621.         capture response header Content-length len 9
  1622.         capture response header Location len 15
  1623.  
  1624.   See also : "capture cookie", "capture request header" as well as section 8
  1625.              about logging.
  1626.  
  1627.  
  1628. clitimeout <timeout> (deprecated)
  1629.   Set the maximum inactivity time on the client side.
  1630.   May be used in sections :   defaults | frontend | listen | backend
  1631.                                  yes   |    yes   |   yes  |   no
  1632.   Arguments :
  1633.     <timeout> is the timeout value is specified in milliseconds by default, but
  1634.               can be in any other unit if the number is suffixed by the unit,
  1635.               as explained at the top of this document.
  1636.  
  1637.   The inactivity timeout applies when the client is expected to acknowledge or
  1638.   send data. In HTTP mode, this timeout is particularly important to consider
  1639.   during the first phase, when the client sends the request, and during the
  1640.   response while it is reading data sent by the server. The value is specified
  1641.   in milliseconds by default, but can be in any other unit if the number is
  1642.   suffixed by the unit, as specified at the top of this document. In TCP mode
  1643.   (and to a lesser extent, in HTTP mode), it is highly recommended that the
  1644.   client timeout remains equal to the server timeout in order to avoid complex
  1645.   situations to debug. It is a good practice to cover one or several TCP packet
  1646.   losses by specifying timeouts that are slightly above multiples of 3 seconds
  1647.   (eg: 4 or 5 seconds).
  1648.  
  1649.   This parameter is specific to frontends, but can be specified once for all in
  1650.   "defaults" sections. This is in fact one of the easiest solutions not to
  1651.   forget about it. An unspecified timeout results in an infinite timeout, which
  1652.   is not recommended. Such a usage is accepted and works but reports a warning
  1653.   during startup because it may results in accumulation of expired sessions in
  1654.   the system if the system's timeouts are not configured either.
  1655.  
  1656.   This parameter is provided for compatibility but is currently deprecated.
  1657.   Please use "timeout client" instead.
  1658.  
  1659.   See also : "timeout client", "timeout http-request", "timeout server", and
  1660.              "srvtimeout".
  1661.  
  1662.  
  1663. contimeout <timeout> (deprecated)
  1664.   Set the maximum time to wait for a connection attempt to a server to succeed.
  1665.   May be used in sections :   defaults | frontend | listen | backend
  1666.                                  yes   |    no    |   yes  |   yes
  1667.   Arguments :
  1668.     <timeout> is the timeout value is specified in milliseconds by default, but
  1669.               can be in any other unit if the number is suffixed by the unit,
  1670.               as explained at the top of this document.
  1671.  
  1672.   If the server is located on the same LAN as haproxy, the connection should be
  1673.   immediate (less than a few milliseconds). Anyway, it is a good practice to
  1674.   cover one or several TCP packet losses by specifying timeouts that are
  1675.   slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
  1676.   connect timeout also presets the queue timeout to the same value if this one
  1677.   has not been specified. Historically, the contimeout was also used to set the
  1678.   tarpit timeout in a listen section, which is not possible in a pure frontend.
  1679.  
  1680.   This parameter is specific to backends, but can be specified once for all in
  1681.   "defaults" sections. This is in fact one of the easiest solutions not to
  1682.   forget about it. An unspecified timeout results in an infinite timeout, which
  1683.   is not recommended. Such a usage is accepted and works but reports a warning
  1684.   during startup because it may results in accumulation of failed sessions in
  1685.   the system if the system's timeouts are not configured either.
  1686.  
  1687.   This parameter is provided for backwards compatibility but is currently
  1688.   deprecated. Please use "timeout connect", "timeout queue" or "timeout tarpit"
  1689.   instead.
  1690.  
  1691.   See also : "timeout connect", "timeout queue", "timeout tarpit",
  1692.              "timeout server", "contimeout".
  1693.  
  1694.  
  1695. cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
  1696.               [ postonly ] [ preserve ] [ httponly ] [ secure ]
  1697.               [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]
  1698.   Enable cookie-based persistence in a backend.
  1699.   May be used in sections :   defaults | frontend | listen | backend
  1700.                                  yes   |    no    |   yes  |   yes
  1701.   Arguments :
  1702.     <name>    is the name of the cookie which will be monitored, modified or
  1703.               inserted in order to bring persistence. This cookie is sent to
  1704.               the client via a "Set-Cookie" header in the response, and is
  1705.               brought back by the client in a "Cookie" header in all requests.
  1706.               Special care should be taken to choose a name which does not
  1707.               conflict with any likely application cookie. Also, if the same
  1708.               backends are subject to be used by the same clients (eg:
  1709.               HTTP/HTTPS), care should be taken to use different cookie names
  1710.               between all backends if persistence between them is not desired.
  1711.  
  1712.     rewrite   This keyword indicates that the cookie will be provided by the
  1713.               server and that haproxy will have to modify its value to set the
  1714.               server's identifier in it. This mode is handy when the management
  1715.               of complex combinations of "Set-cookie" and "Cache-control"
  1716.               headers is left to the application. The application can then
  1717.               decide whether or not it is appropriate to emit a persistence
  1718.               cookie. Since all responses should be monitored, this mode only
  1719.               works in HTTP close mode. Unless the application behaviour is
  1720.               very complex and/or broken, it is advised not to start with this
  1721.               mode for new deployments. This keyword is incompatible with
  1722.               "insert" and "prefix".
  1723.  
  1724.     insert    This keyword indicates that the persistence cookie will have to
  1725.               be inserted by haproxy in server responses if the client did not
  1726.  
  1727.               already have a cookie that would have permitted it to access this
  1728.               server. When used without the "preserve" option, if the server
  1729.               emits a cookie with the same name, it will be remove before
  1730.               processing.  For this reason, this mode can be used to upgrade
  1731.               existing configurations running in the "rewrite" mode. The cookie
  1732.               will only be a session cookie and will not be stored on the
  1733.               client's disk. By default, unless the "indirect" option is added,
  1734.               the server will see the cookies emitted by the client. Due to
  1735.               caching effects, it is generally wise to add the "nocache" or
  1736.               "postonly" keywords (see below). The "insert" keyword is not
  1737.               compatible with "rewrite" and "prefix".
  1738.  
  1739.     prefix    This keyword indicates that instead of relying on a dedicated
  1740.               cookie for the persistence, an existing one will be completed.
  1741.               This may be needed in some specific environments where the client
  1742.               does not support more than one single cookie and the application
  1743.               already needs it. In this case, whenever the server sets a cookie
  1744.               named <name>, it will be prefixed with the server's identifier
  1745.               and a delimiter. The prefix will be removed from all client
  1746.               requests so that the server still finds the cookie it emitted.
  1747.               Since all requests and responses are subject to being modified,
  1748.               this mode requires the HTTP close mode. The "prefix" keyword is
  1749.               not compatible with "rewrite" and "insert".
  1750.  
  1751.     indirect  When this option is specified, no cookie will be emitted to a
  1752.               client which already has a valid one for the server which has
  1753.               processed the request. If the server sets such a cookie itself,
  1754.               it will be removed, unless the "preserve" option is also set. In
  1755.               "insert" mode, this will additionally remove cookies from the
  1756.               requests transmitted to the server, making the persistence
  1757.               mechanism totally transparent from an application point of view.
  1758.  
  1759.     nocache   This option is recommended in conjunction with the insert mode
  1760.               when there is a cache between the client and HAProxy, as it
  1761.               ensures that a cacheable response will be tagged non-cacheable if
  1762.               a cookie needs to be inserted. This is important because if all
  1763.               persistence cookies are added on a cacheable home page for
  1764.               instance, then all customers will then fetch the page from an
  1765.               outer cache and will all share the same persistence cookie,
  1766.               leading to one server receiving much more traffic than others.
  1767.               See also the "insert" and "postonly" options.
  1768.  
  1769.     postonly  This option ensures that cookie insertion will only be performed
  1770.               on responses to POST requests. It is an alternative to the
  1771.               "nocache" option, because POST responses are not cacheable, so
  1772.               this ensures that the persistence cookie will never get cached.
  1773.               Since most sites do not need any sort of persistence before the
  1774.               first POST which generally is a login request, this is a very
  1775.               efficient method to optimize caching without risking to find a
  1776.               persistence cookie in the cache.
  1777.               See also the "insert" and "nocache" options.
  1778.  
  1779.     preserve  This option may only be used with "insert" and/or "indirect". It
  1780.               allows the server to emit the persistence cookie itself. In this
  1781.               case, if a cookie is found in the response, haproxy will leave it
  1782.               untouched. This is useful in order to end persistence after a
  1783.               logout request for instance. For this, the server just has to
  1784.               emit a cookie with an invalid value (eg: empty) or with a date in
  1785.               the past. By combining this mechanism with the "disable-on-404"
  1786.               check option, it is possible to perform a completely graceful
  1787.               shutdown because users will definitely leave the server after
  1788.               they logout.
  1789.  
  1790.     httponly  This option tells haproxy to add an "HttpOnly" cookie attribute
  1791.               when a cookie is inserted. This attribute is used so that a
  1792.               user agent doesn't share the cookie with non-HTTP components.
  1793.               Please check RFC6265 for more information on this attribute.
  1794.  
  1795.     secure    This option tells haproxy to add a "Secure" cookie attribute when
  1796.               a cookie is inserted. This attribute is used so that a user agent
  1797.               never emits this cookie over non-secure channels, which means
  1798.               that a cookie learned with this flag will be presented only over
  1799.               SSL/TLS connections. Please check RFC6265 for more information on
  1800.               this attribute.
  1801.  
  1802.     domain    This option allows to specify the domain at which a cookie is
  1803.               inserted. It requires exactly one parameter: a valid domain
  1804.               name. If the domain begins with a dot, the browser is allowed to
  1805.               use it for any host ending with that name. It is also possible to
  1806.               specify several domain names by invoking this option multiple
  1807.               times. Some browsers might have small limits on the number of
  1808.               domains, so be careful when doing that. For the record, sending
  1809.               10 domains to MSIE 6 or Firefox 2 works as expected.
  1810.  
  1811.     maxidle   This option allows inserted cookies to be ignored after some idle
  1812.               time. It only works with insert-mode cookies. When a cookie is
  1813.               sent to the client, the date this cookie was emitted is sent too.
  1814.               Upon further presentations of this cookie, if the date is older
  1815.               than the delay indicated by the parameter (in seconds), it will
  1816.               be ignored. Otherwise, it will be refreshed if needed when the
  1817.               response is sent to the client. This is particularly useful to
  1818.               prevent users who never close their browsers from remaining for
  1819.               too long on the same server (eg: after a farm size change). When
  1820.               this option is set and a cookie has no date, it is always
  1821.               accepted, but gets refreshed in the response. This maintains the
  1822.               ability for admins to access their sites. Cookies that have a
  1823.               date in the future further than 24 hours are ignored. Doing so
  1824.               lets admins fix timezone issues without risking kicking users off
  1825.               the site.
  1826.  
  1827.     maxlife   This option allows inserted cookies to be ignored after some life
  1828.               time, whether they're in use or not. It only works with insert
  1829.               mode cookies. When a cookie is first sent to the client, the date
  1830.               this cookie was emitted is sent too. Upon further presentations
  1831.               of this cookie, if the date is older than the delay indicated by
  1832.               the parameter (in seconds), it will be ignored. If the cookie in
  1833.               the request has no date, it is accepted and a date will be set.
  1834.               Cookies that have a date in the future further than 24 hours are
  1835.               ignored. Doing so lets admins fix timezone issues without risking
  1836.               kicking users off the site. Contrary to maxidle, this value is
  1837.               not refreshed, only the first visit date counts. Both maxidle and
  1838.               maxlife may be used at the time. This is particularly useful to
  1839.               prevent users who never close their browsers from remaining for
  1840.               too long on the same server (eg: after a farm size change). This
  1841.               is stronger than the maxidle method in that it forces a
  1842.               redispatch after some absolute delay.
  1843.  
  1844.   There can be only one persistence cookie per HTTP backend, and it can be
  1845.   declared in a defaults section. The value of the cookie will be the value
  1846.   indicated after the "cookie" keyword in a "server" statement. If no cookie
  1847.   is declared for a given server, the cookie is not set.
  1848.  
  1849.   Examples :
  1850.         cookie JSESSIONID prefix
  1851.         cookie SRV insert indirect nocache
  1852.         cookie SRV insert postonly indirect
  1853.         cookie SRV insert indirect nocache maxidle 30m maxlife 8h
  1854.  
  1855.   See also : "appsession", "balance source", "capture cookie", "server"
  1856.              and "ignore-persist".
  1857.  
  1858.  
  1859. default-server [param*]
  1860.   Change default options for a server in a backend
  1861.   May be used in sections :   defaults | frontend | listen | backend
  1862.                                  yes   |    no    |   yes  |   yes
  1863.   Arguments:
  1864.     <param*>  is a list of parameters for this server. The "default-server"
  1865.               keyword accepts an important number of options and has a complete
  1866.               section dedicated to it. Please refer to section 5 for more
  1867.               details.
  1868.  
  1869.   Example :
  1870.         default-server inter 1000 weight 13
  1871.  
  1872.   See also: "server" and section 5 about server options
  1873.  
  1874.  
  1875. default_backend <backend>
  1876.   Specify the backend to use when no "use_backend" rule has been matched.
  1877.   May be used in sections :   defaults | frontend | listen | backend
  1878.                                  yes   |    yes   |   yes  |   no
  1879.   Arguments :
  1880.     <backend> is the name of the backend to use.
  1881.  
  1882.   When doing content-switching between frontend and backends using the
  1883.   "use_backend" keyword, it is often useful to indicate which backend will be
  1884.   used when no rule has matched. It generally is the dynamic backend which
  1885.   will catch all undetermined requests.
  1886.  
  1887.   Example :
  1888.  
  1889.         use_backend     dynamic  if  url_dyn
  1890.         use_backend     static   if  url_css url_img extension_img
  1891.         default_backend dynamic
  1892.  
  1893.   See also : "use_backend", "reqsetbe", "reqisetbe"
  1894.  
  1895.  
  1896. disabled
  1897.   Disable a proxy, frontend or backend.
  1898.   May be used in sections :   defaults | frontend | listen | backend
  1899.                                  yes   |    yes   |   yes  |   yes
  1900.   Arguments :
  1901.  
  1902.   The "disabled" keyword is used to disable an instance, mainly in order to
  1903.   liberate a listening port or to temporarily disable a service. The instance
  1904.   will still be created and its configuration will be checked, but it will be
  1905.   created in the "stopped" state and will appear as such in the statistics. It
  1906.   will not receive any traffic nor will it send any health-checks or logs. It
  1907.   is possible to disable many instances at once by adding the "disabled"
  1908.   keyword in a "defaults" section.
  1909.  
  1910.   See also : "enabled"
  1911.  
  1912.  
  1913. dispatch <address>:<port>
  1914.   Set a default server address
  1915.   May be used in sections :   defaults | frontend | listen | backend
  1916.                                  no    |    no    |   yes  |   yes
  1917.   Arguments : none
  1918.  
  1919.     <address> is the IPv4 address of the default server. Alternatively, a
  1920.               resolvable hostname is supported, but this name will be resolved
  1921.               during start-up.
  1922.  
  1923.     <ports>   is a mandatory port specification. All connections will be sent
  1924.               to this port, and it is not permitted to use port offsets as is
  1925.               possible with normal servers.
  1926.  
  1927.   The "dispatch" keyword designates a default server for use when no other
  1928.   server can take the connection. In the past it was used to forward non
  1929.   persistent connections to an auxiliary load balancer. Due to its simple
  1930.   syntax, it has also been used for simple TCP relays. It is recommended not to
  1931.   use it for more clarity, and to use the "server" directive instead.
  1932.  
  1933.   See also : "server"
  1934.  
  1935.  
  1936. enabled
  1937.   Enable a proxy, frontend or backend.
  1938.   May be used in sections :   defaults | frontend | listen | backend
  1939.                                  yes   |    yes   |   yes  |   yes
  1940.   Arguments : none
  1941.  
  1942.   The "enabled" keyword is used to explicitly enable an instance, when the
  1943.   defaults has been set to "disabled". This is very rarely used.
  1944.  
  1945.   See also : "disabled"
  1946.  
  1947.  
  1948. errorfile <code> <file>
  1949.   Return a file contents instead of errors generated by HAProxy
  1950.   May be used in sections :   defaults | frontend | listen | backend
  1951.                                  yes   |    yes   |   yes  |   yes
  1952.   Arguments :
  1953.     <code>    is the HTTP status code. Currently, HAProxy is capable of
  1954.               generating codes 200, 400, 403, 408, 500, 502, 503, and 504.
  1955.  
  1956.     <file>    designates a file containing the full HTTP response. It is
  1957.               recommended to follow the common practice of appending ".http" to
  1958.               the filename so that people do not confuse the response with HTML
  1959.               error pages, and to use absolute paths, since files are read
  1960.               before any chroot is performed.
  1961.  
  1962.   It is important to understand that this keyword is not meant to rewrite
  1963.   errors returned by the server, but errors detected and returned by HAProxy.
  1964.   This is why the list of supported errors is limited to a small set.
  1965.  
  1966.   Code 200 is emitted in response to requests matching a "monitor-uri" rule.
  1967.  
  1968.   The files are returned verbatim on the TCP socket. This allows any trick such
  1969.   as redirections to another URL or site, as well as tricks to clean cookies,
  1970.   force enable or disable caching, etc... The package provides default error
  1971.   files returning the same contents as default errors.
  1972.  
  1973.   The files should not exceed the configured buffer size (BUFSIZE), which
  1974.   generally is 8 or 16 kB, otherwise they will be truncated. It is also wise
  1975.   not to put any reference to local contents (eg: images) in order to avoid
  1976.   loops between the client and HAProxy when all servers are down, causing an
  1977.   error to be returned instead of an image. For better HTTP compliance, it is
  1978.   recommended that all header lines end with CR-LF and not LF alone.
  1979.  
  1980.   The files are read at the same time as the configuration and kept in memory.
  1981.   For this reason, the errors continue to be returned even when the process is
  1982.   chrooted, and no file change is considered while the process is running. A
  1983.   simple method for developing those files consists in associating them to the
  1984.   403 status code and interrogating a blocked URL.
  1985.  
  1986.   See also : "errorloc", "errorloc302", "errorloc303"
  1987.  
  1988.   Example :
  1989.         errorfile 400 /etc/haproxy/errorfiles/400badreq.http
  1990.         errorfile 403 /etc/haproxy/errorfiles/403forbid.http
  1991.         errorfile 503 /etc/haproxy/errorfiles/503sorry.http
  1992.  
  1993.  
  1994. errorloc <code> <url>
  1995. errorloc302 <code> <url>
  1996.   Return an HTTP redirection to a URL instead of errors generated by HAProxy
  1997.   May be used in sections :   defaults | frontend | listen | backend
  1998.                                  yes   |    yes   |   yes  |   yes
  1999.   Arguments :
  2000.     <code>    is the HTTP status code. Currently, HAProxy is capable of
  2001.               generating codes 200, 400, 403, 408, 500, 502, 503, and 504.
  2002.  
  2003.     <url>     it is the exact contents of the "Location" header. It may contain
  2004.               either a relative URI to an error page hosted on the same site,
  2005.               or an absolute URI designating an error page on another site.
  2006.               Special care should be given to relative URIs to avoid redirect
  2007.               loops if the URI itself may generate the same error (eg: 500).
  2008.  
  2009.   It is important to understand that this keyword is not meant to rewrite
  2010.   errors returned by the server, but errors detected and returned by HAProxy.
  2011.   This is why the list of supported errors is limited to a small set.
  2012.  
  2013.   Code 200 is emitted in response to requests matching a "monitor-uri" rule.
  2014.  
  2015.   Note that both keyword return the HTTP 302 status code, which tells the
  2016.   client to fetch the designated URL using the same HTTP method. This can be
  2017.   quite problematic in case of non-GET methods such as POST, because the URL
  2018.   sent to the client might not be allowed for something other than GET. To
  2019.   workaround this problem, please use "errorloc303" which send the HTTP 303
  2020.   status code, indicating to the client that the URL must be fetched with a GET
  2021.   request.
  2022.  
  2023.   See also : "errorfile", "errorloc303"
  2024.  
  2025.  
  2026. errorloc303 <code> <url>
  2027.   Return an HTTP redirection to a URL instead of errors generated by HAProxy
  2028.   May be used in sections :   defaults | frontend | listen | backend
  2029.                                  yes   |    yes   |   yes  |   yes
  2030.   Arguments :
  2031.     <code>    is the HTTP status code. Currently, HAProxy is capable of
  2032.               generating codes 400, 403, 408, 500, 502, 503, and 504.
  2033.  
  2034.     <url>     it is the exact contents of the "Location" header. It may contain
  2035.               either a relative URI to an error page hosted on the same site,
  2036.               or an absolute URI designating an error page on another site.
  2037.               Special care should be given to relative URIs to avoid redirect
  2038.               loops if the URI itself may generate the same error (eg: 500).
  2039.  
  2040.   It is important to understand that this keyword is not meant to rewrite
  2041.   errors returned by the server, but errors detected and returned by HAProxy.
  2042.   This is why the list of supported errors is limited to a small set.
  2043.  
  2044.   Code 200 is emitted in response to requests matching a "monitor-uri" rule.
  2045.  
  2046.   Note that both keyword return the HTTP 303 status code, which tells the
  2047.   client to fetch the designated URL using the same HTTP GET method. This
  2048.   solves the usual problems associated with "errorloc" and the 302 code. It is
  2049.   possible that some very old browsers designed before HTTP/1.1 do not support
  2050.   it, but no such problem has been reported till now.
  2051.  
  2052.   See also : "errorfile", "errorloc", "errorloc302"
  2053.  
  2054.  
  2055. force-persist { if | unless } <condition>
  2056.   Declare a condition to force persistence on down servers
  2057.   May be used in sections:    defaults | frontend | listen | backend
  2058.                                   no   |    yes   |   yes  |   yes
  2059.  
  2060.   By default, requests are not dispatched to down servers. It is possible to
  2061.   force this using "option persist", but it is unconditional and redispatches
  2062.   to a valid server if "option redispatch" is set. That leaves with very little
  2063.   possibilities to force some requests to reach a server which is artificially
  2064.   marked down for maintenance operations.
  2065.  
  2066.   The "force-persist" statement allows one to declare various ACL-based
  2067.   conditions which, when met, will cause a request to ignore the down status of
  2068.   a server and still try to connect to it. That makes it possible to start a
  2069.   server, still replying an error to the health checks, and run a specially
  2070.   configured browser to test the service. Among the handy methods, one could
  2071.   use a specific source IP address, or a specific cookie. The cookie also has
  2072.   the advantage that it can easily be added/removed on the browser from a test
  2073.   page. Once the service is validated, it is then possible to open the service
  2074.   to the world by returning a valid response to health checks.
  2075.  
  2076.   The forced persistence is enabled when an "if" condition is met, or unless an
  2077.   "unless" condition is met. The final redispatch is always disabled when this
  2078.   is used.
  2079.  
  2080.   See also : "option redispatch", "ignore-persist", "persist",
  2081.              and section 7 about ACL usage.
  2082.  
  2083.  
  2084. fullconn <conns>
  2085.   Specify at what backend load the servers will reach their maxconn
  2086.   May be used in sections :   defaults | frontend | listen | backend
  2087.                                  yes   |    no    |   yes  |   yes
  2088.   Arguments :
  2089.     <conns>   is the number of connections on the backend which will make the
  2090.               servers use the maximal number of connections.
  2091.  
  2092.   When a server has a "maxconn" parameter specified, it means that its number
  2093.   of concurrent connections will never go higher. Additionally, if it has a
  2094.   "minconn" parameter, it indicates a dynamic limit following the backend's
  2095.   load. The server will then always accept at least <minconn> connections,
  2096.   never more than <maxconn>, and the limit will be on the ramp between both
  2097.   values when the backend has less than <conns> concurrent connections. This
  2098.   makes it possible to limit the load on the servers during normal loads, but
  2099.   push it further for important loads without overloading the servers during
  2100.   exceptional loads.
  2101.  
  2102.   Example :
  2103.      # The servers will accept between 100 and 1000 concurrent connections each
  2104.      # and the maximum of 1000 will be reached when the backend reaches 10000
  2105.      # connections.
  2106.      backend dynamic
  2107.         fullconn   10000
  2108.         server     srv1   dyn1:80 minconn 100 maxconn 1000
  2109.         server     srv2   dyn2:80 minconn 100 maxconn 1000
  2110.  
  2111.   See also : "maxconn", "server"
  2112.  
  2113.  
  2114. grace <time>
  2115.   Maintain a proxy operational for some time after a soft stop
  2116.   May be used in sections :   defaults | frontend | listen | backend
  2117.                                  yes   |    yes   |   yes  |   yes
  2118.   Arguments :
  2119.     <time>    is the time (by default in milliseconds) for which the instance
  2120.               will remain operational with the frontend sockets still listening
  2121.               when a soft-stop is received via the SIGUSR1 signal.
  2122.  
  2123.   This may be used to ensure that the services disappear in a certain order.
  2124.   This was designed so that frontends which are dedicated to monitoring by an
  2125.   external equipment fail immediately while other ones remain up for the time
  2126.   needed by the equipment to detect the failure.
  2127.  
  2128.   Note that currently, there is very little benefit in using this parameter,
  2129.   and it may in fact complicate the soft-reconfiguration process more than
  2130.   simplify it.
  2131.  
  2132.  
  2133. hash-type <method>
  2134.   Specify a method to use for mapping hashes to servers
  2135.   May be used in sections :   defaults | frontend | listen | backend
  2136.                                  yes   |    no    |   yes  |   yes
  2137.   Arguments :
  2138.     map-based   the hash table is a static array containing all alive servers.
  2139.                 The hashes will be very smooth, will consider weights, but will
  2140.                 be static in that weight changes while a server is up will be
  2141.                 ignored. This means that there will be no slow start. Also,
  2142.                 since a server is selected by its position in the array, most
  2143.                 mappings are changed when the server count changes. This means
  2144.                 that when a server goes up or down, or when a server is added
  2145.                 to a farm, most connections will be redistributed to different
  2146.                 servers. This can be inconvenient with caches for instance.
  2147.  
  2148.     consistent  the hash table is a tree filled with many occurrences of each
  2149.                 server. The hash key is looked up in the tree and the closest
  2150.                 server is chosen. This hash is dynamic, it supports changing
  2151.                 weights while the servers are up, so it is compatible with the
  2152.                 slow start feature. It has the advantage that when a server
  2153.                 goes up or down, only its associations are moved. When a server
  2154.                 is added to the farm, only a few part of the mappings are
  2155.                 redistributed, making it an ideal algorithm for caches.
  2156.                 However, due to its principle, the algorithm will never be very
  2157.                 smooth and it may sometimes be necessary to adjust a server's
  2158.                 weight or its ID to get a more balanced distribution. In order
  2159.                 to get the same distribution on multiple load balancers, it is
  2160.                 important that all servers have the same IDs.
  2161.  
  2162.   The default hash type is "map-based" and is recommended for most usages.
  2163.  
  2164.   See also : "balance", "server"
  2165.  
  2166.  
  2167. http-check disable-on-404
  2168.   Enable a maintenance mode upon HTTP/404 response to health-checks
  2169.   May be used in sections :   defaults | frontend | listen | backend
  2170.                                  yes   |    no    |   yes  |   yes
  2171.   Arguments : none
  2172.  
  2173.   When this option is set, a server which returns an HTTP code 404 will be
  2174.   excluded from further load-balancing, but will still receive persistent
  2175.   connections. This provides a very convenient method for Web administrators
  2176.   to perform a graceful shutdown of their servers. It is also important to note
  2177.   that a server which is detected as failed while it was in this mode will not
  2178.   generate an alert, just a notice. If the server responds 2xx or 3xx again, it
  2179.   will immediately be reinserted into the farm. The status on the stats page
  2180.   reports "NOLB" for a server in this mode. It is important to note that this
  2181.   option only works in conjunction with the "httpchk" option. If this option
  2182.   is used with "http-check expect", then it has precedence over it so that 404
  2183.   responses will still be considered as soft-stop.
  2184.  
  2185.   See also : "option httpchk", "http-check expect"
  2186.  
  2187.  
  2188. http-check expect [!] <match> <pattern>
  2189.   Make HTTP health checks consider reponse contents or specific status codes
  2190.   May be used in sections :   defaults | frontend | listen | backend
  2191.                                  yes   |    no    |   yes  |   yes
  2192.   Arguments :
  2193.     <match>   is a keyword indicating how to look for a specific pattern in the
  2194.               response. The keyword may be one of "status", "rstatus",
  2195.               "string", or "rstring". The keyword may be preceeded by an
  2196.               exclamation mark ("!") to negate the match. Spaces are allowed
  2197.               between the exclamation mark and the keyword. See below for more
  2198.               details on the supported keywords.
  2199.  
  2200.     <pattern> is the pattern to look for. It may be a string or a regular
  2201.               expression. If the pattern contains spaces, they must be escaped
  2202.               with the usual backslash ('\').
  2203.  
  2204.   By default, "option httpchk" considers that response statuses 2xx and 3xx
  2205.   are valid, and that others are invalid. When "http-check expect" is used,
  2206.   it defines what is considered valid or invalid. Only one "http-check"
  2207.   statement is supported in a backend. If a server fails to respond or times
  2208.   out, the check obviously fails. The available matches are :
  2209.  
  2210.     status <string> : test the exact string match for the HTTP status code.
  2211.                       A health check respose will be considered valid if the
  2212.                       response's status code is exactly this string. If the
  2213.                       "status" keyword is prefixed with "!", then the response
  2214.                       will be considered invalid if the status code matches.
  2215.  
  2216.     rstatus <regex> : test a regular expression for the HTTP status code.
  2217.                       A health check respose will be considered valid if the
  2218.                       response's status code matches the expression. If the
  2219.                       "rstatus" keyword is prefixed with "!", then the response
  2220.                       will be considered invalid if the status code matches.
  2221.                       This is mostly used to check for multiple codes.
  2222.  
  2223.     string <string> : test the exact string match in the HTTP response body.
  2224.                       A health check respose will be considered valid if the
  2225.                       response's body contains this exact string. If the
  2226.                       "string" keyword is prefixed with "!", then the response
  2227.                       will be considered invalid if the body contains this
  2228.                       string. This can be used to look for a mandatory word at
  2229.                       the end of a dynamic page, or to detect a failure when a
  2230.                       specific error appears on the check page (eg: a stack
  2231.                       trace).
  2232.  
  2233.     rstring <regex> : test a regular expression on the HTTP response body.
  2234.                       A health check respose will be considered valid if the
  2235.                       response's body matches this expression. If the "rstring"
  2236.                       keyword is prefixed with "!", then the response will be
  2237.                       considered invalid if the body matches the expression.
  2238.                       This can be used to look for a mandatory word at the end
  2239.                       of a dynamic page, or to detect a failure when a specific
  2240.                       error appears on the check page (eg: a stack trace).
  2241.  
  2242.   It is important to note that the responses will be limited to a certain size
  2243.   defined by the global "tune.chksize" option, which defaults to 16384 bytes.
  2244.   Thus, too large responses may not contain the mandatory pattern when using
  2245.   "string" or "rstring". If a large response is absolutely required, it is
  2246.   possible to change the default max size by setting the global variable.
  2247.   However, it is worth keeping in mind that parsing very large responses can
  2248.   waste some CPU cycles, especially when regular expressions are used, and that
  2249.   it is always better to focus the checks on smaller resources.
  2250.  
  2251.   Last, if "http-check expect" is combined with "http-check disable-on-404",
  2252.   then this last one has precedence when the server responds with 404.
  2253.  
  2254.   Examples :
  2255.          # only accept status 200 as valid
  2256.          http-check expect status 200
  2257.  
  2258.          # consider SQL errors as errors
  2259.          http-check expect ! string SQL\ Error
  2260.  
  2261.          # consider status 5xx only as errors
  2262.          http-check expect ! rstatus ^5
  2263.  
  2264.          # check that we have a correct hexadecimal tag before /html
  2265.          http-check expect rstring <!--tag:[0-9a-f]*</html>
  2266.  
  2267.   See also : "option httpchk", "http-check disable-on-404"
  2268.  
  2269.  
  2270. http-check send-state
  2271.   Enable emission of a state header with HTTP health checks
  2272.   May be used in sections :   defaults | frontend | listen | backend
  2273.                                  yes   |    no    |   yes  |   yes
  2274.   Arguments : none
  2275.  
  2276.   When this option is set, haproxy will systematically send a special header
  2277.   "X-Haproxy-Server-State" with a list of parameters indicating to each server
  2278.   how they are seen by haproxy. This can be used for instance when a server is
  2279.   manipulated without access to haproxy and the operator needs to know whether
  2280.   haproxy still sees it up or not, or if the server is the last one in a farm.
  2281.  
  2282.   The header is composed of fields delimited by semi-colons, the first of which
  2283.   is a word ("UP", "DOWN", "NOLB"), possibly followed by a number of valid
  2284.   checks on the total number before transition, just as appears in the stats
  2285.   interface. Next headers are in the form "<variable>=<value>", indicating in
  2286.   no specific order some values available in the stats interface :
  2287.     - a variable "name", containing the name of the backend followed by a slash
  2288.       ("/") then the name of the server. This can be used when a server is
  2289.       checked in multiple backends.
  2290.  
  2291.     - a variable "node" containing the name of the haproxy node, as set in the
  2292.       global "node" variable, otherwise the system's hostname if unspecified.
  2293.  
  2294.     - a variable "weight" indicating the weight of the server, a slash ("/")
  2295.       and the total weight of the farm (just counting usable servers). This
  2296.       helps to know if other servers are available to handle the load when this
  2297.       one fails.
  2298.  
  2299.     - a variable "scur" indicating the current number of concurrent connections
  2300.       on the server, followed by a slash ("/") then the total number of
  2301.       connections on all servers of the same backend.
  2302.  
  2303.     - a variable "qcur" indicating the current number of requests in the
  2304.       server's queue.
  2305.  
  2306.   Example of a header received by the application server :
  2307.     >>>  X-Haproxy-Server-State: UP 2/3; name=bck/srv2; node=lb1; weight=1/2; \
  2308.            scur=13/22; qcur=0
  2309.  
  2310.   See also : "option httpchk", "http-check disable-on-404"
  2311.  
  2312. http-request { allow | deny | auth [realm <realm>] }
  2313.              [ { if | unless } <condition> ]
  2314.   Access control for Layer 7 requests
  2315.  
  2316.   May be used in sections:   defaults | frontend | listen | backend
  2317.                                 no    |    yes   |   yes  |   yes
  2318.  
  2319.   These set of options allow to fine control access to a
  2320.   frontend/listen/backend. Each option may be followed by if/unless and acl.
  2321.   First option with matched condition (or option without condition) is final.
  2322.   For "deny" a 403 error will be returned, for "allow" normal processing is
  2323.   performed, for "auth" a 401/407 error code is returned so the client
  2324.   should be asked to enter a username and password.
  2325.  
  2326.   There is no fixed limit to the number of http-request statements per
  2327.   instance.
  2328.  
  2329.   Example:
  2330.         acl nagios src 192.168.129.3
  2331.         acl local_net src 192.168.0.0/16
  2332.         acl auth_ok http_auth(L1)
  2333.  
  2334.         http-request allow if nagios
  2335.         http-request allow if local_net auth_ok
  2336.         http-request auth realm Gimme if local_net auth_ok
  2337.         http-request deny
  2338.  
  2339.   Example:
  2340.         acl auth_ok http_auth_group(L1) G1
  2341.  
  2342.         http-request auth unless auth_ok
  2343.  
  2344.   See also : "stats http-request", section 3.4 about userlists and section 7
  2345.              about ACL usage.
  2346.  
  2347. http-send-name-header [<header>]
  2348.   Add the server name to a request. Use the header string given by <header>
  2349.  
  2350.   May be used in sections:   defaults | frontend | listen | backend
  2351.                                yes    |    no    |   yes  |   yes
  2352.  
  2353.   Arguments :
  2354.  
  2355.     <header>  The header string to use to send the server name
  2356.  
  2357.   The "http-send-name-header" statement causes the name of the target
  2358.   server to be added to the headers of an HTTP request.  The name
  2359.   is added with the header string proved.
  2360.  
  2361.   See also : "server"
  2362.  
  2363. id <value>
  2364.   Set a persistent ID to a proxy.
  2365.   May be used in sections :   defaults | frontend | listen | backend
  2366.                                   no   |    yes   |   yes  |   yes
  2367.   Arguments : none
  2368.  
  2369.   Set a persistent ID for the proxy. This ID must be unique and positive.
  2370.   An unused ID will automatically be assigned if unset. The first assigned
  2371.   value will be 1. This ID is currently only returned in statistics.
  2372.  
  2373.  
  2374. ignore-persist { if | unless } <condition>
  2375.   Declare a condition to ignore persistence
  2376.   May be used in sections:    defaults | frontend | listen | backend
  2377.                                   no   |    yes   |   yes  |   yes
  2378.  
  2379.   By default, when cookie persistence is enabled, every requests containing
  2380.   the cookie are unconditionally persistent (assuming the target server is up
  2381.   and running).
  2382.  
  2383.   The "ignore-persist" statement allows one to declare various ACL-based
  2384.   conditions which, when met, will cause a request to ignore persistence.
  2385.   This is sometimes useful to load balance requests for static files, which
  2386.   oftenly don't require persistence. This can also be used to fully disable
  2387.   persistence for a specific User-Agent (for example, some web crawler bots).
  2388.  
  2389.   Combined with "appsession", it can also help reduce HAProxy memory usage, as
  2390.   the appsession table won't grow if persistence is ignored.
  2391.  
  2392.   The persistence is ignored when an "if" condition is met, or unless an
  2393.   "unless" condition is met.
  2394.  
  2395.   See also : "force-persist", "cookie", and section 7 about ACL usage.
  2396.  
  2397.  
  2398. log global
  2399. log <address> <facility> [<level> [<minlevel>]]
  2400.   Enable per-instance logging of events and traffic.
  2401.   May be used in sections :   defaults | frontend | listen | backend
  2402.                                  yes   |    yes   |   yes  |   yes
  2403.   Arguments :
  2404.     global     should be used when the instance's logging parameters are the
  2405.                same as the global ones. This is the most common usage. "global"
  2406.                replaces <address>, <facility> and <level> with those of the log
  2407.                entries found in the "global" section. Only one "log global"
  2408.                statement may be used per instance, and this form takes no other
  2409.                parameter.
  2410.  
  2411.     <address>  indicates where to send the logs. It takes the same format as
  2412.                for the "global" section's logs, and can be one of :
  2413.  
  2414.                - An IPv4 address optionally followed by a colon (':') and a UDP
  2415.                  port. If no port is specified, 514 is used by default (the
  2416.                  standard syslog port).
  2417.  
  2418.                - A filesystem path to a UNIX domain socket, keeping in mind
  2419.                  considerations for chroot (be sure the path is accessible
  2420.                  inside the chroot) and uid/gid (be sure the path is
  2421.                  appropriately writeable).
  2422.  
  2423.     <facility> must be one of the 24 standard syslog facilities :
  2424.  
  2425.                  kern   user   mail   daemon auth   syslog lpr    news
  2426.                  uucp   cron   auth2  ftp    ntp    audit  alert  cron2
  2427.                  local0 local1 local2 local3 local4 local5 local6 local7
  2428.  
  2429.     <level>    is optional and can be specified to filter outgoing messages. By
  2430.                default, all messages are sent. If a level is specified, only
  2431.                messages with a severity at least as important as this level
  2432.                will be sent. An optional minimum level can be specified. If it
  2433.                is set, logs emitted with a more severe level than this one will
  2434.                be capped to this level. This is used to avoid sending "emerg"
  2435.                messages on all terminals on some default syslog configurations.
  2436.                Eight levels are known :
  2437.  
  2438.                  emerg  alert  crit   err    warning notice info  debug
  2439.  
  2440.   Note that up to two "log" entries may be specified per instance. However, if
  2441.   "log global" is used and if the "global" section already contains 2 log
  2442.   entries, then additional log entries will be ignored.
  2443.  
  2444.   Also, it is important to keep in mind that it is the frontend which decides
  2445.   what to log from a connection, and that in case of content switching, the log
  2446.   entries from the backend will be ignored. Connections are logged at level
  2447.   "info".
  2448.  
  2449.   However, backend log declaration define how and where servers status changes
  2450.   will be logged. Level "notice" will be used to indicate a server going up,
  2451.   "warning" will be used for termination signals and definitive service
  2452.   termination, and "alert" will be used for when a server goes down.
  2453.  
  2454.   Note : According to RFC3164, messages are truncated to 1024 bytes before
  2455.          being emitted.
  2456.  
  2457.   Example :
  2458.     log global
  2459.     log 127.0.0.1:514 local0 notice         # only send important events
  2460.     log 127.0.0.1:514 local0 notice notice  # same but limit output level
  2461.  
  2462.  
  2463. maxconn <conns>
  2464.   Fix the maximum number of concurrent connections on a frontend
  2465.   May be used in sections :   defaults | frontend | listen | backend
  2466.                                  yes   |    yes   |   yes  |   no
  2467.   Arguments :
  2468.     <conns>   is the maximum number of concurrent connections the frontend will
  2469.               accept to serve. Excess connections will be queued by the system
  2470.               in the socket's listen queue and will be served once a connection
  2471.               closes.
  2472.  
  2473.   If the system supports it, it can be useful on big sites to raise this limit
  2474.   very high so that haproxy manages connection queues, instead of leaving the
  2475.   clients with unanswered connection attempts. This value should not exceed the
  2476.   global maxconn. Also, keep in mind that a connection contains two buffers
  2477.   of 8kB each, as well as some other data resulting in about 17 kB of RAM being
  2478.   consumed per established connection. That means that a medium system equipped
  2479.   with 1GB of RAM can withstand around 40000-50000 concurrent connections if
  2480.   properly tuned.
  2481.  
  2482.   Also, when <conns> is set to large values, it is possible that the servers
  2483.   are not sized to accept such loads, and for this reason it is generally wise
  2484.   to assign them some reasonable connection limits.
  2485.  
  2486.   By default, this value is set to 2000.
  2487.  
  2488.   See also : "server", global section's "maxconn", "fullconn"
  2489.  
  2490.  
  2491. mode { tcp|http|health }
  2492.   Set the running mode or protocol of the instance
  2493.   May be used in sections :   defaults | frontend | listen | backend
  2494.                                  yes   |    yes   |   yes  |   yes
  2495.   Arguments :
  2496.     tcp       The instance will work in pure TCP mode. A full-duplex connection
  2497.               will be established between clients and servers, and no layer 7
  2498.               examination will be performed. This is the default mode. It
  2499.               should be used for SSL, SSH, SMTP, ...
  2500.  
  2501.     http      The instance will work in HTTP mode. The client request will be
  2502.               analyzed in depth before connecting to any server. Any request
  2503.               which is not RFC-compliant will be rejected. Layer 7 filtering,
  2504.               processing and switching will be possible. This is the mode which
  2505.               brings HAProxy most of its value.
  2506.  
  2507.     health    The instance will work in "health" mode. It will just reply "OK"
  2508.               to incoming connections and close the connection. Nothing will be
  2509.               logged. This mode is used to reply to external components health
  2510.               checks. This mode is deprecated and should not be used anymore as
  2511.               it is possible to do the same and even better by combining TCP or
  2512.               HTTP modes with the "monitor" keyword.
  2513.  
  2514.   When doing content switching, it is mandatory that the frontend and the
  2515.   backend are in the same mode (generally HTTP), otherwise the configuration
  2516.   will be refused.
  2517.  
  2518.   Example :
  2519.      defaults http_instances
  2520.          mode http
  2521.  
  2522.   See also : "monitor", "monitor-net"
  2523.  
  2524.  
  2525. monitor fail { if | unless } <condition>
  2526.   Add a condition to report a failure to a monitor HTTP request.
  2527.   May be used in sections :   defaults | frontend | listen | backend
  2528.                                  no    |    yes   |   yes  |   no
  2529.   Arguments :
  2530.     if <cond>     the monitor request will fail if the condition is satisfied,
  2531.                   and will succeed otherwise. The condition should describe a
  2532.                   combined test which must induce a failure if all conditions
  2533.                   are met, for instance a low number of servers both in a
  2534.                   backend and its backup.
  2535.  
  2536.     unless <cond> the monitor request will succeed only if the condition is
  2537.                   satisfied, and will fail otherwise. Such a condition may be
  2538.                   based on a test on the presence of a minimum number of active
  2539.                   servers in a list of backends.
  2540.  
  2541.   This statement adds a condition which can force the response to a monitor
  2542.   request to report a failure. By default, when an external component queries
  2543.   the URI dedicated to monitoring, a 200 response is returned. When one of the
  2544.   conditions above is met, haproxy will return 503 instead of 200. This is
  2545.   very useful to report a site failure to an external component which may base
  2546.   routing advertisements between multiple sites on the availability reported by
  2547.   haproxy. In this case, one would rely on an ACL involving the "nbsrv"
  2548.   criterion. Note that "monitor fail" only works in HTTP mode. Both status
  2549.   messages may be tweaked using "errorfile" or "errorloc" if needed.
  2550.  
  2551.   Example:
  2552.      frontend www
  2553.         mode http
  2554.         acl site_dead nbsrv(dynamic) lt 2
  2555.         acl site_dead nbsrv(static)  lt 2
  2556.         monitor-uri   /site_alive
  2557.         monitor fail  if site_dead
  2558.  
  2559.   See also : "monitor-net", "monitor-uri", "errorfile", "errorloc"
  2560.  
  2561.  
  2562. monitor-net <source>
  2563.   Declare a source network which is limited to monitor requests
  2564.   May be used in sections :   defaults | frontend | listen | backend
  2565.                                  yes   |    yes   |   yes  |   no
  2566.   Arguments :
  2567.     <source>  is the source IPv4 address or network which will only be able to
  2568.               get monitor responses to any request. It can be either an IPv4
  2569.               address, a host name, or an address followed by a slash ('/')
  2570.               followed by a mask.
  2571.  
  2572.   In TCP mode, any connection coming from a source matching <source> will cause
  2573.   the connection to be immediately closed without any log. This allows another
  2574.   equipment to probe the port and verify that it is still listening, without
  2575.   forwarding the connection to a remote server.
  2576.  
  2577.   In HTTP mode, a connection coming from a source matching <source> will be
  2578.   accepted, the following response will be sent without waiting for a request,
  2579.   then the connection will be closed : "HTTP/1.0 200 OK". This is normally
  2580.   enough for any front-end HTTP probe to detect that the service is UP and
  2581.   running without forwarding the request to a backend server.
  2582.  
  2583.   Monitor requests are processed very early. It is not possible to block nor
  2584.   divert them using ACLs. They cannot be logged either, and it is the intended
  2585.   purpose. They are only used to report HAProxy's health to an upper component,
  2586.   nothing more. Right now, it is not possible to set failure conditions on
  2587.   requests caught by "monitor-net".
  2588.  
  2589.   Last, please note that only one "monitor-net" statement can be specified in
  2590.   a frontend. If more than one is found, only the last one will be considered.
  2591.  
  2592.   Example :
  2593.     # addresses .252 and .253 are just probing us.
  2594.     frontend www
  2595.         monitor-net 192.168.0.252/31
  2596.  
  2597.   See also : "monitor fail", "monitor-uri"
  2598.  
  2599.  
  2600. monitor-uri <uri>
  2601.   Intercept a URI used by external components' monitor requests
  2602.   May be used in sections :   defaults | frontend | listen | backend
  2603.                                  yes   |    yes   |   yes  |   no
  2604.   Arguments :
  2605.     <uri>     is the exact URI which we want to intercept to return HAProxy's
  2606.               health status instead of forwarding the request.
  2607.  
  2608.   When an HTTP request referencing <uri> will be received on a frontend,
  2609.   HAProxy will not forward it nor log it, but instead will return either
  2610.   "HTTP/1.0 200 OK" or "HTTP/1.0 503 Service unavailable", depending on failure
  2611.   conditions defined with "monitor fail". This is normally enough for any
  2612.   front-end HTTP probe to detect that the service is UP and running without
  2613.   forwarding the request to a backend server. Note that the HTTP method, the
  2614.   version and all headers are ignored, but the request must at least be valid
  2615.   at the HTTP level. This keyword may only be used with an HTTP-mode frontend.
  2616.  
  2617.   Monitor requests are processed very early. It is not possible to block nor
  2618.   divert them using ACLs. They cannot be logged either, and it is the intended
  2619.   purpose. They are only used to report HAProxy's health to an upper component,
  2620.   nothing more. However, it is possible to add any number of conditions using
  2621.   "monitor fail" and ACLs so that the result can be adjusted to whatever check
  2622.   can be imagined (most often the number of available servers in a backend).
  2623.  
  2624.   Example :
  2625.     # Use /haproxy_test to report haproxy's status
  2626.     frontend www
  2627.         mode http
  2628.         monitor-uri /haproxy_test
  2629.  
  2630.   See also : "monitor fail", "monitor-net"
  2631.  
  2632.  
  2633. option abortonclose
  2634. no option abortonclose
  2635.   Enable or disable early dropping of aborted requests pending in queues.
  2636.   May be used in sections :   defaults | frontend | listen | backend
  2637.                                  yes   |     no   |   yes  |   yes
  2638.   Arguments : none
  2639.  
  2640.   In presence of very high loads, the servers will take some time to respond.
  2641.   The per-instance connection queue will inflate, and the response time will
  2642.   increase respective to the size of the queue times the average per-session
  2643.   response time. When clients will wait for more than a few seconds, they will
  2644.   often hit the "STOP" button on their browser, leaving a useless request in
  2645.   the queue, and slowing down other users, and the servers as well, because the
  2646.   request will eventually be served, then aborted at the first error
  2647.   encountered while delivering the response.
  2648.  
  2649.   As there is no way to distinguish between a full STOP and a simple output
  2650.   close on the client side, HTTP agents should be conservative and consider
  2651.   that the client might only have closed its output channel while waiting for
  2652.   the response. However, this introduces risks of congestion when lots of users
  2653.   do the same, and is completely useless nowadays because probably no client at
  2654.   all will close the session while waiting for the response. Some HTTP agents
  2655.   support this behaviour (Squid, Apache, HAProxy), and others do not (TUX, most
  2656.   hardware-based load balancers). So the probability for a closed input channel
  2657.   to represent a user hitting the "STOP" button is close to 100%, and the risk
  2658.   of being the single component to break rare but valid traffic is extremely
  2659.   low, which adds to the temptation to be able to abort a session early while
  2660.   still not served and not pollute the servers.
  2661.  
  2662.   In HAProxy, the user can choose the desired behaviour using the option
  2663.   "abortonclose". By default (without the option) the behaviour is HTTP
  2664.   compliant and aborted requests will be served. But when the option is
  2665.   specified, a session with an incoming channel closed will be aborted while
  2666.   it is still possible, either pending in the queue for a connection slot, or
  2667.   during the connection establishment if the server has not yet acknowledged
  2668.   the connection request. This considerably reduces the queue size and the load
  2669.   on saturated servers when users are tempted to click on STOP, which in turn
  2670.   reduces the response time for other users.
  2671.  
  2672.   If this option has been enabled in a "defaults" section, it can be disabled
  2673.   in a specific instance by prepending the "no" keyword before it.
  2674.  
  2675.   See also : "timeout queue" and server's "maxconn" and "maxqueue" parameters
  2676.  
  2677.  
  2678. option accept-invalid-http-request
  2679. no option accept-invalid-http-request
  2680.   Enable or disable relaxing of HTTP request parsing
  2681.   May be used in sections :   defaults | frontend | listen | backend
  2682.                                  yes   |    yes   |   yes  |   no
  2683.   Arguments : none
  2684.  
  2685.   By default, HAProxy complies with RFC2616 in terms of message parsing. This
  2686.   means that invalid characters in header names are not permitted and cause an
  2687.   error to be returned to the client. This is the desired behaviour as such
  2688.   forbidden characters are essentially used to build attacks exploiting server
  2689.   weaknesses, and bypass security filtering. Sometimes, a buggy browser or
  2690.   server will emit invalid header names for whatever reason (configuration,
  2691.   implementation) and the issue will not be immediately fixed. In such a case,
  2692.   it is possible to relax HAProxy's header name parser to accept any character
  2693.   even if that does not make sense, by specifying this option.
  2694.  
  2695.   This option should never be enabled by default as it hides application bugs
  2696.   and open security breaches. It should only be deployed after a problem has
  2697.   been confirmed.
  2698.  
  2699.   When this option is enabled, erroneous header names will still be accepted in
  2700.   requests, but the complete request will be captured in order to permit later
  2701.   analysis using the "show errors" request on the UNIX stats socket. Doing this
  2702.   also helps confirming that the issue has been solved.
  2703.  
  2704.   If this option has been enabled in a "defaults" section, it can be disabled
  2705.   in a specific instance by prepending the "no" keyword before it.
  2706.  
  2707.   See also : "option accept-invalid-http-response" and "show errors" on the
  2708.              stats socket.
  2709.  
  2710.  
  2711. option accept-invalid-http-response
  2712. no option accept-invalid-http-response
  2713.   Enable or disable relaxing of HTTP response parsing
  2714.   May be used in sections :   defaults | frontend | listen | backend
  2715.                                  yes   |     no   |   yes  |   yes
  2716.   Arguments : none
  2717.  
  2718.   By default, HAProxy complies with RFC2616 in terms of message parsing. This
  2719.   means that invalid characters in header names are not permitted and cause an
  2720.   error to be returned to the client. This is the desired behaviour as such
  2721.   forbidden characters are essentially used to build attacks exploiting server
  2722.   weaknesses, and bypass security filtering. Sometimes, a buggy browser or
  2723.   server will emit invalid header names for whatever reason (configuration,
  2724.   implementation) and the issue will not be immediately fixed. In such a case,
  2725.   it is possible to relax HAProxy's header name parser to accept any character
  2726.   even if that does not make sense, by specifying this option.
  2727.  
  2728.   This option should never be enabled by default as it hides application bugs
  2729.   and open security breaches. It should only be deployed after a problem has
  2730.   been confirmed.
  2731.  
  2732.   When this option is enabled, erroneous header names will still be accepted in
  2733.   responses, but the complete response will be captured in order to permit
  2734.   later analysis using the "show errors" request on the UNIX stats socket.
  2735.   Doing this also helps confirming that the issue has been solved.
  2736.  
  2737.   If this option has been enabled in a "defaults" section, it can be disabled
  2738.   in a specific instance by prepending the "no" keyword before it.
  2739.  
  2740.   See also : "option accept-invalid-http-request" and "show errors" on the
  2741.              stats socket.
  2742.  
  2743.  
  2744. option allbackups
  2745. no option allbackups
  2746.   Use either all backup servers at a time or only the first one
  2747.   May be used in sections :   defaults | frontend | listen | backend
  2748.                                  yes   |     no   |   yes  |   yes
  2749.   Arguments : none
  2750.  
  2751.   By default, the first operational backup server gets all traffic when normal
  2752.   servers are all down. Sometimes, it may be preferred to use multiple backups
  2753.   at once, because one will not be enough. When "option allbackups" is enabled,
  2754.   the load balancing will be performed among all backup servers when all normal
  2755.   ones are unavailable. The same load balancing algorithm will be used and the
  2756.   servers' weights will be respected. Thus, there will not be any priority
  2757.   order between the backup servers anymore.
  2758.  
  2759.   This option is mostly used with static server farms dedicated to return a
  2760.   "sorry" page when an application is completely offline.
  2761.  
  2762.   If this option has been enabled in a "defaults" section, it can be disabled
  2763.   in a specific instance by prepending the "no" keyword before it.
  2764.  
  2765.  
  2766. option checkcache
  2767. no option checkcache
  2768.   Analyze all server responses and block requests with cacheable cookies
  2769.   May be used in sections :   defaults | frontend | listen | backend
  2770.                                  yes   |     no   |   yes  |   yes
  2771.   Arguments : none
  2772.  
  2773.   Some high-level frameworks set application cookies everywhere and do not
  2774.   always let enough control to the developer to manage how the responses should
  2775.   be cached. When a session cookie is returned on a cacheable object, there is a
  2776.   high risk of session crossing or stealing between users traversing the same
  2777.   caches. In some situations, it is better to block the response than to let
  2778.   some sensitive session information go in the wild.
  2779.  
  2780.   The option "checkcache" enables deep inspection of all server responses for
  2781.   strict compliance with HTTP specification in terms of cacheability. It
  2782.   carefully checks "Cache-control", "Pragma" and "Set-cookie" headers in server
  2783.   response to check if there's a risk of caching a cookie on a client-side
  2784.   proxy. When this option is enabled, the only responses which can be delivered
  2785.   to the client are :
  2786.     - all those without "Set-Cookie" header ;
  2787.     - all those with a return code other than 200, 203, 206, 300, 301, 410,
  2788.       provided that the server has not set a "Cache-control: public" header ;
  2789.     - all those that come from a POST request, provided that the server has not
  2790.       set a 'Cache-Control: public' header ;
  2791.     - those with a 'Pragma: no-cache' header
  2792.     - those with a 'Cache-control: private' header
  2793.     - those with a 'Cache-control: no-store' header
  2794.     - those with a 'Cache-control: max-age=0' header
  2795.     - those with a 'Cache-control: s-maxage=0' header
  2796.     - those with a 'Cache-control: no-cache' header
  2797.     - those with a 'Cache-control: no-cache="set-cookie"' header
  2798.     - those with a 'Cache-control: no-cache="set-cookie,' header
  2799.       (allowing other fields after set-cookie)
  2800.  
  2801.   If a response doesn't respect these requirements, then it will be blocked
  2802.   just as if it was from an "rspdeny" filter, with an "HTTP 502 bad gateway".
  2803.   The session state shows "PH--" meaning that the proxy blocked the response
  2804.   during headers processing. Additionally, an alert will be sent in the logs so
  2805.   that admins are informed that there's something to be fixed.
  2806.  
  2807.   Due to the high impact on the application, the application should be tested
  2808.   in depth with the option enabled before going to production. It is also a
  2809.   good practice to always activate it during tests, even if it is not used in
  2810.   production, as it will report potentially dangerous application behaviours.
  2811.  
  2812.   If this option has been enabled in a "defaults" section, it can be disabled
  2813.   in a specific instance by prepending the "no" keyword before it.
  2814.  
  2815.  
  2816. option clitcpka
  2817. no option clitcpka
  2818.   Enable or disable the sending of TCP keepalive packets on the client side
  2819.   May be used in sections :   defaults | frontend | listen | backend
  2820.                                  yes   |    yes   |   yes  |   no
  2821.   Arguments : none
  2822.  
  2823.   When there is a firewall or any session-aware component between a client and
  2824.   a server, and when the protocol involves very long sessions with long idle
  2825.   periods (eg: remote desktops), there is a risk that one of the intermediate
  2826.   components decides to expire a session which has remained idle for too long.
  2827.  
  2828.   Enabling socket-level TCP keep-alives makes the system regularly send packets
  2829.   to the other end of the connection, leaving it active. The delay between
  2830.   keep-alive probes is controlled by the system only and depends both on the
  2831.   operating system and its tuning parameters.
  2832.  
  2833.   It is important to understand that keep-alive packets are neither emitted nor
  2834.   received at the application level. It is only the network stacks which sees
  2835.   them. For this reason, even if one side of the proxy already uses keep-alives
  2836.   to maintain its connection alive, those keep-alive packets will not be
  2837.   forwarded to the other side of the proxy.
  2838.  
  2839.   Please note that this has nothing to do with HTTP keep-alive.
  2840.  
  2841.   Using option "clitcpka" enables the emission of TCP keep-alive probes on the
  2842.   client side of a connection, which should help when session expirations are
  2843.   noticed between HAProxy and a client.
  2844.  
  2845.   If this option has been enabled in a "defaults" section, it can be disabled
  2846.   in a specific instance by prepending the "no" keyword before it.
  2847.  
  2848.   See also : "option srvtcpka", "option tcpka"
  2849.  
  2850.  
  2851. option contstats
  2852.   Enable continuous traffic statistics updates
  2853.   May be used in sections :   defaults | frontend | listen | backend
  2854.                                  yes   |    yes   |   yes  |   no
  2855.   Arguments : none
  2856.  
  2857.   By default, counters used for statistics calculation are incremented
  2858.   only when a session finishes. It works quite well when serving small
  2859.   objects, but with big ones (for example large images or archives) or
  2860.   with A/V streaming, a graph generated from haproxy counters looks like
  2861.   a hedgehog. With this option enabled counters get incremented continuously,
  2862.   during a whole session. Recounting touches a hotpath directly so
  2863.   it is not enabled by default, as it has small performance impact (~0.5%).
  2864.  
  2865.  
  2866. option dontlog-normal
  2867. no option dontlog-normal
  2868.   Enable or disable logging of normal, successful connections
  2869.   May be used in sections :   defaults | frontend | listen | backend
  2870.                                  yes   |    yes   |   yes  |   no
  2871.   Arguments : none
  2872.  
  2873.   There are large sites dealing with several thousand connections per second
  2874.   and for which logging is a major pain. Some of them are even forced to turn
  2875.   logs off and cannot debug production issues. Setting this option ensures that
  2876.   normal connections, those which experience no error, no timeout, no retry nor
  2877.   redispatch, will not be logged. This leaves disk space for anomalies. In HTTP
  2878.   mode, the response status code is checked and return codes 5xx will still be
  2879.   logged.
  2880.  
  2881.   It is strongly discouraged to use this option as most of the time, the key to
  2882.   complex issues is in the normal logs which will not be logged here. If you
  2883.   need to separate logs, see the "log-separate-errors" option instead.
  2884.  
  2885.   See also : "log", "dontlognull", "log-separate-errors" and section 8 about
  2886.              logging.
  2887.  
  2888.  
  2889. option dontlognull
  2890. no option dontlognull
  2891.   Enable or disable logging of null connections
  2892.   May be used in sections :   defaults | frontend | listen | backend
  2893.                                  yes   |    yes   |   yes  |   no
  2894.   Arguments : none
  2895.  
  2896.   In certain environments, there are components which will regularly connect to
  2897.   various systems to ensure that they are still alive. It can be the case from
  2898.   another load balancer as well as from monitoring systems. By default, even a
  2899.   simple port probe or scan will produce a log. If those connections pollute
  2900.   the logs too much, it is possible to enable option "dontlognull" to indicate
  2901.   that a connection on which no data has been transferred will not be logged,
  2902.   which typically corresponds to those probes.
  2903.  
  2904.   It is generally recommended not to use this option in uncontrolled
  2905.   environments (eg: internet), otherwise scans and other malicious activities
  2906.   would not be logged.
  2907.  
  2908.   If this option has been enabled in a "defaults" section, it can be disabled
  2909.   in a specific instance by prepending the "no" keyword before it.
  2910.  
  2911.   See also : "log", "monitor-net", "monitor-uri" and section 8 about logging.
  2912.  
  2913.  
  2914. option forceclose
  2915. no option forceclose
  2916.   Enable or disable active connection closing after response is transferred.
  2917.   May be used in sections :   defaults | frontend | listen | backend
  2918.                                  yes   |    yes   |   yes  |   yes
  2919.   Arguments : none
  2920.  
  2921.   Some HTTP servers do not necessarily close the connections when they receive
  2922.   the "Connection: close" set by "option httpclose", and if the client does not
  2923.   close either, then the connection remains open till the timeout expires. This
  2924.   causes high number of simultaneous connections on the servers and shows high
  2925.   global session times in the logs.
  2926.  
  2927.   When this happens, it is possible to use "option forceclose". It will
  2928.   actively close the outgoing server channel as soon as the server has finished
  2929.   to respond. This option implicitly enables the "httpclose" option. Note that
  2930.   this option also enables the parsing of the full request and response, which
  2931.   means we can close the connection to the server very quickly, releasing some
  2932.   resources earlier than with httpclose.
  2933.  
  2934.   This option may also be combined with "option http-pretend-keepalive", which
  2935.   will disable sending of the "Connection: close" header, but will still cause
  2936.   the connection to be closed once the whole response is received.
  2937.  
  2938.   If this option has been enabled in a "defaults" section, it can be disabled
  2939.   in a specific instance by prepending the "no" keyword before it.
  2940.  
  2941.   See also : "option httpclose" and "option http-pretend-keepalive"
  2942.  
  2943.  
  2944. option forwardfor [ except <network> ] [ header <name> ] [ if-none ]
  2945.   Enable insertion of the X-Forwarded-For header to requests sent to servers
  2946.   May be used in sections :   defaults | frontend | listen | backend
  2947.                                  yes   |    yes   |   yes  |   yes
  2948.   Arguments :
  2949.     <network> is an optional argument used to disable this option for sources
  2950.               matching <network>
  2951.     <name>    an optional argument to specify a different "X-Forwarded-For"
  2952.               header name.
  2953.  
  2954.   Since HAProxy works in reverse-proxy mode, the servers see its IP address as
  2955.   their client address. This is sometimes annoying when the client's IP address
  2956.   is expected in server logs. To solve this problem, the well-known HTTP header
  2957.   "X-Forwarded-For" may be added by HAProxy to all requests sent to the server.
  2958.   This header contains a value representing the client's IP address. Since this
  2959.   header is always appended at the end of the existing header list, the server
  2960.   must be configured to always use the last occurrence of this header only. See
  2961.   the server's manual to find how to enable use of this standard header. Note
  2962.   that only the last occurrence of the header must be used, since it is really
  2963.   possible that the client has already brought one.
  2964.  
  2965.   The keyword "header" may be used to supply a different header name to replace
  2966.   the default "X-Forwarded-For". This can be useful where you might already
  2967.   have a "X-Forwarded-For" header from a different application (eg: stunnel),
  2968.   and you need preserve it. Also if your backend server doesn't use the
  2969.   "X-Forwarded-For" header and requires different one (eg: Zeus Web Servers
  2970.   require "X-Cluster-Client-IP").
  2971.  
  2972.   Sometimes, a same HAProxy instance may be shared between a direct client
  2973.   access and a reverse-proxy access (for instance when an SSL reverse-proxy is
  2974.   used to decrypt HTTPS traffic). It is possible to disable the addition of the
  2975.   header for a known source address or network by adding the "except" keyword
  2976.   followed by the network address. In this case, any source IP matching the
  2977.   network will not cause an addition of this header. Most common uses are with
  2978.   private networks or 127.0.0.1.
  2979.  
  2980.   Alternatively, the keyword "if-none" states that the header will only be
  2981.   added if it is not present. This should only be used in perfectly trusted
  2982.   environment, as this might cause a security issue if headers reaching haproxy
  2983.   are under the control of the end-user.
  2984.  
  2985.   This option may be specified either in the frontend or in the backend. If at
  2986.   least one of them uses it, the header will be added. Note that the backend's
  2987.   setting of the header subargument takes precedence over the frontend's if
  2988.   both are defined. In the case of the "if-none" argument, if at least one of
  2989.   the frontend or the backend does not specify it, it wants the addition to be
  2990.   mandatory, so it wins.
  2991.  
  2992.   It is important to note that by default, HAProxy works in tunnel mode and
  2993.   only inspects the first request of a connection, meaning that only the first
  2994.   request will have the header appended, which is certainly not what you want.
  2995.   In order to fix this, ensure that any of the "httpclose", "forceclose" or
  2996.   "http-server-close" options is set when using this option.
  2997.  
  2998.   Examples :
  2999.     # Public HTTP address also used by stunnel on the same machine
  3000.     frontend www
  3001.         mode http
  3002.         option forwardfor except 127.0.0.1  # stunnel already adds the header
  3003.  
  3004.     # Those servers want the IP Address in X-Client
  3005.     backend www
  3006.         mode http
  3007.         option forwardfor header X-Client
  3008.  
  3009.   See also : "option httpclose", "option http-server-close",
  3010.              "option forceclose"
  3011.  
  3012.  
  3013. option http-no-delay
  3014. no option http-no-delay
  3015.   Instruct the system to favor low interactive delays over performance in HTTP
  3016.   May be used in sections :   defaults | frontend | listen | backend
  3017.                                  yes   |    yes   |   yes  |   yes
  3018.   Arguments : none
  3019.  
  3020.   In HTTP, each payload is unidirectional and has no notion of interactivity.
  3021.   Any agent is expected to queue data somewhat for a reasonably low delay.
  3022.   There are some very rare server-to-server applications that abuse the HTTP
  3023.   protocol and expect the payload phase to be highly interactive, with many
  3024.   interleaved data chunks in both directions within a single request. This is
  3025.   absolutely not supported by the HTTP specification and will not work across
  3026.   most proxies or servers. When such applications attempt to do this through
  3027.   haproxy, it works but they will experience high delays due to the network
  3028.   optimizations which favor performance by instructing the system to wait for
  3029.   enough data to be available in order to only send full packets. Typical
  3030.   delays are around 200 ms per round trip. Note that this only happens with
  3031.   abnormal uses. Normal uses such as CONNECT requests nor WebSockets are not
  3032.   affected.
  3033.  
  3034.   When "option http-no-delay" is present in either the frontend or the backend
  3035.   used by a connection, all such optimizations will be disabled in order to
  3036.   make the exchanges as fast as possible. Of course this offers no guarantee on
  3037.   the functionality, as it may break at any other place. But if it works via
  3038.   HAProxy, it will work as fast as possible. This option should never be used
  3039.   by default, and should never be used at all unless such a buggy application
  3040.   is discovered. The impact of using this option is an increase of bandwidth
  3041.   usage and CPU usage, which may significantly lower performance in high
  3042.   latency environments.
  3043.  
  3044.  
  3045. option http-pretend-keepalive
  3046. no option http-pretend-keepalive
  3047.   Define whether haproxy will announce keepalive to the server or not
  3048.   May be used in sections :   defaults | frontend | listen | backend
  3049.                                  yes   |    yes   |   yes  |   yes
  3050.   Arguments : none
  3051.  
  3052.   When running with "option http-server-close" or "option forceclose", haproxy
  3053.   adds a "Connection: close" header to the request forwarded to the server.
  3054.   Unfortunately, when some servers see this header, they automatically refrain
  3055.   from using the chunked encoding for responses of unknown length, while this
  3056.   is totally unrelated. The immediate effect is that this prevents haproxy from
  3057.   maintaining the client connection alive. A second effect is that a client or
  3058.   a cache could receive an incomplete response without being aware of it, and
  3059.   consider the response complete.
  3060.  
  3061.   By setting "option http-pretend-keepalive", haproxy will make the server
  3062.   believe it will keep the connection alive. The server will then not fall back
  3063.   to the abnormal undesired above. When haproxy gets the whole response, it
  3064.   will close the connection with the server just as it would do with the
  3065.   "forceclose" option. That way the client gets a normal response and the
  3066.   connection is correctly closed on the server side.
  3067.  
  3068.   It is recommended not to enable this option by default, because most servers
  3069.   will more efficiently close the connection themselves after the last packet,
  3070.   and release its buffers slightly earlier. Also, the added packet on the
  3071.   network could slightly reduce the overall peak performance. However it is
  3072.   worth noting that when this option is enabled, haproxy will have slightly
  3073.   less work to do. So if haproxy is the bottleneck on the whole architecture,
  3074.   enabling this option might save a few CPU cycles.
  3075.  
  3076.   This option may be set both in a frontend and in a backend. It is enabled if
  3077.   at least one of the frontend or backend holding a connection has it enabled.
  3078.   This option may be compbined with "option httpclose", which will cause
  3079.   keepalive to be announced to the server and close to be announced to the
  3080.   client. This practice is discouraged though.
  3081.  
  3082.   If this option has been enabled in a "defaults" section, it can be disabled
  3083.   in a specific instance by prepending the "no" keyword before it.
  3084.  
  3085.   See also : "option forceclose" and "option http-server-close"
  3086.  
  3087.  
  3088. option http-server-close
  3089. no option http-server-close
  3090.   Enable or disable HTTP connection closing on the server side
  3091.   May be used in sections :   defaults | frontend | listen | backend
  3092.                                  yes   |    yes   |   yes  |   yes
  3093.   Arguments : none
  3094.  
  3095.   By default, when a client communicates with a server, HAProxy will only
  3096.   analyze, log, and process the first request of each connection. Setting
  3097.   "option http-server-close" enables HTTP connection-close mode on the server
  3098.   side while keeping the ability to support HTTP keep-alive and pipelining on
  3099.   the client side.  This provides the lowest latency on the client side (slow
  3100.   network) and the fastest session reuse on the server side to save server
  3101.   resources, similarly to "option forceclose". It also permits non-keepalive
  3102.   capable servers to be served in keep-alive mode to the clients if they
  3103.   conform to the requirements of RFC2616. Please note that some servers do not
  3104.   always conform to those requirements when they see "Connection: close" in the
  3105.   request. The effect will be that keep-alive will never be used. A workaround
  3106.   consists in enabling "option http-pretend-keepalive".
  3107.  
  3108.   At the moment, logs will not indicate whether requests came from the same
  3109.   session or not. The accept date reported in the logs corresponds to the end
  3110.   of the previous request, and the request time corresponds to the time spent
  3111.   waiting for a new request. The keep-alive request time is still bound to the
  3112.   timeout defined by "timeout http-keep-alive" or "timeout http-request" if
  3113.   not set.
  3114.  
  3115.   This option may be set both in a frontend and in a backend. It is enabled if
  3116.   at least one of the frontend or backend holding a connection has it enabled.
  3117.   It is worth noting that "option forceclose" has precedence over "option
  3118.   http-server-close" and that combining "http-server-close" with "httpclose"
  3119.   basically achieve the same result as "forceclose".
  3120.  
  3121.   If this option has been enabled in a "defaults" section, it can be disabled
  3122.   in a specific instance by prepending the "no" keyword before it.
  3123.  
  3124.   See also : "option forceclose", "option http-pretend-keepalive",
  3125.              "option httpclose" and "1.1. The HTTP transaction model".
  3126.  
  3127.  
  3128. option http-use-proxy-header
  3129. no option http-use-proxy-header
  3130.   Make use of non-standard Proxy-Connection header instead of Connection
  3131.   May be used in sections :   defaults | frontend | listen | backend
  3132.                                  yes   |    yes   |   yes  |   no
  3133.   Arguments : none
  3134.  
  3135.   While RFC2616 explicitly states that HTTP/1.1 agents must use the
  3136.   Connection header to indicate their wish of persistent or non-persistent
  3137.   connections, both browsers and proxies ignore this header for proxied
  3138.   connections and make use of the undocumented, non-standard Proxy-Connection
  3139.   header instead. The issue begins when trying to put a load balancer between
  3140.   browsers and such proxies, because there will be a difference between what
  3141.   haproxy understands and what the client and the proxy agree on.
  3142.  
  3143.   By setting this option in a frontend, haproxy can automatically switch to use
  3144.   that non-standard header if it sees proxied requests. A proxied request is
  3145.   defined here as one where the URI begins with neither a '/' nor a '*'. The
  3146.   choice of header only affects requests passing through proxies making use of
  3147.   one of the "httpclose", "forceclose" and "http-server-close" options. Note
  3148.   that this option can only be specified in a frontend and will affect the
  3149.   request along its whole life.
  3150.  
  3151.   Also, when this option is set, a request which requires authentication will
  3152.   automatically switch to use proxy authentication headers if it is itself a
  3153.   proxied request. That makes it possible to check or enforce authentication in
  3154.   front of an existing proxy.
  3155.  
  3156.   This option should normally never be used, except in front of a proxy.
  3157.  
  3158.   See also : "option httpclose", "option forceclose" and "option
  3159.              http-server-close".
  3160.  
  3161.  
  3162. option httpchk
  3163. option httpchk <uri>
  3164. option httpchk <method> <uri>
  3165. option httpchk <method> <uri> <version>
  3166.   Enable HTTP protocol to check on the servers health
  3167.   May be used in sections :   defaults | frontend | listen | backend
  3168.                                  yes   |    no    |   yes  |   yes
  3169.   Arguments :
  3170.     <method>  is the optional HTTP method used with the requests. When not set,
  3171.               the "OPTIONS" method is used, as it generally requires low server
  3172.               processing and is easy to filter out from the logs. Any method
  3173.               may be used, though it is not recommended to invent non-standard
  3174.               ones.
  3175.  
  3176.     <uri>     is the URI referenced in the HTTP requests. It defaults to " / "
  3177.               which is accessible by default on almost any server, but may be
  3178.               changed to any other URI. Query strings are permitted.
  3179.  
  3180.     <version> is the optional HTTP version string. It defaults to "HTTP/1.0"
  3181.               but some servers might behave incorrectly in HTTP 1.0, so turning
  3182.               it to HTTP/1.1 may sometimes help. Note that the Host field is
  3183.               mandatory in HTTP/1.1, and as a trick, it is possible to pass it
  3184.               after "\r\n" following the version string.
  3185.  
  3186.   By default, server health checks only consist in trying to establish a TCP
  3187.   connection. When "option httpchk" is specified, a complete HTTP request is
  3188.   sent once the TCP connection is established, and responses 2xx and 3xx are
  3189.   considered valid, while all other ones indicate a server failure, including
  3190.   the lack of any response.
  3191.  
  3192.   The port and interval are specified in the server configuration.
  3193.  
  3194.   This option does not necessarily require an HTTP backend, it also works with
  3195.   plain TCP backends. This is particularly useful to check simple scripts bound
  3196.   to some dedicated ports using the inetd daemon.
  3197.  
  3198.   Examples :
  3199.       # Relay HTTPS traffic to Apache instance and check service availability
  3200.       # using HTTP request "OPTIONS * HTTP/1.1" on port 80.
  3201.       backend https_relay
  3202.           mode tcp
  3203.           option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
  3204.           server apache1 192.168.1.1:443 check port 80
  3205.  
  3206.   See also : "option ssl-hello-chk", "option smtpchk", "option mysql-check",
  3207.              "http-check" and the "check", "port" and "inter" server options.
  3208.  
  3209.  
  3210. option httpclose
  3211. no option httpclose
  3212.   Enable or disable passive HTTP connection closing
  3213.   May be used in sections :   defaults | frontend | listen | backend
  3214.                                  yes   |    yes   |   yes  |   yes
  3215.   Arguments : none
  3216.  
  3217.   By default, when a client communicates with a server, HAProxy will only
  3218.   analyze, log, and process the first request of each connection. If "option
  3219.   httpclose" is set, it will check if a "Connection: close" header is already
  3220.   set in each direction, and will add one if missing. Each end should react to
  3221.   this by actively closing the TCP connection after each transfer, thus
  3222.   resulting in a switch to the HTTP close mode. Any "Connection" header
  3223.   different from "close" will also be removed.
  3224.  
  3225.   It seldom happens that some servers incorrectly ignore this header and do not
  3226.   close the connection eventhough they reply "Connection: close". For this
  3227.   reason, they are not compatible with older HTTP 1.0 browsers. If this happens
  3228.   it is possible to use the "option forceclose" which actively closes the
  3229.   request connection once the server responds. Option "forceclose" also
  3230.   releases the server connection earlier because it does not have to wait for
  3231.   the client to acknowledge it.
  3232.  
  3233.   This option may be set both in a frontend and in a backend. It is enabled if
  3234.   at least one of the frontend or backend holding a connection has it enabled.
  3235.   If "option forceclose" is specified too, it has precedence over "httpclose".
  3236.   If "option http-server-close" is enabled at the same time as "httpclose", it
  3237.   basically achieves the same result as "option forceclose".
  3238.  
  3239.   If this option has been enabled in a "defaults" section, it can be disabled
  3240.   in a specific instance by prepending the "no" keyword before it.
  3241.  
  3242.   See also : "option forceclose", "option http-server-close" and
  3243.              "1.1. The HTTP transaction model".
  3244.  
  3245.  
  3246. option httplog [ clf ]
  3247.   Enable logging of HTTP request, session state and timers
  3248.   May be used in sections :   defaults | frontend | listen | backend
  3249.                                  yes   |    yes   |   yes  |   yes
  3250.   Arguments :
  3251.     clf       if the "clf" argument is added, then the output format will be
  3252.               the CLF format instead of HAProxy's default HTTP format. You can
  3253.               use this when you need to feed HAProxy's logs through a specific
  3254.               log analyser which only support the CLF format and which is not
  3255.               extensible.
  3256.  
  3257.   By default, the log output format is very poor, as it only contains the
  3258.   source and destination addresses, and the instance name. By specifying
  3259.   "option httplog", each log line turns into a much richer format including,
  3260.   but not limited to, the HTTP request, the connection timers, the session
  3261.   status, the connections numbers, the captured headers and cookies, the
  3262.   frontend, backend and server name, and of course the source address and
  3263.   ports.
  3264.  
  3265.   This option may be set either in the frontend or the backend.
  3266.  
  3267.   If this option has been enabled in a "defaults" section, it can be disabled
  3268.   in a specific instance by prepending the "no" keyword before it. Specifying
  3269.   only "option httplog" will automatically clear the 'clf' mode if it was set
  3270.   by default.
  3271.  
  3272.   See also :  section 8 about logging.
  3273.  
  3274.  
  3275. option http_proxy
  3276. no option http_proxy
  3277.   Enable or disable plain HTTP proxy mode
  3278.   May be used in sections :   defaults | frontend | listen | backend
  3279.                                  yes   |    yes   |   yes  |   yes
  3280.   Arguments : none
  3281.  
  3282.   It sometimes happens that people need a pure HTTP proxy which understands
  3283.   basic proxy requests without caching nor any fancy feature. In this case,
  3284.   it may be worth setting up an HAProxy instance with the "option http_proxy"
  3285.   set. In this mode, no server is declared, and the connection is forwarded to
  3286.   the IP address and port found in the URL after the "http://" scheme.
  3287.  
  3288.   No host address resolution is performed, so this only works when pure IP
  3289.   addresses are passed. Since this option's usage perimeter is rather limited,
  3290.   it will probably be used only by experts who know they need exactly it. Last,
  3291.   if the clients are susceptible of sending keep-alive requests, it will be
  3292.   needed to add "option httpclose" to ensure that all requests will correctly
  3293.   be analyzed.
  3294.  
  3295.   If this option has been enabled in a "defaults" section, it can be disabled
  3296.   in a specific instance by prepending the "no" keyword before it.
  3297.  
  3298.   Example :
  3299.     # this backend understands HTTP proxy requests and forwards them directly.
  3300.     backend direct_forward
  3301.         option httpclose
  3302.         option http_proxy
  3303.  
  3304.   See also : "option httpclose"
  3305.  
  3306.  
  3307. option independant-streams
  3308. no option independant-streams
  3309.   Enable or disable independant timeout processing for both directions
  3310.   May be used in sections :   defaults | frontend | listen | backend
  3311.                                  yes   |    yes   |   yes  |  yes
  3312.   Arguments : none
  3313.  
  3314.   By default, when data is sent over a socket, both the write timeout and the
  3315.   read timeout for that socket are refreshed, because we consider that there is
  3316.   activity on that socket, and we have no other means of guessing if we should
  3317.   receive data or not.
  3318.  
  3319.   While this default behaviour is desirable for almost all applications, there
  3320.   exists a situation where it is desirable to disable it, and only refresh the
  3321.   read timeout if there are incoming data. This happens on sessions with large
  3322.   timeouts and low amounts of exchanged data such as telnet session. If the
  3323.   server suddenly disappears, the output data accumulates in the system's
  3324.   socket buffers, both timeouts are correctly refreshed, and there is no way
  3325.   to know the server does not receive them, so we don't timeout. However, when
  3326.   the underlying protocol always echoes sent data, it would be enough by itself
  3327.   to detect the issue using the read timeout. Note that this problem does not
  3328.   happen with more verbose protocols because data won't accumulate long in the
  3329.   socket buffers.
  3330.  
  3331.   When this option is set on the frontend, it will disable read timeout updates
  3332.   on data sent to the client. There probably is little use of this case. When
  3333.   the option is set on the backend, it will disable read timeout updates on
  3334.   data sent to the server. Doing so will typically break large HTTP posts from
  3335.   slow lines, so use it with caution.
  3336.  
  3337.   See also : "timeout client" and "timeout server"
  3338.  
  3339.  
  3340. option ldap-check
  3341.   Use LDAPv3 health checks for server testing
  3342.   May be used in sections :   defaults | frontend | listen | backend
  3343.                                  yes   |    no    |   yes  |   yes
  3344.   Arguments : none
  3345.  
  3346.   It is possible to test that the server correctly talks LDAPv3 instead of just
  3347.   testing that it accepts the TCP connection. When this option is set, an
  3348.   LDAPv3 anonymous simple bind message is sent to the server, and the response
  3349.   is analyzed to find an LDAPv3 bind response message.
  3350.  
  3351.   The server is considered valid only when the LDAP response contains success
  3352.   resultCode (http://tools.ietf.org/html/rfc4511#section-4.1.9).
  3353.  
  3354.   Logging of bind requests is server dependent see your documentation how to
  3355.   configure it.
  3356.  
  3357.   Example :
  3358.         option ldap-check
  3359.  
  3360.   See also : "option httpchk"
  3361.  
  3362.  
  3363. option log-health-checks
  3364. no option log-health-checks
  3365.   Enable or disable logging of health checks
  3366.   May be used in sections :   defaults | frontend | listen | backend
  3367.                                  yes   |    no    |   yes  |  yes
  3368.   Arguments : none
  3369.  
  3370.   Enable health checks logging so it possible to check for example what
  3371.   was happening before a server crash. Failed health check are logged if
  3372.   server is UP and succeeded health checks if server is DOWN, so the amount
  3373.   of additional information is limited.
  3374.  
  3375.   If health check logging is enabled no health check status is printed
  3376.   when servers is set up UP/DOWN/ENABLED/DISABLED.
  3377.  
  3378.   See also: "log" and section 8 about logging.
  3379.  
  3380.  
  3381. option log-separate-errors
  3382. no option log-separate-errors
  3383.   Change log level for non-completely successful connections
  3384.   May be used in sections :   defaults | frontend | listen | backend
  3385.                                  yes   |    yes   |   yes  |   no
  3386.   Arguments : none
  3387.  
  3388.   Sometimes looking for errors in logs is not easy. This option makes haproxy
  3389.   raise the level of logs containing potentially interesting information such
  3390.   as errors, timeouts, retries, redispatches, or HTTP status codes 5xx. The
  3391.   level changes from "info" to "err". This makes it possible to log them
  3392.   separately to a different file with most syslog daemons. Be careful not to
  3393.   remove them from the original file, otherwise you would lose ordering which
  3394.   provides very important information.
  3395.  
  3396.   Using this option, large sites dealing with several thousand connections per
  3397.   second may log normal traffic to a rotating buffer and only archive smaller
  3398.   error logs.
  3399.  
  3400.   See also : "log", "dontlognull", "dontlog-normal" and section 8 about
  3401.              logging.
  3402.  
  3403.  
  3404. option logasap
  3405. no option logasap
  3406.   Enable or disable early logging of HTTP requests
  3407.   May be used in sections :   defaults | frontend | listen | backend
  3408.                                  yes   |    yes   |   yes  |   no
  3409.   Arguments : none
  3410.  
  3411.   By default, HTTP requests are logged upon termination so that the total
  3412.   transfer time and the number of bytes appear in the logs. When large objects
  3413.   are being transferred, it may take a while before the request appears in the
  3414.   logs. Using "option logasap", the request gets logged as soon as the server
  3415.   sends the complete headers. The only missing information in the logs will be
  3416.   the total number of bytes which will indicate everything except the amount
  3417.   of data transferred, and the total time which will not take the transfer
  3418.   time into account. In such a situation, it's a good practice to capture the
  3419.   "Content-Length" response header so that the logs at least indicate how many
  3420.   bytes are expected to be transferred.
  3421.  
  3422.   Examples :
  3423.       listen http_proxy 0.0.0.0:80
  3424.           mode http
  3425.           option httplog
  3426.           option logasap
  3427.           log 192.168.2.200 local3
  3428.  
  3429.     >>> Feb  6 12:14:14 localhost \
  3430.           haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
  3431.           static/srv1 9/10/7/14/+30 200 +243 - - ---- 3/1/1/1/0 1/0 \
  3432.           "GET /image.iso HTTP/1.0"
  3433.  
  3434.   See also : "option httplog", "capture response header", and section 8 about
  3435.              logging.
  3436.  
  3437.  
  3438. option mysql-check [ user <username> ]
  3439.   Use MySQL health checks for server testing
  3440.   May be used in sections :   defaults | frontend | listen | backend
  3441.                                  yes   |    no    |   yes  |   yes
  3442.   Arguments :
  3443.     <username> This is the username which will be used when connecting to MySQL
  3444.                server.
  3445.  
  3446.   If you specify a username, the check consists of sending two MySQL packet,
  3447.   one Client Authentication packet, and one QUIT packet, to correctly close
  3448.   MySQL session. We then parse the MySQL Handshake Initialisation packet and/or
  3449.   Error packet. It is a basic but useful test which does not produce error nor
  3450.   aborted connect on the server. However, it requires adding an authorization
  3451.   in the MySQL table, like this :
  3452.  
  3453.       USE mysql;
  3454.       INSERT INTO user (Host,User) values ('<ip_of_haproxy>','<username>');
  3455.       FLUSH PRIVILEGES;
  3456.  
  3457.   If you don't specify a username (it is deprecated and not recommended), the
  3458.   check only consists in parsing the Mysql Handshake Initialisation packet or
  3459.   Error packet, we don't send anything in this mode. It was reported that it
  3460.   can generate lockout if check is too frequent and/or if there is not enough
  3461.   traffic. In fact, you need in this case to check MySQL "max_connect_errors"
  3462.   value as if a connection is established successfully within fewer than MySQL
  3463.   "max_connect_errors" attempts after a previous connection was interrupted,
  3464.   the error count for the host is cleared to zero. If HAProxy's server get
  3465.   blocked, the "FLUSH HOSTS" statement is the only way to unblock it.
  3466.  
  3467.   Remember that this does not check database presence nor database consistency.
  3468.   To do this, you can use an external check with xinetd for example.
  3469.  
  3470.   The check requires MySQL >=3.22, for older version, please use TCP check.
  3471.  
  3472.   Most often, an incoming MySQL server needs to see the client's IP address for
  3473.   various purposes, including IP privilege matching and connection logging.
  3474.   When possible, it is often wise to masquerade the client's IP address when
  3475.   connecting to the server using the "usesrc" argument of the "source" keyword,
  3476.   which requires the cttproxy feature to be compiled in, and the MySQL server
  3477.   to route the client via the machine hosting haproxy.
  3478.  
  3479.   See also: "option httpchk"
  3480.  
  3481.  
  3482. option nolinger
  3483. no option nolinger
  3484.   Enable or disable immediate session resource cleaning after close
  3485.   May be used in sections:    defaults | frontend | listen | backend
  3486.                                  yes   |    yes   |   yes  |   yes
  3487.   Arguments : none
  3488.  
  3489.   When clients or servers abort connections in a dirty way (eg: they are
  3490.   physically disconnected), the session timeouts triggers and the session is
  3491.   closed. But it will remain in FIN_WAIT1 state for some time in the system,
  3492.   using some resources and possibly limiting the ability to establish newer
  3493.   connections.
  3494.  
  3495.   When this happens, it is possible to activate "option nolinger" which forces
  3496.   the system to immediately remove any socket's pending data on close. Thus,
  3497.   the session is instantly purged from the system's tables. This usually has
  3498.   side effects such as increased number of TCP resets due to old retransmits
  3499.   getting immediately rejected. Some firewalls may sometimes complain about
  3500.   this too.
  3501.  
  3502.   For this reason, it is not recommended to use this option when not absolutely
  3503.   needed. You know that you need it when you have thousands of FIN_WAIT1
  3504.   sessions on your system (TIME_WAIT ones do not count).
  3505.  
  3506.   This option may be used both on frontends and backends, depending on the side
  3507.   where it is required. Use it on the frontend for clients, and on the backend
  3508.   for servers.
  3509.  
  3510.   If this option has been enabled in a "defaults" section, it can be disabled
  3511.   in a specific instance by prepending the "no" keyword before it.
  3512.  
  3513.  
  3514. option originalto [ except <network> ] [ header <name> ]
  3515.   Enable insertion of the X-Original-To header to requests sent to servers
  3516.   May be used in sections :   defaults | frontend | listen | backend
  3517.                                  yes   |    yes   |   yes  |   yes
  3518.   Arguments :
  3519.     <network> is an optional argument used to disable this option for sources
  3520.               matching <network>
  3521.     <name>    an optional argument to specify a different "X-Original-To"
  3522.               header name.
  3523.  
  3524.   Since HAProxy can work in transparent mode, every request from a client can
  3525.   be redirected to the proxy and HAProxy itself can proxy every request to a
  3526.   complex SQUID environment and the destination host from SO_ORIGINAL_DST will
  3527.   be lost. This is annoying when you want access rules based on destination ip
  3528.   addresses. To solve this problem, a new HTTP header "X-Original-To" may be
  3529.   added by HAProxy to all requests sent to the server. This header contains a
  3530.   value representing the original destination IP address. Since this must be
  3531.   configured to always use the last occurrence of this header only. Note that
  3532.   only the last occurrence of the header must be used, since it is really
  3533.   possible that the client has already brought one.
  3534.  
  3535.   The keyword "header" may be used to supply a different header name to replace
  3536.   the default "X-Original-To". This can be useful where you might already
  3537.   have a "X-Original-To" header from a different application, and you need
  3538.   preserve it. Also if your backend server doesn't use the "X-Original-To"
  3539.   header and requires different one.
  3540.  
  3541.   Sometimes, a same HAProxy instance may be shared between a direct client
  3542.   access and a reverse-proxy access (for instance when an SSL reverse-proxy is
  3543.   used to decrypt HTTPS traffic). It is possible to disable the addition of the
  3544.   header for a known source address or network by adding the "except" keyword
  3545.   followed by the network address. In this case, any source IP matching the
  3546.   network will not cause an addition of this header. Most common uses are with
  3547.   private networks or 127.0.0.1.
  3548.  
  3549.   This option may be specified either in the frontend or in the backend. If at
  3550.   least one of them uses it, the header will be added. Note that the backend's
  3551.   setting of the header subargument takes precedence over the frontend's if
  3552.   both are defined.
  3553.  
  3554.   It is important to note that by default, HAProxy works in tunnel mode and
  3555.   only inspects the first request of a connection, meaning that only the first
  3556.   request will have the header appended, which is certainly not what you want.
  3557.   In order to fix this, ensure that any of the "httpclose", "forceclose" or
  3558.   "http-server-close" options is set when using this option.
  3559.  
  3560.   Examples :
  3561.     # Original Destination address
  3562.     frontend www
  3563.         mode http
  3564.         option originalto except 127.0.0.1
  3565.  
  3566.     # Those servers want the IP Address in X-Client-Dst
  3567.     backend www
  3568.         mode http
  3569.         option originalto header X-Client-Dst
  3570.  
  3571.   See also : "option httpclose", "option http-server-close",
  3572.              "option forceclose"
  3573.  
  3574.  
  3575. option persist
  3576. no option persist
  3577.   Enable or disable forced persistence on down servers
  3578.   May be used in sections:    defaults | frontend | listen | backend
  3579.                                  yes   |    no    |   yes  |   yes
  3580.   Arguments : none
  3581.  
  3582.   When an HTTP request reaches a backend with a cookie which references a dead
  3583.   server, by default it is redispatched to another server. It is possible to
  3584.   force the request to be sent to the dead server first using "option persist"
  3585.   if absolutely needed. A common use case is when servers are under extreme
  3586.   load and spend their time flapping. In this case, the users would still be
  3587.   directed to the server they opened the session on, in the hope they would be
  3588.   correctly served. It is recommended to use "option redispatch" in conjunction
  3589.   with this option so that in the event it would not be possible to connect to
  3590.   the server at all (server definitely dead), the client would finally be
  3591.   redirected to another valid server.
  3592.  
  3593.   If this option has been enabled in a "defaults" section, it can be disabled
  3594.   in a specific instance by prepending the "no" keyword before it.
  3595.  
  3596.   See also : "option redispatch", "retries", "force-persist"
  3597.  
  3598.  
  3599. option redispatch
  3600. no option redispatch
  3601.   Enable or disable session redistribution in case of connection failure
  3602.   May be used in sections:    defaults | frontend | listen | backend
  3603.                                  yes   |    no    |   yes  |   yes
  3604.   Arguments : none
  3605.  
  3606.   In HTTP mode, if a server designated by a cookie is down, clients may
  3607.   definitely stick to it because they cannot flush the cookie, so they will not
  3608.   be able to access the service anymore.
  3609.  
  3610.   Specifying "option redispatch" will allow the proxy to break their
  3611.   persistence and redistribute them to a working server.
  3612.  
  3613.   It also allows to retry last connection to another server in case of multiple
  3614.   connection failures. Of course, it requires having "retries" set to a nonzero
  3615.   value.
  3616.  
  3617.   This form is the preferred form, which replaces both the "redispatch" and
  3618.   "redisp" keywords.
  3619.  
  3620.   If this option has been enabled in a "defaults" section, it can be disabled
  3621.   in a specific instance by prepending the "no" keyword before it.
  3622.  
  3623.   See also : "redispatch", "retries", "force-persist"
  3624.  
  3625.  
  3626. option smtpchk
  3627. option smtpchk <hello> <domain>
  3628.   Use SMTP health checks for server testing
  3629.   May be used in sections :   defaults | frontend | listen | backend
  3630.                                  yes   |    no    |   yes  |   yes
  3631.   Arguments :
  3632.     <hello>   is an optional argument. It is the "hello" command to use. It can
  3633.               be either "HELO" (for SMTP) or "EHLO" (for ESTMP). All other
  3634.               values will be turned into the default command ("HELO").
  3635.  
  3636.     <domain>  is the domain name to present to the server. It may only be
  3637.               specified (and is mandatory) if the hello command has been
  3638.               specified. By default, "localhost" is used.
  3639.  
  3640.   When "option smtpchk" is set, the health checks will consist in TCP
  3641.   connections followed by an SMTP command. By default, this command is
  3642.   "HELO localhost". The server's return code is analyzed and only return codes
  3643.   starting with a "2" will be considered as valid. All other responses,
  3644.   including a lack of response will constitute an error and will indicate a
  3645.   dead server.
  3646.  
  3647.   This test is meant to be used with SMTP servers or relays. Depending on the
  3648.   request, it is possible that some servers do not log each connection attempt,
  3649.   so you may want to experiment to improve the behaviour. Using telnet on port
  3650.   25 is often easier than adjusting the configuration.
  3651.  
  3652.   Most often, an incoming SMTP server needs to see the client's IP address for
  3653.   various purposes, including spam filtering, anti-spoofing and logging. When
  3654.   possible, it is often wise to masquerade the client's IP address when
  3655.   connecting to the server using the "usesrc" argument of the "source" keyword,
  3656.   which requires the cttproxy feature to be compiled in.
  3657.  
  3658.   Example :
  3659.         option smtpchk HELO mydomain.org
  3660.  
  3661.   See also : "option httpchk", "source"
  3662.  
  3663.  
  3664. option socket-stats
  3665. no option socket-stats
  3666.  
  3667.   Enable or disable collecting & providing separate statistics for each socket.
  3668.   May be used in sections :   defaults | frontend | listen | backend
  3669.                                  yes   |    yes   |   yes  |   no
  3670.  
  3671.   Arguments : none
  3672.  
  3673.  
  3674. option splice-auto
  3675. no option splice-auto
  3676.   Enable or disable automatic kernel acceleration on sockets in both directions
  3677.   May be used in sections :   defaults | frontend | listen | backend
  3678.                                  yes   |    yes   |   yes  |   yes
  3679.   Arguments : none
  3680.  
  3681.   When this option is enabled either on a frontend or on a backend, haproxy
  3682.   will automatically evaluate the opportunity to use kernel tcp splicing to
  3683.   forward data between the client and the server, in either direction. Haproxy
  3684.   uses heuristics to estimate if kernel splicing might improve performance or
  3685.   not. Both directions are handled independently. Note that the heuristics used
  3686.   are not much aggressive in order to limit excessive use of splicing. This
  3687.   option requires splicing to be enabled at compile time, and may be globally
  3688.   disabled with the global option "nosplice". Since splice uses pipes, using it
  3689.   requires that there are enough spare pipes.
  3690.  
  3691.   Important note: kernel-based TCP splicing is a Linux-specific feature which
  3692.   first appeared in kernel 2.6.25. It offers kernel-based acceleration to
  3693.   transfer data between sockets without copying these data to user-space, thus
  3694.   providing noticeable performance gains and CPU cycles savings. Since many
  3695.   early implementations are buggy, corrupt data and/or are inefficient, this
  3696.   feature is not enabled by default, and it should be used with extreme care.
  3697.   While it is not possible to detect the correctness of an implementation,
  3698.   2.6.29 is the first version offering a properly working implementation. In
  3699.   case of doubt, splicing may be globally disabled using the global "nosplice"
  3700.   keyword.
  3701.  
  3702.   Example :
  3703.         option splice-auto
  3704.  
  3705.   If this option has been enabled in a "defaults" section, it can be disabled
  3706.   in a specific instance by prepending the "no" keyword before it.
  3707.  
  3708.   See also : "option splice-request", "option splice-response", and global
  3709.              options "nosplice" and "maxpipes"
  3710.  
  3711.  
  3712. option splice-request
  3713. no option splice-request
  3714.   Enable or disable automatic kernel acceleration on sockets for requests
  3715.   May be used in sections :   defaults | frontend | listen | backend
  3716.                                  yes   |    yes   |   yes  |   yes
  3717.   Arguments : none
  3718.  
  3719.   When this option is enabled either on a frontend or on a backend, haproxy
  3720.   will user kernel tcp splicing whenever possible to forward data going from
  3721.   the client to the server. It might still use the recv/send scheme if there
  3722.   are no spare pipes left. This option requires splicing to be enabled at
  3723.   compile time, and may be globally disabled with the global option "nosplice".
  3724.   Since splice uses pipes, using it requires that there are enough spare pipes.
  3725.  
  3726.   Important note: see "option splice-auto" for usage limitations.
  3727.  
  3728.   Example :
  3729.         option splice-request
  3730.  
  3731.   If this option has been enabled in a "defaults" section, it can be disabled
  3732.   in a specific instance by prepending the "no" keyword before it.
  3733.  
  3734.   See also : "option splice-auto", "option splice-response", and global options
  3735.              "nosplice" and "maxpipes"
  3736.  
  3737.  
  3738. option splice-response
  3739. no option splice-response
  3740.   Enable or disable automatic kernel acceleration on sockets for responses
  3741.   May be used in sections :   defaults | frontend | listen | backend
  3742.                                  yes   |    yes   |   yes  |   yes
  3743.   Arguments : none
  3744.  
  3745.   When this option is enabled either on a frontend or on a backend, haproxy
  3746.   will user kernel tcp splicing whenever possible to forward data going from
  3747.   the server to the client. It might still use the recv/send scheme if there
  3748.   are no spare pipes left. This option requires splicing to be enabled at
  3749.   compile time, and may be globally disabled with the global option "nosplice".
  3750.   Since splice uses pipes, using it requires that there are enough spare pipes.
  3751.  
  3752.   Important note: see "option splice-auto" for usage limitations.
  3753.  
  3754.   Example :
  3755.         option splice-response
  3756.  
  3757.   If this option has been enabled in a "defaults" section, it can be disabled
  3758.   in a specific instance by prepending the "no" keyword before it.
  3759.  
  3760.   See also : "option splice-auto", "option splice-request", and global options
  3761.              "nosplice" and "maxpipes"
  3762.  
  3763.  
  3764. option srvtcpka
  3765. no option srvtcpka
  3766.   Enable or disable the sending of TCP keepalive packets on the server side
  3767.   May be used in sections :   defaults | frontend | listen | backend
  3768.                                  yes   |    no    |   yes  |   yes
  3769.   Arguments : none
  3770.  
  3771.   When there is a firewall or any session-aware component between a client and
  3772.   a server, and when the protocol involves very long sessions with long idle
  3773.   periods (eg: remote desktops), there is a risk that one of the intermediate
  3774.   components decides to expire a session which has remained idle for too long.
  3775.  
  3776.   Enabling socket-level TCP keep-alives makes the system regularly send packets
  3777.   to the other end of the connection, leaving it active. The delay between
  3778.   keep-alive probes is controlled by the system only and depends both on the
  3779.   operating system and its tuning parameters.
  3780.  
  3781.   It is important to understand that keep-alive packets are neither emitted nor
  3782.   received at the application level. It is only the network stacks which sees
  3783.   them. For this reason, even if one side of the proxy already uses keep-alives
  3784.   to maintain its connection alive, those keep-alive packets will not be
  3785.   forwarded to the other side of the proxy.
  3786.  
  3787.   Please note that this has nothing to do with HTTP keep-alive.
  3788.  
  3789.   Using option "srvtcpka" enables the emission of TCP keep-alive probes on the
  3790.   server side of a connection, which should help when session expirations are
  3791.   noticed between HAProxy and a server.
  3792.  
  3793.   If this option has been enabled in a "defaults" section, it can be disabled
  3794.   in a specific instance by prepending the "no" keyword before it.
  3795.  
  3796.   See also : "option clitcpka", "option tcpka"
  3797.  
  3798.  
  3799. option ssl-hello-chk
  3800.   Use SSLv3 client hello health checks for server testing
  3801.   May be used in sections :   defaults | frontend | listen | backend
  3802.                                  yes   |    no    |   yes  |   yes
  3803.   Arguments : none
  3804.  
  3805.   When some SSL-based protocols are relayed in TCP mode through HAProxy, it is
  3806.   possible to test that the server correctly talks SSL instead of just testing
  3807.   that it accepts the TCP connection. When "option ssl-hello-chk" is set, pure
  3808.   SSLv3 client hello messages are sent once the connection is established to
  3809.   the server, and the response is analyzed to find an SSL server hello message.
  3810.   The server is considered valid only when the response contains this server
  3811.   hello message.
  3812.  
  3813.   All servers tested till there correctly reply to SSLv3 client hello messages,
  3814.   and most servers tested do not even log the requests containing only hello
  3815.   messages, which is appreciable.
  3816.  
  3817.   See also: "option httpchk"
  3818.  
  3819.  
  3820. option tcp-smart-accept
  3821. no option tcp-smart-accept
  3822.   Enable or disable the saving of one ACK packet during the accept sequence
  3823.   May be used in sections :   defaults | frontend | listen | backend
  3824.                                  yes   |    yes   |   yes  |    no
  3825.   Arguments : none
  3826.  
  3827.   When an HTTP connection request comes in, the system acknowledges it on
  3828.   behalf of HAProxy, then the client immediately sends its request, and the
  3829.   system acknowledges it too while it is notifying HAProxy about the new
  3830.   connection. HAProxy then reads the request and responds. This means that we
  3831.   have one TCP ACK sent by the system for nothing, because the request could
  3832.   very well be acknowledged by HAProxy when it sends its response.
  3833.  
  3834.   For this reason, in HTTP mode, HAProxy automatically asks the system to avoid
  3835.   sending this useless ACK on platforms which support it (currently at least
  3836.   Linux). It must not cause any problem, because the system will send it anyway
  3837.   after 40 ms if the response takes more time than expected to come.
  3838.  
  3839.   During complex network debugging sessions, it may be desirable to disable
  3840.   this optimization because delayed ACKs can make troubleshooting more complex
  3841.   when trying to identify where packets are delayed. It is then possible to
  3842.   fall back to normal behaviour by specifying "no option tcp-smart-accept".
  3843.  
  3844.   It is also possible to force it for non-HTTP proxies by simply specifying
  3845.   "option tcp-smart-accept". For instance, it can make sense with some services
  3846.   such as SMTP where the server speaks first.
  3847.  
  3848.   It is recommended to avoid forcing this option in a defaults section. In case
  3849.   of doubt, consider setting it back to automatic values by prepending the
  3850.   "default" keyword before it, or disabling it using the "no" keyword.
  3851.  
  3852.   See also : "option tcp-smart-connect"
  3853.  
  3854.  
  3855. option tcp-smart-connect
  3856. no option tcp-smart-connect
  3857.   Enable or disable the saving of one ACK packet during the connect sequence
  3858.   May be used in sections :   defaults | frontend | listen | backend
  3859.                                  yes   |    no    |   yes  |   yes
  3860.   Arguments : none
  3861.  
  3862.   On certain systems (at least Linux), HAProxy can ask the kernel not to
  3863.   immediately send an empty ACK upon a connection request, but to directly
  3864.   send the buffer request instead. This saves one packet on the network and
  3865.   thus boosts performance. It can also be useful for some servers, because they
  3866.   immediately get the request along with the incoming connection.
  3867.  
  3868.   This feature is enabled when "option tcp-smart-connect" is set in a backend.
  3869.   It is not enabled by default because it makes network troubleshooting more
  3870.   complex.
  3871.  
  3872.   It only makes sense to enable it with protocols where the client speaks first
  3873.   such as HTTP. In other situations, if there is no data to send in place of
  3874.   the ACK, a normal ACK is sent.
  3875.  
  3876.   If this option has been enabled in a "defaults" section, it can be disabled
  3877.   in a specific instance by prepending the "no" keyword before it.
  3878.  
  3879.   See also : "option tcp-smart-accept"
  3880.  
  3881.  
  3882. option tcpka
  3883.   Enable or disable the sending of TCP keepalive packets on both sides
  3884.   May be used in sections :   defaults | frontend | listen | backend
  3885.                                  yes   |    yes   |   yes  |   yes
  3886.   Arguments : none
  3887.  
  3888.   When there is a firewall or any session-aware component between a client and
  3889.   a server, and when the protocol involves very long sessions with long idle
  3890.   periods (eg: remote desktops), there is a risk that one of the intermediate
  3891.   components decides to expire a session which has remained idle for too long.
  3892.  
  3893.   Enabling socket-level TCP keep-alives makes the system regularly send packets
  3894.   to the other end of the connection, leaving it active. The delay between
  3895.   keep-alive probes is controlled by the system only and depends both on the
  3896.   operating system and its tuning parameters.
  3897.  
  3898.   It is important to understand that keep-alive packets are neither emitted nor
  3899.   received at the application level. It is only the network stacks which sees
  3900.   them. For this reason, even if one side of the proxy already uses keep-alives
  3901.   to maintain its connection alive, those keep-alive packets will not be
  3902.   forwarded to the other side of the proxy.
  3903.  
  3904.   Please note that this has nothing to do with HTTP keep-alive.
  3905.  
  3906.   Using option "tcpka" enables the emission of TCP keep-alive probes on both
  3907.   the client and server sides of a connection. Note that this is meaningful
  3908.   only in "defaults" or "listen" sections. If this option is used in a
  3909.   frontend, only the client side will get keep-alives, and if this option is
  3910.   used in a backend, only the server side will get keep-alives. For this
  3911.   reason, it is strongly recommended to explicitly use "option clitcpka" and
  3912.   "option srvtcpka" when the configuration is split between frontends and
  3913.   backends.
  3914.  
  3915.   See also : "option clitcpka", "option srvtcpka"
  3916.  
  3917.  
  3918. option tcplog
  3919.   Enable advanced logging of TCP connections with session state and timers
  3920.   May be used in sections :   defaults | frontend | listen | backend
  3921.                                  yes   |    yes   |   yes  |   yes
  3922.   Arguments : none
  3923.  
  3924.   By default, the log output format is very poor, as it only contains the
  3925.   source and destination addresses, and the instance name. By specifying
  3926.   "option tcplog", each log line turns into a much richer format including, but
  3927.   not limited to, the connection timers, the session status, the connections
  3928.   numbers, the frontend, backend and server name, and of course the source
  3929.   address and ports. This option is useful for pure TCP proxies in order to
  3930.   find which of the client or server disconnects or times out. For normal HTTP
  3931.   proxies, it's better to use "option httplog" which is even more complete.
  3932.  
  3933.   This option may be set either in the frontend or the backend.
  3934.  
  3935.   See also :  "option httplog", and section 8 about logging.
  3936.  
  3937.  
  3938. option transparent
  3939. no option transparent
  3940.   Enable client-side transparent proxying
  3941.   May be used in sections :   defaults | frontend | listen | backend
  3942.                                  yes   |    no    |   yes  |   yes
  3943.   Arguments : none
  3944.  
  3945.   This option was introduced in order to provide layer 7 persistence to layer 3
  3946.   load balancers. The idea is to use the OS's ability to redirect an incoming
  3947.   connection for a remote address to a local process (here HAProxy), and let
  3948.   this process know what address was initially requested. When this option is
  3949.   used, sessions without cookies will be forwarded to the original destination
  3950.   IP address of the incoming request (which should match that of another
  3951.   equipment), while requests with cookies will still be forwarded to the
  3952.   appropriate server.
  3953.  
  3954.   Note that contrary to a common belief, this option does NOT make HAProxy
  3955.   present the client's IP to the server when establishing the connection.
  3956.  
  3957.   See also: the "usesrc" argument of the "source" keyword, and the
  3958.             "transparent" option of the "bind" keyword.
  3959.  
  3960.  
  3961. persist rdp-cookie
  3962. persist rdp-cookie(name)
  3963.   Enable RDP cookie-based persistence
  3964.   May be used in sections :   defaults | frontend | listen | backend
  3965.                                  yes   |    no    |   yes  |   yes
  3966.   Arguments :
  3967.     <name>    is the optional name of the RDP cookie to check. If omitted, the
  3968.               default cookie name "msts" will be used. There currently is no
  3969.               valid reason to change this name.
  3970.  
  3971.   This statement enables persistence based on an RDP cookie. The RDP cookie
  3972.   contains all information required to find the server in the list of known
  3973.   servers. So when this option is set in the backend, the request is analysed
  3974.   and if an RDP cookie is found, it is decoded. If it matches a known server
  3975.   which is still UP (or if "option persist" is set), then the connection is
  3976.   forwarded to this server.
  3977.  
  3978.   Note that this only makes sense in a TCP backend, but for this to work, the
  3979.   frontend must have waited long enough to ensure that an RDP cookie is present
  3980.   in the request buffer. This is the same requirement as with the "rdp-cookie"
  3981.   load-balancing method. Thus it is highly recommended to put all statements in
  3982.   a single "listen" section.
  3983.  
  3984.   Also, it is important to understand that the terminal server will emit this
  3985.   RDP cookie only if it is configured for "token redirection mode", which means
  3986.   that the "IP address redirection" option is disabled.
  3987.  
  3988.   Example :
  3989.         listen tse-farm
  3990.             bind :3389
  3991.             # wait up to 5s for an RDP cookie in the request
  3992.             tcp-request inspect-delay 5s
  3993.             tcp-request content accept if RDP_COOKIE
  3994.             # apply RDP cookie persistence
  3995.             persist rdp-cookie
  3996.             # if server is unknown, let's balance on the same cookie.
  3997.             # alternatively, "balance leastconn" may be useful too.
  3998.             balance rdp-cookie
  3999.             server srv1 1.1.1.1:3389
  4000.             server srv2 1.1.1.2:3389
  4001.  
  4002.   See also : "balance rdp-cookie", "tcp-request" and the "req_rdp_cookie" ACL.
  4003.  
  4004.  
  4005. rate-limit sessions <rate>
  4006.   Set a limit on the number of new sessions accepted per second on a frontend
  4007.   May be used in sections :   defaults | frontend | listen | backend
  4008.                                  yes   |    yes   |   yes  |   no
  4009.   Arguments :
  4010.     <rate>    The <rate> parameter is an integer designating the maximum number
  4011.               of new sessions per second to accept on the frontend.
  4012.  
  4013.   When the frontend reaches the specified number of new sessions per second, it
  4014.   stops accepting new connections until the rate drops below the limit again.
  4015.   During this time, the pending sessions will be kept in the socket's backlog
  4016.   (in system buffers) and haproxy will not even be aware that sessions are
  4017.   pending. When applying very low limit on a highly loaded service, it may make
  4018.   sense to increase the socket's backlog using the "backlog" keyword.
  4019.  
  4020.   This feature is particularly efficient at blocking connection-based attacks
  4021.   or service abuse on fragile servers. Since the session rate is measured every
  4022.   millisecond, it is extremely accurate. Also, the limit applies immediately,
  4023.   no delay is needed at all to detect the threshold.
  4024.  
  4025.   Example : limit the connection rate on SMTP to 10 per second max
  4026.         listen smtp
  4027.             mode tcp
  4028.             bind :25
  4029.             rate-limit sessions 10
  4030.             server 127.0.0.1:1025
  4031.  
  4032.   Note : when the maximum rate is reached, the frontend's status appears as
  4033.          "FULL" in the statistics, exactly as when it is saturated.
  4034.  
  4035.   See also : the "backlog" keyword and the "fe_sess_rate" ACL criterion.
  4036.  
  4037.  
  4038. redirect location <to> [code <code>] <option> [{if | unless} <condition>]
  4039. redirect prefix   <to> [code <code>] <option> [{if | unless} <condition>]
  4040.   Return an HTTP redirection if/unless a condition is matched
  4041.   May be used in sections :   defaults | frontend | listen | backend
  4042.                                  no    |    yes   |   yes  |   yes
  4043.  
  4044.   If/unless the condition is matched, the HTTP request will lead to a redirect
  4045.   response. If no condition is specified, the redirect applies unconditionally.
  4046.  
  4047.   Arguments :
  4048.     <to>      With "redirect location", the exact value in <to> is placed into
  4049.               the HTTP "Location" header. In case of "redirect prefix", the
  4050.               "Location" header is built from the concatenation of <to> and the
  4051.               complete URI, including the query string, unless the "drop-query"
  4052.               option is specified (see below). As a special case, if <to>
  4053.               equals exactly "/" in prefix mode, then nothing is inserted
  4054.               before the original URI. It allows one to redirect to the same
  4055.               URL.
  4056.  
  4057.     <code>    The code is optional. It indicates which type of HTTP redirection
  4058.               is desired. Only codes 301, 302 and 303 are supported, and 302 is
  4059.               used if no code is specified. 301 means "Moved permanently", and
  4060.               a browser may cache the Location. 302 means "Moved permanently"
  4061.               and means that the browser should not cache the redirection. 303
  4062.               is equivalent to 302 except that the browser will fetch the
  4063.               location with a GET method.
  4064.  
  4065.     <option>  There are several options which can be specified to adjust the
  4066.               expected behaviour of a redirection :
  4067.  
  4068.       - "drop-query"
  4069.         When this keyword is used in a prefix-based redirection, then the
  4070.         location will be set without any possible query-string, which is useful
  4071.         for directing users to a non-secure page for instance. It has no effect
  4072.         with a location-type redirect.
  4073.  
  4074.       - "append-slash"
  4075.         This keyword may be used in conjunction with "drop-query" to redirect
  4076.         users who use a URL not ending with a '/' to the same one with the '/'.
  4077.         It can be useful to ensure that search engines will only see one URL.
  4078.         For this, a return code 301 is preferred.
  4079.  
  4080.       - "set-cookie NAME[=value]"
  4081.         A "Set-Cookie" header will be added with NAME (and optionally "=value")
  4082.         to the response. This is sometimes used to indicate that a user has
  4083.         been seen, for instance to protect against some types of DoS. No other
  4084.         cookie option is added, so the cookie will be a session cookie. Note
  4085.         that for a browser, a sole cookie name without an equal sign is
  4086.         different from a cookie with an equal sign.
  4087.  
  4088.       - "clear-cookie NAME[=]"
  4089.         A "Set-Cookie" header will be added with NAME (and optionally "="), but
  4090.         with the "Max-Age" attribute set to zero. This will tell the browser to
  4091.         delete this cookie. It is useful for instance on logout pages. It is
  4092.         important to note that clearing the cookie "NAME" will not remove a
  4093.         cookie set with "NAME=value". You have to clear the cookie "NAME=" for
  4094.         that, because the browser makes the difference.
  4095.  
  4096.   Example: move the login URL only to HTTPS.
  4097.         acl clear      dst_port  80
  4098.         acl secure     dst_port  8080
  4099.         acl login_page url_beg   /login
  4100.         acl logout     url_beg   /logout
  4101.         acl uid_given  url_reg   /login?userid=[^&]+
  4102.         acl cookie_set hdr_sub(cookie) SEEN=1
  4103.  
  4104.         redirect prefix   https://mysite.com set-cookie SEEN=1 if !cookie_set
  4105.         redirect prefix   https://mysite.com           if login_page !secure
  4106.         redirect prefix   http://mysite.com drop-query if login_page !uid_given
  4107.         redirect location http://mysite.com/           if !login_page secure
  4108.         redirect location / clear-cookie USERID=       if logout
  4109.  
  4110.   Example: send redirects for request for articles without a '/'.
  4111.         acl missing_slash path_reg ^/article/[^/]*$
  4112.         redirect code 301 prefix / drop-query append-slash if missing_slash
  4113.  
  4114.   See section 7 about ACL usage.
  4115.  
  4116.  
  4117. redisp (deprecated)
  4118. redispatch (deprecated)
  4119.   Enable or disable session redistribution in case of connection failure
  4120.   May be used in sections:    defaults | frontend | listen | backend
  4121.                                  yes   |    no    |   yes  |   yes
  4122.   Arguments : none
  4123.  
  4124.   In HTTP mode, if a server designated by a cookie is down, clients may
  4125.   definitely stick to it because they cannot flush the cookie, so they will not
  4126.   be able to access the service anymore.
  4127.  
  4128.   Specifying "redispatch" will allow the proxy to break their persistence and
  4129.   redistribute them to a working server.
  4130.  
  4131.   It also allows to retry last connection to another server in case of multiple
  4132.   connection failures. Of course, it requires having "retries" set to a nonzero
  4133.   value.
  4134.  
  4135.   This form is deprecated, do not use it in any new configuration, use the new
  4136.   "option redispatch" instead.
  4137.  
  4138.   See also : "option redispatch"
  4139.  
  4140.  
  4141. reqadd  <string> [{if | unless} <cond>]
  4142.   Add a header at the end of the HTTP request
  4143.   May be used in sections :   defaults | frontend | listen | backend
  4144.                                  no    |    yes   |   yes  |   yes
  4145.   Arguments :
  4146.     <string>  is the complete line to be added. Any space or known delimiter
  4147.               must be escaped using a backslash ('\'). Please refer to section
  4148.               6 about HTTP header manipulation for more information.
  4149.  
  4150.     <cond>    is an optional matching condition built from ACLs. It makes it
  4151.               possible to ignore this rule when other conditions are not met.
  4152.  
  4153.   A new line consisting in <string> followed by a line feed will be added after
  4154.   the last header of an HTTP request.
  4155.  
  4156.   Header transformations only apply to traffic which passes through HAProxy,
  4157.   and not to traffic generated by HAProxy, such as health-checks or error
  4158.   responses.
  4159.  
  4160.   Example : add "X-Proto: SSL" to requests coming via port 81
  4161.      acl is-ssl  dst_port       81
  4162.      reqadd      X-Proto:\ SSL  if is-ssl
  4163.  
  4164.   See also: "rspadd", section 6 about HTTP header manipulation, and section 7
  4165.             about ACLs.
  4166.  
  4167.  
  4168. reqallow  <search> [{if | unless} <cond>]
  4169. reqiallow <search> [{if | unless} <cond>] (ignore case)
  4170.   Definitely allow an HTTP request if a line matches a regular expression
  4171.   May be used in sections :   defaults | frontend | listen | backend
  4172.                                  no    |    yes   |   yes  |   yes
  4173.   Arguments :
  4174.     <search>  is the regular expression applied to HTTP headers and to the
  4175.               request line. This is an extended regular expression. Parenthesis
  4176.               grouping is supported and no preliminary backslash is required.
  4177.               Any space or known delimiter must be escaped using a backslash
  4178.               ('\'). The pattern applies to a full line at a time. The
  4179.               "reqallow" keyword strictly matches case while "reqiallow"
  4180.               ignores case.
  4181.  
  4182.     <cond>    is an optional matching condition built from ACLs. It makes it
  4183.               possible to ignore this rule when other conditions are not met.
  4184.  
  4185.   A request containing any line which matches extended regular expression
  4186.   <search> will mark the request as allowed, even if any later test would
  4187.   result in a deny. The test applies both to the request line and to request
  4188.   headers. Keep in mind that URLs in request line are case-sensitive while
  4189.   header names are not.
  4190.  
  4191.   It is easier, faster and more powerful to use ACLs to write access policies.
  4192.   Reqdeny, reqallow and reqpass should be avoided in new designs.
  4193.  
  4194.   Example :
  4195.      # allow www.* but refuse *.local
  4196.      reqiallow ^Host:\ www\.
  4197.      reqideny  ^Host:\ .*\.local
  4198.  
  4199.   See also: "reqdeny", "block", section 6 about HTTP header manipulation, and
  4200.             section 7 about ACLs.
  4201.  
  4202.  
  4203. reqdel  <search> [{if | unless} <cond>]
  4204. reqidel <search> [{if | unless} <cond>]  (ignore case)
  4205.   Delete all headers matching a regular expression in an HTTP request
  4206.   May be used in sections :   defaults | frontend | listen | backend
  4207.                                  no    |    yes   |   yes  |   yes
  4208.   Arguments :
  4209.     <search>  is the regular expression applied to HTTP headers and to the
  4210.               request line. This is an extended regular expression. Parenthesis
  4211.               grouping is supported and no preliminary backslash is required.
  4212.               Any space or known delimiter must be escaped using a backslash
  4213.               ('\'). The pattern applies to a full line at a time. The "reqdel"
  4214.               keyword strictly matches case while "reqidel" ignores case.
  4215.  
  4216.     <cond>    is an optional matching condition built from ACLs. It makes it
  4217.               possible to ignore this rule when other conditions are not met.
  4218.  
  4219.   Any header line matching extended regular expression <search> in the request
  4220.   will be completely deleted. Most common use of this is to remove unwanted
  4221.   and/or dangerous headers or cookies from a request before passing it to the
  4222.   next servers.
  4223.  
  4224.   Header transformations only apply to traffic which passes through HAProxy,
  4225.   and not to traffic generated by HAProxy, such as health-checks or error
  4226.   responses. Keep in mind that header names are not case-sensitive.
  4227.  
  4228.   Example :
  4229.      # remove X-Forwarded-For header and SERVER cookie
  4230.      reqidel ^X-Forwarded-For:.*
  4231.      reqidel ^Cookie:.*SERVER=
  4232.  
  4233.   See also: "reqadd", "reqrep", "rspdel", section 6 about HTTP header
  4234.             manipulation, and section 7 about ACLs.
  4235.  
  4236.  
  4237. reqdeny  <search> [{if | unless} <cond>]
  4238. reqideny <search> [{if | unless} <cond>]  (ignore case)
  4239.   Deny an HTTP request if a line matches a regular expression
  4240.   May be used in sections :   defaults | frontend | listen | backend
  4241.                                  no    |    yes   |   yes  |   yes
  4242.   Arguments :
  4243.     <search>  is the regular expression applied to HTTP headers and to the
  4244.               request line. This is an extended regular expression. Parenthesis
  4245.               grouping is supported and no preliminary backslash is required.
  4246.               Any space or known delimiter must be escaped using a backslash
  4247.               ('\'). The pattern applies to a full line at a time. The
  4248.               "reqdeny" keyword strictly matches case while "reqideny" ignores
  4249.               case.
  4250.  
  4251.     <cond>    is an optional matching condition built from ACLs. It makes it
  4252.               possible to ignore this rule when other conditions are not met.
  4253.  
  4254.   A request containing any line which matches extended regular expression
  4255.   <search> will mark the request as denied, even if any later test would
  4256.   result in an allow. The test applies both to the request line and to request
  4257.   headers. Keep in mind that URLs in request line are case-sensitive while
  4258.   header names are not.
  4259.  
  4260.   A denied request will generate an "HTTP 403 forbidden" response once the
  4261.   complete request has been parsed. This is consistent with what is practiced
  4262.   using ACLs.
  4263.  
  4264.   It is easier, faster and more powerful to use ACLs to write access policies.
  4265.   Reqdeny, reqallow and reqpass should be avoided in new designs.
  4266.  
  4267.   Example :
  4268.      # refuse *.local, then allow www.*
  4269.      reqideny  ^Host:\ .*\.local
  4270.      reqiallow ^Host:\ www\.
  4271.  
  4272.   See also: "reqallow", "rspdeny", "block", section 6 about HTTP header
  4273.             manipulation, and section 7 about ACLs.
  4274.  
  4275.  
  4276. reqpass  <search> [{if | unless} <cond>]
  4277. reqipass <search> [{if | unless} <cond>]  (ignore case)
  4278.   Ignore any HTTP request line matching a regular expression in next rules
  4279.   May be used in sections :   defaults | frontend | listen | backend
  4280.                                  no    |    yes   |   yes  |   yes
  4281.   Arguments :
  4282.     <search>  is the regular expression applied to HTTP headers and to the
  4283.               request line. This is an extended regular expression. Parenthesis
  4284.               grouping is supported and no preliminary backslash is required.
  4285.               Any space or known delimiter must be escaped using a backslash
  4286.               ('\'). The pattern applies to a full line at a time. The
  4287.               "reqpass" keyword strictly matches case while "reqipass" ignores
  4288.               case.
  4289.  
  4290.     <cond>    is an optional matching condition built from ACLs. It makes it
  4291.               possible to ignore this rule when other conditions are not met.
  4292.  
  4293.   A request containing any line which matches extended regular expression
  4294.   <search> will skip next rules, without assigning any deny or allow verdict.
  4295.   The test applies both to the request line and to request headers. Keep in
  4296.   mind that URLs in request line are case-sensitive while header names are not.
  4297.  
  4298.   It is easier, faster and more powerful to use ACLs to write access policies.
  4299.   Reqdeny, reqallow and reqpass should be avoided in new designs.
  4300.  
  4301.   Example :
  4302.      # refuse *.local, then allow www.*, but ignore "www.private.local"
  4303.      reqipass  ^Host:\ www.private\.local
  4304.      reqideny  ^Host:\ .*\.local
  4305.      reqiallow ^Host:\ www\.
  4306.  
  4307.   See also: "reqallow", "reqdeny", "block", section 6 about HTTP header
  4308.             manipulation, and section 7 about ACLs.
  4309.  
  4310.  
  4311. reqrep  <search> <string> [{if | unless} <cond>]
  4312. reqirep <search> <string> [{if | unless} <cond>]   (ignore case)
  4313.   Replace a regular expression with a string in an HTTP request line
  4314.   May be used in sections :   defaults | frontend | listen | backend
  4315.                                  no    |    yes   |   yes  |   yes
  4316.   Arguments :
  4317.     <search>  is the regular expression applied to HTTP headers and to the
  4318.               request line. This is an extended regular expression. Parenthesis
  4319.               grouping is supported and no preliminary backslash is required.
  4320.               Any space or known delimiter must be escaped using a backslash
  4321.               ('\'). The pattern applies to a full line at a time. The "reqrep"
  4322.               keyword strictly matches case while "reqirep" ignores case.
  4323.  
  4324.     <string>  is the complete line to be added. Any space or known delimiter
  4325.               must be escaped using a backslash ('\'). References to matched
  4326.               pattern groups are possible using the common \N form, with N
  4327.               being a single digit between 0 and 9. Please refer to section
  4328.               6 about HTTP header manipulation for more information.
  4329.  
  4330.     <cond>    is an optional matching condition built from ACLs. It makes it
  4331.               possible to ignore this rule when other conditions are not met.
  4332.  
  4333.   Any line matching extended regular expression <search> in the request (both
  4334.   the request line and header lines) will be completely replaced with <string>.
  4335.   Most common use of this is to rewrite URLs or domain names in "Host" headers.
  4336.  
  4337.   Header transformations only apply to traffic which passes through HAProxy,
  4338.   and not to traffic generated by HAProxy, such as health-checks or error
  4339.   responses. Note that for increased readability, it is suggested to add enough
  4340.   spaces between the request and the response. Keep in mind that URLs in
  4341.   request line are case-sensitive while header names are not.
  4342.  
  4343.   Example :
  4344.      # replace "/static/" with "/" at the beginning of any request path.
  4345.      reqrep ^([^\ :]*)\ /static/(.*)     \1\ /\2
  4346.      # replace "www.mydomain.com" with "www" in the host name.
  4347.      reqirep ^Host:\ www.mydomain.com   Host:\ www
  4348.  
  4349.   See also: "reqadd", "reqdel", "rsprep", section 6 about HTTP header
  4350.             manipulation, and section 7 about ACLs.
  4351.  
  4352.  
  4353. reqtarpit  <search> [{if | unless} <cond>]
  4354. reqitarpit <search> [{if | unless} <cond>]  (ignore case)
  4355.   Tarpit an HTTP request containing a line matching a regular expression
  4356.   May be used in sections :   defaults | frontend | listen | backend
  4357.                                  no    |    yes   |   yes  |   yes
  4358.   Arguments :
  4359.     <search>  is the regular expression applied to HTTP headers and to the
  4360.               request line. This is an extended regular expression. Parenthesis
  4361.               grouping is supported and no preliminary backslash is required.
  4362.               Any space or known delimiter must be escaped using a backslash
  4363.               ('\'). The pattern applies to a full line at a time. The
  4364.               "reqtarpit" keyword strictly matches case while "reqitarpit"
  4365.               ignores case.
  4366.  
  4367.     <cond>    is an optional matching condition built from ACLs. It makes it
  4368.               possible to ignore this rule when other conditions are not met.
  4369.  
  4370.   A request containing any line which matches extended regular expression
  4371.   <search> will be tarpitted, which means that it will connect to nowhere, will
  4372.   be kept open for a pre-defined time, then will return an HTTP error 500 so
  4373.   that the attacker does not suspect it has been tarpitted. The status 500 will
  4374.   be reported in the logs, but the completion flags will indicate "PT". The
  4375.   delay is defined by "timeout tarpit", or "timeout connect" if the former is
  4376.   not set.
  4377.  
  4378.   The goal of the tarpit is to slow down robots attacking servers with
  4379.   identifiable requests. Many robots limit their outgoing number of connections
  4380.   and stay connected waiting for a reply which can take several minutes to
  4381.   come. Depending on the environment and attack, it may be particularly
  4382.   efficient at reducing the load on the network and firewalls.
  4383.  
  4384.   Examples :
  4385.      # ignore user-agents reporting any flavour of "Mozilla" or "MSIE", but
  4386.      # block all others.
  4387.      reqipass   ^User-Agent:\.*(Mozilla|MSIE)
  4388.      reqitarpit ^User-Agent:
  4389.  
  4390.      # block bad guys
  4391.      acl badguys src 10.1.0.3 172.16.13.20/28
  4392.      reqitarpit . if badguys
  4393.  
  4394.   See also: "reqallow", "reqdeny", "reqpass", section 6 about HTTP header
  4395.             manipulation, and section 7 about ACLs.
  4396.  
  4397.  
  4398. retries <value>
  4399.   Set the number of retries to perform on a server after a connection failure
  4400.   May be used in sections:    defaults | frontend | listen | backend
  4401.                                  yes   |    no    |   yes  |   yes
  4402.   Arguments :
  4403.     <value>   is the number of times a connection attempt should be retried on
  4404.               a server when a connection either is refused or times out. The
  4405.               default value is 3.
  4406.  
  4407.   It is important to understand that this value applies to the number of
  4408.   connection attempts, not full requests. When a connection has effectively
  4409.   been established to a server, there will be no more retry.
  4410.  
  4411.   In order to avoid immediate reconnections to a server which is restarting,
  4412.   a turn-around timer of 1 second is applied before a retry occurs.
  4413.  
  4414.   When "option redispatch" is set, the last retry may be performed on another
  4415.   server even if a cookie references a different server.
  4416.  
  4417.   See also : "option redispatch"
  4418.  
  4419.  
  4420. rspadd <string> [{if | unless} <cond>]
  4421.   Add a header at the end of the HTTP response
  4422.   May be used in sections :   defaults | frontend | listen | backend
  4423.                                  no    |    yes   |   yes  |   yes
  4424.   Arguments :
  4425.     <string>  is the complete line to be added. Any space or known delimiter
  4426.               must be escaped using a backslash ('\'). Please refer to section
  4427.               6 about HTTP header manipulation for more information.
  4428.  
  4429.     <cond>    is an optional matching condition built from ACLs. It makes it
  4430.               possible to ignore this rule when other conditions are not met.
  4431.  
  4432.   A new line consisting in <string> followed by a line feed will be added after
  4433.   the last header of an HTTP response.
  4434.  
  4435.   Header transformations only apply to traffic which passes through HAProxy,
  4436.   and not to traffic generated by HAProxy, such as health-checks or error
  4437.   responses.
  4438.  
  4439.   See also: "reqadd", section 6 about HTTP header manipulation, and section 7
  4440.             about ACLs.
  4441.  
  4442.  
  4443. rspdel  <search> [{if | unless} <cond>]
  4444. rspidel <search> [{if | unless} <cond>]  (ignore case)
  4445.   Delete all headers matching a regular expression in an HTTP response
  4446.   May be used in sections :   defaults | frontend | listen | backend
  4447.                                  no    |    yes   |   yes  |   yes
  4448.   Arguments :
  4449.     <search>  is the regular expression applied to HTTP headers and to the
  4450.               response line. This is an extended regular expression, so
  4451.               parenthesis grouping is supported and no preliminary backslash
  4452.               is required. Any space or known delimiter must be escaped using
  4453.               a backslash ('\'). The pattern applies to a full line at a time.
  4454.               The "rspdel" keyword strictly matches case while "rspidel"
  4455.               ignores case.
  4456.  
  4457.     <cond>    is an optional matching condition built from ACLs. It makes it
  4458.               possible to ignore this rule when other conditions are not met.
  4459.  
  4460.   Any header line matching extended regular expression <search> in the response
  4461.   will be completely deleted. Most common use of this is to remove unwanted
  4462.   and/or sensitive headers or cookies from a response before passing it to the
  4463.   client.
  4464.  
  4465.   Header transformations only apply to traffic which passes through HAProxy,
  4466.   and not to traffic generated by HAProxy, such as health-checks or error
  4467.   responses. Keep in mind that header names are not case-sensitive.
  4468.  
  4469.   Example :
  4470.      # remove the Server header from responses
  4471.      reqidel ^Server:.*
  4472.  
  4473.   See also: "rspadd", "rsprep", "reqdel", section 6 about HTTP header
  4474.             manipulation, and section 7 about ACLs.
  4475.  
  4476.  
  4477. rspdeny  <search> [{if | unless} <cond>]
  4478. rspideny <search> [{if | unless} <cond>]  (ignore case)
  4479.   Block an HTTP response if a line matches a regular expression
  4480.   May be used in sections :   defaults | frontend | listen | backend
  4481.                                  no    |    yes   |   yes  |   yes
  4482.   Arguments :
  4483.     <search>  is the regular expression applied to HTTP headers and to the
  4484.               response line. This is an extended regular expression, so
  4485.               parenthesis grouping is supported and no preliminary backslash
  4486.               is required. Any space or known delimiter must be escaped using
  4487.               a backslash ('\'). The pattern applies to a full line at a time.
  4488.               The "rspdeny" keyword strictly matches case while "rspideny"
  4489.               ignores case.
  4490.  
  4491.     <cond>    is an optional matching condition built from ACLs. It makes it
  4492.               possible to ignore this rule when other conditions are not met.
  4493.  
  4494.   A response containing any line which matches extended regular expression
  4495.   <search> will mark the request as denied. The test applies both to the
  4496.   response line and to response headers. Keep in mind that header names are not
  4497.   case-sensitive.
  4498.  
  4499.   Main use of this keyword is to prevent sensitive information leak and to
  4500.   block the response before it reaches the client. If a response is denied, it
  4501.   will be replaced with an HTTP 502 error so that the client never retrieves
  4502.   any sensitive data.
  4503.  
  4504.   It is easier, faster and more powerful to use ACLs to write access policies.
  4505.   Rspdeny should be avoided in new designs.
  4506.  
  4507.   Example :
  4508.      # Ensure that no content type matching ms-word will leak
  4509.      rspideny  ^Content-type:\.*/ms-word
  4510.  
  4511.   See also: "reqdeny", "acl", "block", section 6 about HTTP header manipulation
  4512.             and section 7 about ACLs.
  4513.  
  4514.  
  4515. rsprep  <search> <string> [{if | unless} <cond>]
  4516. rspirep <search> <string> [{if | unless} <cond>]  (ignore case)
  4517.   Replace a regular expression with a string in an HTTP response line
  4518.   May be used in sections :   defaults | frontend | listen | backend
  4519.                                  no    |    yes   |   yes  |   yes
  4520.   Arguments :
  4521.     <search>  is the regular expression applied to HTTP headers and to the
  4522.               response line. This is an extended regular expression, so
  4523.               parenthesis grouping is supported and no preliminary backslash
  4524.               is required. Any space or known delimiter must be escaped using
  4525.               a backslash ('\'). The pattern applies to a full line at a time.
  4526.               The "rsprep" keyword strictly matches case while "rspirep"
  4527.               ignores case.
  4528.  
  4529.     <string>  is the complete line to be added. Any space or known delimiter
  4530.               must be escaped using a backslash ('\'). References to matched
  4531.               pattern groups are possible using the common \N form, with N
  4532.               being a single digit between 0 and 9. Please refer to section
  4533.               6 about HTTP header manipulation for more information.
  4534.  
  4535.     <cond>    is an optional matching condition built from ACLs. It makes it
  4536.               possible to ignore this rule when other conditions are not met.
  4537.  
  4538.   Any line matching extended regular expression <search> in the response (both
  4539.   the response line and header lines) will be completely replaced with
  4540.   <string>. Most common use of this is to rewrite Location headers.
  4541.  
  4542.   Header transformations only apply to traffic which passes through HAProxy,
  4543.   and not to traffic generated by HAProxy, such as health-checks or error
  4544.   responses. Note that for increased readability, it is suggested to add enough
  4545.   spaces between the request and the response. Keep in mind that header names
  4546.   are not case-sensitive.
  4547.  
  4548.   Example :
  4549.      # replace "Location: 127.0.0.1:8080" with "Location: www.mydomain.com"
  4550.      rspirep ^Location:\ 127.0.0.1:8080    Location:\ www.mydomain.com
  4551.  
  4552.   See also: "rspadd", "rspdel", "reqrep", section 6 about HTTP header
  4553.             manipulation, and section 7 about ACLs.
  4554.  
  4555.  
  4556. server <name> <address>[:port] [param*]
  4557.   Declare a server in a backend
  4558.   May be used in sections :   defaults | frontend | listen | backend
  4559.                                  no    |    no    |   yes  |   yes
  4560.   Arguments :
  4561.     <name>    is the internal name assigned to this server. This name will
  4562.               appear in logs and alerts.  If "http-send-server-name" is
  4563.               set, it will be added to the request header sent to the server.
  4564.  
  4565.     <address> is the IPv4 address of the server. Alternatively, a resolvable
  4566.               hostname is supported, but this name will be resolved during
  4567.               start-up. If no address is specified in front of the port, or if
  4568.               address "0.0.0.0" is specified, then the address used will be the
  4569.               same as the one used by the incoming connection. This makes it
  4570.               possible to relay connections for many IPs on a different port or
  4571.               to perform transparent forwarding with connection limitation.
  4572.  
  4573.     <ports>   is an optional port specification. If set, all connections will
  4574.               be sent to this port. If unset, the same port the client
  4575.               connected to will be used. The port may also be prefixed by a "+"
  4576.               or a "-". In this case, the server's port will be determined by
  4577.               adding this value to the client's port.
  4578.  
  4579.     <param*>  is a list of parameters for this server. The "server" keywords
  4580.               accepts an important number of options and has a complete section
  4581.               dedicated to it. Please refer to section 5 for more details.
  4582.  
  4583.   Examples :
  4584.         server first  10.1.1.1:1080 cookie first  check inter 1000
  4585.         server second 10.1.1.2:1080 cookie second check inter 1000
  4586.  
  4587.   See also: "default-server", "http-send-name-header" and section 5 about
  4588.              server options
  4589.  
  4590.  
  4591. source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
  4592. source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
  4593. source <addr>[:<port>] [interface <name>]
  4594.   Set the source address for outgoing connections
  4595.   May be used in sections :   defaults | frontend | listen | backend
  4596.                                  yes   |    no    |   yes  |   yes
  4597.   Arguments :
  4598.     <addr>    is the IPv4 address HAProxy will bind to before connecting to a
  4599.               server. This address is also used as a source for health checks.
  4600.               The default value of 0.0.0.0 means that the system will select
  4601.               the most appropriate address to reach its destination.
  4602.  
  4603.     <port>    is an optional port. It is normally not needed but may be useful
  4604.               in some very specific contexts. The default value of zero means
  4605.               the system will select a free port. Note that port ranges are not
  4606.               supported in the backend. If you want to force port ranges, you
  4607.               have to specify them on each "server" line.
  4608.  
  4609.     <addr2>   is the IP address to present to the server when connections are
  4610.               forwarded in full transparent proxy mode. This is currently only
  4611.               supported on some patched Linux kernels. When this address is
  4612.               specified, clients connecting to the server will be presented
  4613.               with this address, while health checks will still use the address
  4614.               <addr>.
  4615.  
  4616.     <port2>   is the optional port to present to the server when connections
  4617.               are forwarded in full transparent proxy mode (see <addr2> above).
  4618.               The default value of zero means the system will select a free
  4619.               port.
  4620.  
  4621.     <hdr>     is the name of a HTTP header in which to fetch the IP to bind to.
  4622.               This is the name of a comma-separated header list which can
  4623.               contain multiple IP addresses. By default, the last occurrence is
  4624.               used. This is designed to work with the X-Forwarded-For header
  4625.               and to automatically bind to the the client's IP address as seen
  4626.               by previous proxy, typically Stunnel. In order to use another
  4627.               occurrence from the last one, please see the <occ> parameter
  4628.               below. When the header (or occurrence) is not found, no binding
  4629.               is performed so that the proxy's default IP address is used. Also
  4630.               keep in mind that the header name is case insensitive, as for any
  4631.               HTTP header.
  4632.  
  4633.     <occ>     is the occurrence number of a value to be used in a multi-value
  4634.               header. This is to be used in conjunction with "hdr_ip(<hdr>)",
  4635.               in order to specificy which occurrence to use for the source IP
  4636.               address. Positive values indicate a position from the first
  4637.               occurrence, 1 being the first one. Negative values indicate
  4638.               positions relative to the last one, -1 being the last one. This
  4639.               is helpful for situations where an X-Forwarded-For header is set
  4640.               at the entry point of an infrastructure and must be used several
  4641.               proxy layers away. When this value is not specified, -1 is
  4642.               assumed. Passing a zero here disables the feature.
  4643.  
  4644.     <name>    is an optional interface name to which to bind to for outgoing
  4645.               traffic. On systems supporting this features (currently, only
  4646.               Linux), this allows one to bind all traffic to the server to
  4647.               this interface even if it is not the one the system would select
  4648.               based on routing tables. This should be used with extreme care.
  4649.               Note that using this option requires root privileges.
  4650.  
  4651.   The "source" keyword is useful in complex environments where a specific
  4652.   address only is allowed to connect to the servers. It may be needed when a
  4653.   private address must be used through a public gateway for instance, and it is
  4654.   known that the system cannot determine the adequate source address by itself.
  4655.  
  4656.   An extension which is available on certain patched Linux kernels may be used
  4657.   through the "usesrc" optional keyword. It makes it possible to connect to the
  4658.   servers with an IP address which does not belong to the system itself. This
  4659.   is called "full transparent proxy mode". For this to work, the destination
  4660.   servers have to route their traffic back to this address through the machine
  4661.   running HAProxy, and IP forwarding must generally be enabled on this machine.
  4662.  
  4663.   In this "full transparent proxy" mode, it is possible to force a specific IP
  4664.   address to be presented to the servers. This is not much used in fact. A more
  4665.   common use is to tell HAProxy to present the client's IP address. For this,
  4666.   there are two methods :
  4667.  
  4668.     - present the client's IP and port addresses. This is the most transparent
  4669.       mode, but it can cause problems when IP connection tracking is enabled on
  4670.       the machine, because a same connection may be seen twice with different
  4671.       states. However, this solution presents the huge advantage of not
  4672.       limiting the system to the 64k outgoing address+port couples, because all
  4673.       of the client ranges may be used.
  4674.  
  4675.     - present only the client's IP address and select a spare port. This
  4676.       solution is still quite elegant but slightly less transparent (downstream
  4677.       firewalls logs will not match upstream's). It also presents the downside
  4678.       of limiting the number of concurrent connections to the usual 64k ports.
  4679.       However, since the upstream and downstream ports are different, local IP
  4680.       connection tracking on the machine will not be upset by the reuse of the
  4681.       same session.
  4682.  
  4683.   Note that depending on the transparent proxy technology used, it may be
  4684.   required to force the source address. In fact, cttproxy version 2 requires an
  4685.   IP address in <addr> above, and does not support setting of "0.0.0.0" as the
  4686.   IP address because it creates NAT entries which much match the exact outgoing
  4687.   address. Tproxy version 4 and some other kernel patches which work in pure
  4688.   forwarding mode generally will not have this limitation.
  4689.  
  4690.   This option sets the default source for all servers in the backend. It may
  4691.   also be specified in a "defaults" section. Finer source address specification
  4692.   is possible at the server level using the "source" server option. Refer to
  4693.   section 5 for more information.
  4694.  
  4695.   Examples :
  4696.         backend private
  4697.             # Connect to the servers using our 192.168.1.200 source address
  4698.             source 192.168.1.200
  4699.  
  4700.         backend transparent_ssl1
  4701.             # Connect to the SSL farm from the client's source address
  4702.             source 192.168.1.200 usesrc clientip
  4703.  
  4704.         backend transparent_ssl2
  4705.             # Connect to the SSL farm from the client's source address and port
  4706.             # not recommended if IP conntrack is present on the local machine.
  4707.             source 192.168.1.200 usesrc client
  4708.  
  4709.         backend transparent_ssl3
  4710.             # Connect to the SSL farm from the client's source address. It
  4711.             # is more conntrack-friendly.
  4712.             source 192.168.1.200 usesrc clientip
  4713.  
  4714.         backend transparent_smtp
  4715.             # Connect to the SMTP farm from the client's source address/port
  4716.             # with Tproxy version 4.
  4717.             source 0.0.0.0 usesrc clientip
  4718.  
  4719.         backend transparent_http
  4720.             # Connect to the servers using the client's IP as seen by previous
  4721.             # proxy.
  4722.             source 0.0.0.0 usesrc hdr_ip(x-forwarded-for,-1)
  4723.  
  4724.   See also : the "source" server option in section 5, the Tproxy patches for
  4725.              the Linux kernel on www.balabit.com, the "bind" keyword.
  4726.  
  4727.  
  4728. srvtimeout <timeout> (deprecated)
  4729.   Set the maximum inactivity time on the server side.
  4730.   May be used in sections :   defaults | frontend | listen | backend
  4731.                                  yes   |    no    |   yes  |   yes
  4732.   Arguments :
  4733.     <timeout> is the timeout value specified in milliseconds by default, but
  4734.               can be in any other unit if the number is suffixed by the unit,
  4735.               as explained at the top of this document.
  4736.  
  4737.   The inactivity timeout applies when the server is expected to acknowledge or
  4738.   send data. In HTTP mode, this timeout is particularly important to consider
  4739.   during the first phase of the server's response, when it has to send the
  4740.   headers, as it directly represents the server's processing time for the
  4741.   request. To find out what value to put there, it's often good to start with
  4742.   what would be considered as unacceptable response times, then check the logs
  4743.   to observe the response time distribution, and adjust the value accordingly.
  4744.  
  4745.   The value is specified in milliseconds by default, but can be in any other
  4746.   unit if the number is suffixed by the unit, as specified at the top of this
  4747.   document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
  4748.   recommended that the client timeout remains equal to the server timeout in
  4749.   order to avoid complex situations to debug. Whatever the expected server
  4750.   response times, it is a good practice to cover at least one or several TCP
  4751.   packet losses by specifying timeouts that are slightly above multiples of 3
  4752.   seconds (eg: 4 or 5 seconds minimum).
  4753.  
  4754.   This parameter is specific to backends, but can be specified once for all in
  4755.   "defaults" sections. This is in fact one of the easiest solutions not to
  4756.   forget about it. An unspecified timeout results in an infinite timeout, which
  4757.   is not recommended. Such a usage is accepted and works but reports a warning
  4758.   during startup because it may results in accumulation of expired sessions in
  4759.   the system if the system's timeouts are not configured either.
  4760.  
  4761.   This parameter is provided for compatibility but is currently deprecated.
  4762.   Please use "timeout server" instead.
  4763.  
  4764.   See also : "timeout server", "timeout client" and "clitimeout".
  4765.  
  4766.  
  4767. stats admin { if | unless } <cond>
  4768.   Enable statistics admin level if/unless a condition is matched
  4769.   May be used in sections :   defaults | frontend | listen | backend
  4770.                                  no    |    no    |   yes  |   yes
  4771.  
  4772.   This statement enables the statistics admin level if/unless a condition is
  4773.   matched.
  4774.  
  4775.   The admin level allows to enable/disable servers from the web interface. By
  4776.   default, statistics page is read-only for security reasons.
  4777.  
  4778.   Note : Consider not using this feature in multi-process mode (nbproc > 1)
  4779.          unless you know what you do : memory is not shared between the
  4780.          processes, which can result in random behaviours.
  4781.  
  4782.   Currently, the POST request is limited to the buffer size minus the reserved
  4783.   buffer space, which means that if the list of servers is too long, the
  4784.   request won't be processed. It is recommended to alter few servers at a
  4785.   time.
  4786.  
  4787.   Example :
  4788.     # statistics admin level only for localhost
  4789.     backend stats_localhost
  4790.         stats enable
  4791.         stats admin if LOCALHOST
  4792.  
  4793.   Example :
  4794.     # statistics admin level always enabled because of the authentication
  4795.     backend stats_auth
  4796.         stats enable
  4797.         stats auth  admin:AdMiN123
  4798.         stats admin if TRUE
  4799.  
  4800.   Example :
  4801.     # statistics admin level depends on the authenticated user
  4802.     userlist stats-auth
  4803.         group admin    users admin
  4804.         user  admin    insecure-password AdMiN123
  4805.         group readonly users haproxy
  4806.         user  haproxy  insecure-password haproxy
  4807.  
  4808.     backend stats_auth
  4809.         stats enable
  4810.         acl AUTH       http_auth(stats-auth)
  4811.         acl AUTH_ADMIN http_auth_group(stats-auth) admin
  4812.         stats http-request auth unless AUTH
  4813.         stats admin if AUTH_ADMIN
  4814.  
  4815.   See also : "stats enable", "stats auth", "stats http-request", "nbproc",
  4816.              "bind-process", section 3.4 about userlists and section 7 about
  4817.              ACL usage.
  4818.  
  4819.  
  4820. stats auth <user>:<passwd>
  4821.   Enable statistics with authentication and grant access to an account
  4822.   May be used in sections :   defaults | frontend | listen | backend
  4823.                                  yes   |    no    |   yes  |   yes
  4824.   Arguments :
  4825.     <user>    is a user name to grant access to
  4826.  
  4827.     <passwd>  is the cleartext password associated to this user
  4828.  
  4829.   This statement enables statistics with default settings, and restricts access
  4830.   to declared users only. It may be repeated as many times as necessary to
  4831.   allow as many users as desired. When a user tries to access the statistics
  4832.   without a valid account, a "401 Forbidden" response will be returned so that
  4833.   the browser asks the user to provide a valid user and password. The real
  4834.   which will be returned to the browser is configurable using "stats realm".
  4835.  
  4836.   Since the authentication method is HTTP Basic Authentication, the passwords
  4837.   circulate in cleartext on the network. Thus, it was decided that the
  4838.   configuration file would also use cleartext passwords to remind the users
  4839.   that those ones should not be sensitive and not shared with any other account.
  4840.  
  4841.   It is also possible to reduce the scope of the proxies which appear in the
  4842.   report using "stats scope".
  4843.  
  4844.   Though this statement alone is enough to enable statistics reporting, it is
  4845.   recommended to set all other settings in order to avoid relying on default
  4846.   unobvious parameters.
  4847.  
  4848.   Example :
  4849.     # public access (limited to this backend only)
  4850.     backend public_www
  4851.         server srv1 192.168.0.1:80
  4852.         stats enable
  4853.         stats hide-version
  4854.         stats scope   .
  4855.         stats uri     /admin?stats
  4856.         stats realm   Haproxy\ Statistics
  4857.         stats auth    admin1:AdMiN123
  4858.         stats auth    admin2:AdMiN321
  4859.  
  4860.     # internal monitoring access (unlimited)
  4861.     backend private_monitoring
  4862.         stats enable
  4863.         stats uri     /admin?stats
  4864.         stats refresh 5s
  4865.  
  4866.   See also : "stats enable", "stats realm", "stats scope", "stats uri"
  4867.  
  4868.  
  4869. stats enable
  4870.   Enable statistics reporting with default settings
  4871.   May be used in sections :   defaults | frontend | listen | backend
  4872.                                  yes   |    no    |   yes  |   yes
  4873.   Arguments : none
  4874.  
  4875.   This statement enables statistics reporting with default settings defined
  4876.   at build time. Unless stated otherwise, these settings are used :
  4877.     - stats uri   : /haproxy?stats
  4878.     - stats realm : "HAProxy Statistics"
  4879.     - stats auth  : no authentication
  4880.     - stats scope : no restriction
  4881.  
  4882.   Though this statement alone is enough to enable statistics reporting, it is
  4883.   recommended to set all other settings in order to avoid relying on default
  4884.   unobvious parameters.
  4885.  
  4886.   Example :
  4887.     # public access (limited to this backend only)
  4888.     backend public_www
  4889.         server srv1 192.168.0.1:80
  4890.         stats enable
  4891.         stats hide-version
  4892.         stats scope   .
  4893.         stats uri     /admin?stats
  4894.         stats realm   Haproxy\ Statistics
  4895.         stats auth    admin1:AdMiN123
  4896.         stats auth    admin2:AdMiN321
  4897.  
  4898.     # internal monitoring access (unlimited)
  4899.     backend private_monitoring
  4900.         stats enable
  4901.         stats uri     /admin?stats
  4902.         stats refresh 5s
  4903.  
  4904.   See also : "stats auth", "stats realm", "stats uri"
  4905.  
  4906.  
  4907. stats hide-version
  4908.   Enable statistics and hide HAProxy version reporting
  4909.   May be used in sections :   defaults | frontend | listen | backend
  4910.                                  yes   |    no    |   yes  |   yes
  4911.   Arguments : none
  4912.  
  4913.   By default, the stats page reports some useful status information along with
  4914.   the statistics. Among them is HAProxy's version. However, it is generally
  4915.   considered dangerous to report precise version to anyone, as it can help them
  4916.   target known weaknesses with specific attacks. The "stats hide-version"
  4917.   statement removes the version from the statistics report. This is recommended
  4918.   for public sites or any site with a weak login/password.
  4919.  
  4920.   Though this statement alone is enough to enable statistics reporting, it is
  4921.   recommended to set all other settings in order to avoid relying on default
  4922.   unobvious parameters.
  4923.  
  4924.   Example :
  4925.     # public access (limited to this backend only)
  4926.     backend public_www
  4927.         server srv1 192.168.0.1:80
  4928.         stats enable
  4929.         stats hide-version
  4930.         stats scope   .
  4931.         stats uri     /admin?stats
  4932.         stats realm   Haproxy\ Statistics
  4933.         stats auth    admin1:AdMiN123
  4934.         stats auth    admin2:AdMiN321
  4935.  
  4936.     # internal monitoring access (unlimited)
  4937.     backend private_monitoring
  4938.         stats enable
  4939.         stats uri     /admin?stats
  4940.         stats refresh 5s
  4941.  
  4942.   See also : "stats auth", "stats enable", "stats realm", "stats uri"
  4943.  
  4944.  
  4945. stats http-request { allow | deny | auth [realm <realm>] }
  4946.              [ { if | unless } <condition> ]
  4947.   Access control for statistics
  4948.  
  4949.   May be used in sections:   defaults | frontend | listen | backend
  4950.                                 no    |    no    |   yes  |   yes
  4951.  
  4952.   As "http-request", these set of options allow to fine control access to
  4953.   statistics. Each option may be followed by if/unless and acl.
  4954.   First option with matched condition (or option without condition) is final.
  4955.   For "deny" a 403 error will be returned, for "allow" normal processing is
  4956.   performed, for "auth" a 401/407 error code is returned so the client
  4957.   should be asked to enter a username and password.
  4958.  
  4959.   There is no fixed limit to the number of http-request statements per
  4960.   instance.
  4961.  
  4962.   See also : "http-request", section 3.4 about userlists and section 7
  4963.              about ACL usage.
  4964.  
  4965.  
  4966. stats realm <realm>
  4967.   Enable statistics and set authentication realm
  4968.   May be used in sections :   defaults | frontend | listen | backend
  4969.                                  yes   |    no    |   yes  |   yes
  4970.   Arguments :
  4971.     <realm>   is the name of the HTTP Basic Authentication realm reported to
  4972.               the browser. The browser uses it to display it in the pop-up
  4973.               inviting the user to enter a valid username and password.
  4974.  
  4975.   The realm is read as a single word, so any spaces in it should be escaped
  4976.   using a backslash ('\').
  4977.  
  4978.   This statement is useful only in conjunction with "stats auth" since it is
  4979.   only related to authentication.
  4980.  
  4981.   Though this statement alone is enough to enable statistics reporting, it is
  4982.   recommended to set all other settings in order to avoid relying on default
  4983.   unobvious parameters.
  4984.  
  4985.   Example :
  4986.     # public access (limited to this backend only)
  4987.     backend public_www
  4988.         server srv1 192.168.0.1:80
  4989.         stats enable
  4990.         stats hide-version
  4991.         stats scope   .
  4992.         stats uri     /admin?stats
  4993.         stats realm   Haproxy\ Statistics
  4994.         stats auth    admin1:AdMiN123
  4995.         stats auth    admin2:AdMiN321
  4996.  
  4997.     # internal monitoring access (unlimited)
  4998.     backend private_monitoring
  4999.         stats enable
  5000.         stats uri     /admin?stats
  5001.         stats refresh 5s
  5002.  
  5003.   See also : "stats auth", "stats enable", "stats uri"
  5004.  
  5005.  
  5006. stats refresh <delay>
  5007.   Enable statistics with automatic refresh
  5008.   May be used in sections :   defaults | frontend | listen | backend
  5009.                                  yes   |    no    |   yes  |   yes
  5010.   Arguments :
  5011.     <delay>   is the suggested refresh delay, specified in seconds, which will
  5012.               be returned to the browser consulting the report page. While the
  5013.               browser is free to apply any delay, it will generally respect it
  5014.               and refresh the page this every seconds. The refresh interval may
  5015.               be specified in any other non-default time unit, by suffixing the
  5016.               unit after the value, as explained at the top of this document.
  5017.  
  5018.   This statement is useful on monitoring displays with a permanent page
  5019.   reporting the load balancer's activity. When set, the HTML report page will
  5020.   include a link "refresh"/"stop refresh" so that the user can select whether
  5021.   he wants automatic refresh of the page or not.
  5022.  
  5023.   Though this statement alone is enough to enable statistics reporting, it is
  5024.   recommended to set all other settings in order to avoid relying on default
  5025.   unobvious parameters.
  5026.  
  5027.   Example :
  5028.     # public access (limited to this backend only)
  5029.     backend public_www
  5030.         server srv1 192.168.0.1:80
  5031.         stats enable
  5032.         stats hide-version
  5033.         stats scope   .
  5034.         stats uri     /admin?stats
  5035.         stats realm   Haproxy\ Statistics
  5036.         stats auth    admin1:AdMiN123
  5037.         stats auth    admin2:AdMiN321
  5038.  
  5039.     # internal monitoring access (unlimited)
  5040.     backend private_monitoring
  5041.         stats enable
  5042.         stats uri     /admin?stats
  5043.         stats refresh 5s
  5044.  
  5045.   See also : "stats auth", "stats enable", "stats realm", "stats uri"
  5046.  
  5047.  
  5048. stats scope { <name> | "." }
  5049.   Enable statistics and limit access scope
  5050.   May be used in sections :   defaults | frontend | listen | backend
  5051.                                  yes   |    no    |   yes  |   yes
  5052.   Arguments :
  5053.     <name>    is the name of a listen, frontend or backend section to be
  5054.               reported. The special name "." (a single dot) designates the
  5055.               section in which the statement appears.
  5056.  
  5057.   When this statement is specified, only the sections enumerated with this
  5058.   statement will appear in the report. All other ones will be hidden. This
  5059.   statement may appear as many times as needed if multiple sections need to be
  5060.   reported. Please note that the name checking is performed as simple string
  5061.   comparisons, and that it is never checked that a give section name really
  5062.   exists.
  5063.  
  5064.   Though this statement alone is enough to enable statistics reporting, it is
  5065.   recommended to set all other settings in order to avoid relying on default
  5066.   unobvious parameters.
  5067.  
  5068.   Example :
  5069.     # public access (limited to this backend only)
  5070.     backend public_www
  5071.         server srv1 192.168.0.1:80
  5072.         stats enable
  5073.         stats hide-version
  5074.         stats scope   .
  5075.         stats uri     /admin?stats
  5076.         stats realm   Haproxy\ Statistics
  5077.         stats auth    admin1:AdMiN123
  5078.         stats auth    admin2:AdMiN321
  5079.  
  5080.     # internal monitoring access (unlimited)
  5081.     backend private_monitoring
  5082.         stats enable
  5083.         stats uri     /admin?stats
  5084.         stats refresh 5s
  5085.  
  5086.   See also : "stats auth", "stats enable", "stats realm", "stats uri"
  5087.  
  5088.  
  5089. stats show-desc [ <description> ]
  5090.   Enable reporting of a description on the statistics page.
  5091.   May be used in sections :   defaults | frontend | listen | backend
  5092.                                  yes   |    no    |   yes  |   yes
  5093.  
  5094.     <name>    is an optional description to be reported. If unspecified, the
  5095.               description from global section is automatically used instead.
  5096.  
  5097.   This statement is useful for users that offer shared services to their
  5098.   customers, where node or description should be different for each customer.
  5099.  
  5100.   Though this statement alone is enough to enable statistics reporting, it is
  5101.   recommended to set all other settings in order to avoid relying on default
  5102.   unobvious parameters.  By default description is not shown.
  5103.  
  5104.   Example :
  5105.     # internal monitoring access (unlimited)
  5106.     backend private_monitoring
  5107.         stats enable
  5108.         stats show-desc Master node for Europe, Asia, Africa
  5109.         stats uri       /admin?stats
  5110.         stats refresh   5s
  5111.  
  5112.   See also: "show-node", "stats enable", "stats uri" and "description" in
  5113.             global section.
  5114.  
  5115.  
  5116. stats show-legends
  5117.   Enable reporting additional informations on the statistics page :
  5118.     - cap: capabilities (proxy)
  5119.     - mode: one of tcp, http or health (proxy)
  5120.     - id: SNMP ID (proxy, socket, server)
  5121.     - IP (socket, server)
  5122.     - cookie (backend, server)
  5123.  
  5124.   Though this statement alone is enough to enable statistics reporting, it is
  5125.   recommended to set all other settings in order to avoid relying on default
  5126.   unobvious parameters.  Default behaviour is not to show this information.
  5127.  
  5128.   See also: "stats enable", "stats uri".
  5129.  
  5130.  
  5131. stats show-node [ <name> ]
  5132.   Enable reporting of a host name on the statistics page.
  5133.   May be used in sections :   defaults | frontend | listen | backend
  5134.                                  yes   |    no    |   yes  |   yes
  5135.   Arguments:
  5136.     <name>    is an optional name to be reported. If unspecified, the
  5137.               node name from global section is automatically used instead.
  5138.  
  5139.   This statement is useful for users that offer shared services to their
  5140.   customers, where node or description might be different on a stats page
  5141.   provided for each customer.  Default behaviour is not to show host name.
  5142.  
  5143.   Though this statement alone is enough to enable statistics reporting, it is
  5144.   recommended to set all other settings in order to avoid relying on default
  5145.   unobvious parameters.
  5146.  
  5147.   Example:
  5148.     # internal monitoring access (unlimited)
  5149.     backend private_monitoring
  5150.         stats enable
  5151.         stats show-node Europe-1
  5152.         stats uri       /admin?stats
  5153.         stats refresh   5s
  5154.  
  5155.   See also: "show-desc", "stats enable", "stats uri", and "node" in global
  5156.             section.
  5157.  
  5158.  
  5159. stats uri <prefix>
  5160.   Enable statistics and define the URI prefix to access them
  5161.   May be used in sections :   defaults | frontend | listen | backend
  5162.                                  yes   |    no    |   yes  |   yes
  5163.   Arguments :
  5164.     <prefix>  is the prefix of any URI which will be redirected to stats. This
  5165.               prefix may contain a question mark ('?') to indicate part of a
  5166.               query string.
  5167.  
  5168.   The statistics URI is intercepted on the relayed traffic, so it appears as a
  5169.   page within the normal application. It is strongly advised to ensure that the
  5170.   selected URI will never appear in the application, otherwise it will never be
  5171.   possible to reach it in the application.
  5172.  
  5173.   The default URI compiled in haproxy is "/haproxy?stats", but this may be
  5174.   changed at build time, so it's better to always explicitly specify it here.
  5175.   It is generally a good idea to include a question mark in the URI so that
  5176.   intermediate proxies refrain from caching the results. Also, since any string
  5177.   beginning with the prefix will be accepted as a stats request, the question
  5178.   mark helps ensuring that no valid URI will begin with the same words.
  5179.  
  5180.   It is sometimes very convenient to use "/" as the URI prefix, and put that
  5181.   statement in a "listen" instance of its own. That makes it easy to dedicate
  5182.   an address or a port to statistics only.
  5183.  
  5184.   Though this statement alone is enough to enable statistics reporting, it is
  5185.   recommended to set all other settings in order to avoid relying on default
  5186.   unobvious parameters.
  5187.  
  5188.   Example :
  5189.     # public access (limited to this backend only)
  5190.     backend public_www
  5191.         server srv1 192.168.0.1:80
  5192.         stats enable
  5193.         stats hide-version
  5194.         stats scope   .
  5195.         stats uri     /admin?stats
  5196.         stats realm   Haproxy\ Statistics
  5197.         stats auth    admin1:AdMiN123
  5198.         stats auth    admin2:AdMiN321
  5199.  
  5200.     # internal monitoring access (unlimited)
  5201.     backend private_monitoring
  5202.         stats enable
  5203.         stats uri     /admin?stats
  5204.         stats refresh 5s
  5205.  
  5206.   See also : "stats auth", "stats enable", "stats realm"
  5207.  
  5208.  
  5209. stick match <pattern> [table <table>] [{if | unless} <cond>]
  5210.   Define a request pattern matching condition to stick a user to a server
  5211.   May be used in sections :   defaults | frontend | listen | backend
  5212.                                  no    |    no    |   yes  |   yes
  5213.  
  5214.   Arguments :
  5215.     <pattern>  is a pattern extraction rule as described in section 7.8. It
  5216.                describes what elements of the incoming request or connection
  5217.                will be analysed in the hope to find a matching entry in a
  5218.                stickiness table. This rule is mandatory.
  5219.  
  5220.     <table>    is an optional stickiness table name. If unspecified, the same
  5221.                backend's table is used. A stickiness table is declared using
  5222.                the "stick-table" statement.
  5223.  
  5224.     <cond>     is an optional matching condition. It makes it possible to match
  5225.                on a certain criterion only when other conditions are met (or
  5226.                not met). For instance, it could be used to match on a source IP
  5227.                address except when a request passes through a known proxy, in
  5228.                which case we'd match on a header containing that IP address.
  5229.  
  5230.   Some protocols or applications require complex stickiness rules and cannot
  5231.   always simply rely on cookies nor hashing. The "stick match" statement
  5232.   describes a rule to extract the stickiness criterion from an incoming request
  5233.   or connection. See section 7 for a complete list of possible patterns and
  5234.   transformation rules.
  5235.  
  5236.   The table has to be declared using the "stick-table" statement. It must be of
  5237.   a type compatible with the pattern. By default it is the one which is present
  5238.   in the same backend. It is possible to share a table with other backends by
  5239.   referencing it using the "table" keyword. If another table is referenced,
  5240.   the server's ID inside the backends are used. By default, all server IDs
  5241.   start at 1 in each backend, so the server ordering is enough. But in case of
  5242.   doubt, it is highly recommended to force server IDs using their "id" setting.
  5243.  
  5244.   It is possible to restrict the conditions where a "stick match" statement
  5245.   will apply, using "if" or "unless" followed by a condition. See section 7 for
  5246.   ACL based conditions.
  5247.  
  5248.   There is no limit on the number of "stick match" statements. The first that
  5249.   applies and matches will cause the request to be directed to the same server
  5250.   as was used for the request which created the entry. That way, multiple
  5251.   matches can be used as fallbacks.
  5252.  
  5253.   The stick rules are checked after the persistence cookies, so they will not
  5254.   affect stickiness if a cookie has already been used to select a server. That
  5255.   way, it becomes very easy to insert cookies and match on IP addresses in
  5256.   order to maintain stickiness between HTTP and HTTPS.
  5257.  
  5258.   Note : Consider not using this feature in multi-process mode (nbproc > 1)
  5259.          unless you know what you do : memory is not shared between the
  5260.          processes, which can result in random behaviours.
  5261.  
  5262.   Example :
  5263.     # forward SMTP users to the same server they just used for POP in the
  5264.     # last 30 minutes
  5265.     backend pop
  5266.         mode tcp
  5267.         balance roundrobin
  5268.         stick store-request src
  5269.         stick-table type ip size 200k expire 30m
  5270.         server s1 192.168.1.1:110
  5271.         server s2 192.168.1.1:110
  5272.  
  5273.     backend smtp
  5274.         mode tcp
  5275.         balance roundrobin
  5276.         stick match src table pop
  5277.         server s1 192.168.1.1:25
  5278.         server s2 192.168.1.1:25
  5279.  
  5280.   See also : "stick-table", "stick on", "nbproc", "bind-process" and section 7
  5281.              about ACLs and pattern extraction.
  5282.  
  5283.  
  5284. stick on <pattern> [table <table>] [{if | unless} <condition>]
  5285.   Define a request pattern to associate a user to a server
  5286.   May be used in sections :   defaults | frontend | listen | backend
  5287.                                  no    |    no    |   yes  |   yes
  5288.  
  5289.   Note : This form is exactly equivalent to "stick match" followed by
  5290.          "stick store-request", all with the same arguments. Please refer
  5291.          to both keywords for details. It is only provided as a convenience
  5292.          for writing more maintainable configurations.
  5293.  
  5294.   Note : Consider not using this feature in multi-process mode (nbproc > 1)
  5295.          unless you know what you do : memory is not shared between the
  5296.          processes, which can result in random behaviours.
  5297.  
  5298.   Examples :
  5299.     # The following form ...
  5300.     stick on src table pop if !localhost
  5301.  
  5302.     # ...is strictly equivalent to this one :
  5303.     stick match src table pop if !localhost
  5304.     stick store-request src table pop if !localhost
  5305.  
  5306.  
  5307.     # Use cookie persistence for HTTP, and stick on source address for HTTPS as
  5308.     # well as HTTP without cookie. Share the same table between both accesses.
  5309.     backend http
  5310.         mode http
  5311.         balance roundrobin
  5312.         stick on src table https
  5313.         cookie SRV insert indirect nocache
  5314.         server s1 192.168.1.1:80 cookie s1
  5315.         server s2 192.168.1.1:80 cookie s2
  5316.  
  5317.     backend https
  5318.         mode tcp
  5319.         balance roundrobin
  5320.         stick-table type ip size 200k expire 30m
  5321.         stick on src
  5322.         server s1 192.168.1.1:443
  5323.         server s2 192.168.1.1:443
  5324.  
  5325.   See also : "stick match", "stick store-request", "nbproc" and "bind-process".
  5326.  
  5327.  
  5328. stick store-request <pattern> [table <table>] [{if | unless} <condition>]
  5329.   Define a request pattern used to create an entry in a stickiness table
  5330.   May be used in sections :   defaults | frontend | listen | backend
  5331.                                  no    |    no    |   yes  |   yes
  5332.  
  5333.   Arguments :
  5334.     <pattern>  is a pattern extraction rule as described in section 7.8. It
  5335.                describes what elements of the incoming request or connection
  5336.                will be analysed, extracted and stored in the table once a
  5337.                server is selected.
  5338.  
  5339.     <table>    is an optional stickiness table name. If unspecified, the same
  5340.                backend's table is used. A stickiness table is declared using
  5341.                the "stick-table" statement.
  5342.  
  5343.     <cond>     is an optional storage condition. It makes it possible to store
  5344.                certain criteria only when some conditions are met (or not met).
  5345.                For instance, it could be used to store the source IP address
  5346.                except when the request passes through a known proxy, in which
  5347.                case we'd store a converted form of a header containing that IP
  5348.                address.
  5349.  
  5350.   Some protocols or applications require complex stickiness rules and cannot
  5351.   always simply rely on cookies nor hashing. The "stick store-request" statement
  5352.   describes a rule to decide what to extract from the request and when to do
  5353.   it, in order to store it into a stickiness table for further requests to
  5354.   match it using the "stick match" statement. Obviously the extracted part must
  5355.   make sense and have a chance to be matched in a further request. Storing a
  5356.   client's IP address for instance often makes sense. Storing an ID found in a
  5357.   URL parameter also makes sense. Storing a source port will almost never make
  5358.   any sense because it will be randomly matched. See section 7 for a complete
  5359.   list of possible patterns and transformation rules.
  5360.  
  5361.   The table has to be declared using the "stick-table" statement. It must be of
  5362.   a type compatible with the pattern. By default it is the one which is present
  5363.   in the same backend. It is possible to share a table with other backends by
  5364.   referencing it using the "table" keyword. If another table is referenced,
  5365.   the server's ID inside the backends are used. By default, all server IDs
  5366.   start at 1 in each backend, so the server ordering is enough. But in case of
  5367.   doubt, it is highly recommended to force server IDs using their "id" setting.
  5368.  
  5369.   It is possible to restrict the conditions where a "stick store-request"
  5370.   statement will apply, using "if" or "unless" followed by a condition. This
  5371.   condition will be evaluated while parsing the request, so any criteria can be
  5372.   used. See section 7 for ACL based conditions.
  5373.  
  5374.   There is no limit on the number of "stick store-request" statements, but
  5375.   there is a limit of 8 simultaneous stores per request or response. This
  5376.   makes it possible to store up to 8 criteria, all extracted from either the
  5377.   request or the response, regardless of the number of rules. Only the 8 first
  5378.   ones which match will be kept. Using this, it is possible to feed multiple
  5379.   tables at once in the hope to increase the chance to recognize a user on
  5380.   another protocol or access method.
  5381.  
  5382.   The "store-request" rules are evaluated once the server connection has been
  5383.   established, so that the table will contain the real server that processed
  5384.   the request.
  5385.  
  5386.   Note : Consider not using this feature in multi-process mode (nbproc > 1)
  5387.          unless you know what you do : memory is not shared between the
  5388.          processes, which can result in random behaviours.
  5389.  
  5390.   Example :
  5391.     # forward SMTP users to the same server they just used for POP in the
  5392.     # last 30 minutes
  5393.     backend pop
  5394.         mode tcp
  5395.         balance roundrobin
  5396.         stick store-request src
  5397.         stick-table type ip size 200k expire 30m
  5398.         server s1 192.168.1.1:110
  5399.         server s2 192.168.1.1:110
  5400.  
  5401.     backend smtp
  5402.         mode tcp
  5403.         balance roundrobin
  5404.         stick match src table pop
  5405.         server s1 192.168.1.1:25
  5406.         server s2 192.168.1.1:25
  5407.  
  5408.   See also : "stick-table", "stick on", "nbproc", "bind-process" and section 7
  5409.              about ACLs and pattern extraction.
  5410.  
  5411.  
  5412. stick-table type {ip | integer | string [len <length>] } size <size>
  5413.             [expire <expire>] [nopurge]
  5414.   Configure the stickiness table for the current backend
  5415.   May be used in sections :   defaults | frontend | listen | backend
  5416.                                  no    |    no    |   yes  |   yes
  5417.  
  5418.   Arguments :
  5419.     ip         a table declared with "type ip" will only store IPv4 addresses.
  5420.                This form is very compact (about 50 bytes per entry) and allows
  5421.                very fast entry lookup and stores with almost no overhead. This
  5422.                is mainly used to store client source IP addresses.
  5423.  
  5424.     integer    a table declared with "type integer" will store 32bit integers
  5425.                which can represent a client identifier found in a request for
  5426.                instance.
  5427.  
  5428.     string     a table declared with "type string" will store substrings of up
  5429.                to <len> characters. If the string provided by the pattern
  5430.                extractor is larger than <len>, it will be truncated before
  5431.                being stored. During matching, at most <len> characters will be
  5432.                compared between the string in the table and the extracted
  5433.                pattern. When not specified, the string is automatically limited
  5434.                to 31 characters.
  5435.  
  5436.     <length>   is the maximum number of characters that will be stored in a
  5437.                "string" type table. See type "string" above. Be careful when
  5438.                changing this parameter as memory usage will proportionally
  5439.                increase.
  5440.  
  5441.     <size>     is the maximum number of entries that can fit in the table. This
  5442.                value directly impacts memory usage. Count approximately
  5443.                50 bytes per entry, plus the size of a string if any. The size
  5444.                supports suffixes "k", "m", "g" for 2^10, 2^20 and 2^30 factors.
  5445.  
  5446.     [nopurge]  indicates that we refuse to purge older entries when the table
  5447.                is full. When not specified and the table is full when haproxy
  5448.                wants to store an entry in it, it will flush a few of the oldest
  5449.                entries in order to release some space for the new ones. This is
  5450.                most often the desired behaviour. In some specific cases, it
  5451.                be desirable to refuse new entries instead of purging the older
  5452.                ones. That may be the case when the amount of data to store is
  5453.                far above the hardware limits and we prefer not to offer access
  5454.                to new clients than to reject the ones already connected. When
  5455.                using this parameter, be sure to properly set the "expire"
  5456.                parameter (see below).
  5457.  
  5458.     <expire>   defines the maximum duration of an entry in the table since it
  5459.                was last created, refreshed or matched. The expiration delay is
  5460.                defined using the standard time format, similarly as the various
  5461.                timeouts. The maximum duration is slightly above 24 days. See
  5462.                section 2.2 for more information. If this delay is not specified,
  5463.                the session won't automatically expire, but older entries will
  5464.                be removed once full. Be sure not to use the "nopurge" parameter
  5465.                if not expiration delay is specified.
  5466.  
  5467.   The is only one stick-table per backend. At the moment of writing this doc,
  5468.   it does not seem useful to have multiple tables per backend. If this happens
  5469.   to be required, simply create a dummy backend with a stick-table in it and
  5470.   reference it.
  5471.  
  5472.   It is important to understand that stickiness based on learning information
  5473.   has some limitations, including the fact that all learned associations are
  5474.   lost upon restart. In general it can be good as a complement but not always
  5475.   as an exclusive stickiness.
  5476.  
  5477.   See also : "stick match", "stick on", "stick store-request", and section 2.2
  5478.              about time format.
  5479.  
  5480.  
  5481. tcp-request content accept [{if | unless} <condition>]
  5482.   Accept a connection if/unless a content inspection condition is matched
  5483.   May be used in sections :   defaults | frontend | listen | backend
  5484.                                  no    |    yes   |   yes  |   no
  5485.  
  5486.   During TCP content inspection, the connection is immediately validated if the
  5487.   condition is true (when used with "if") or false (when used with "unless").
  5488.   Most of the time during content inspection, a condition will be in an
  5489.   uncertain state which is neither true nor false. The evaluation immediately
  5490.   stops when such a condition is encountered. It is important to understand
  5491.   that "accept" and "reject" rules are evaluated in their exact declaration
  5492.   order, so that it is possible to build complex rules from them. There is no
  5493.   specific limit to the number of rules which may be inserted.
  5494.  
  5495.   Note that the "if/unless" condition is optional. If no condition is set on
  5496.   the action, it is simply performed unconditionally.
  5497.  
  5498.   If no "tcp-request content" rules are matched, the default action already is
  5499.   "accept". Thus, this statement alone does not bring anything without another
  5500.   "reject" statement.
  5501.  
  5502.   See section 7 about ACL usage.
  5503.  
  5504.   See also : "tcp-request content reject", "tcp-request inspect-delay"
  5505.  
  5506.  
  5507. tcp-request content reject [{if | unless} <condition>]
  5508.   Reject a connection if/unless a content inspection condition is matched
  5509.   May be used in sections :   defaults | frontend | listen | backend
  5510.                                  no    |    yes   |   yes  |   no
  5511.  
  5512.   During TCP content inspection, the connection is immediately rejected if the
  5513.   condition is true (when used with "if") or false (when used with "unless").
  5514.   Most of the time during content inspection, a condition will be in an
  5515.   uncertain state which is neither true nor false. The evaluation immediately
  5516.   stops when such a condition is encountered. It is important to understand
  5517.   that "accept" and "reject" rules are evaluated in their exact declaration
  5518.   order, so that it is possible to build complex rules from them. There is no
  5519.   specific limit to the number of rules which may be inserted.
  5520.  
  5521.   Note that the "if/unless" condition is optional. If no condition is set on
  5522.   the action, it is simply performed unconditionally.
  5523.  
  5524.   If no "tcp-request content" rules are matched, the default action is set to
  5525.   "accept".
  5526.  
  5527.   Example:
  5528.         # reject SMTP connection if client speaks first
  5529.         tcp-request inspect-delay 30s
  5530.         acl content_present req_len gt 0
  5531.         tcp-request reject if content_present
  5532.  
  5533.         # Forward HTTPS connection only if client speaks
  5534.         tcp-request inspect-delay 30s
  5535.         acl content_present req_len gt 0
  5536.         tcp-request accept if content_present
  5537.         tcp-request reject
  5538.  
  5539.   See section 7 about ACL usage.
  5540.  
  5541.   See also : "tcp-request content accept", "tcp-request inspect-delay"
  5542.  
  5543.  
  5544. tcp-request inspect-delay <timeout>
  5545.   Set the maximum allowed time to wait for data during content inspection
  5546.   May be used in sections :   defaults | frontend | listen | backend
  5547.                                  no    |    yes   |   yes  |   no
  5548.   Arguments :
  5549.     <timeout> is the timeout value specified in milliseconds by default, but
  5550.               can be in any other unit if the number is suffixed by the unit,
  5551.               as explained at the top of this document.
  5552.  
  5553.   People using haproxy primarily as a TCP relay are often worried about the
  5554.   risk of passing any type of protocol to a server without any analysis. In
  5555.   order to be able to analyze the request contents, we must first withhold
  5556.   the data then analyze them. This statement simply enables withholding of
  5557.   data for at most the specified amount of time.
  5558.  
  5559.   Note that when performing content inspection, haproxy will evaluate the whole
  5560.   rules for every new chunk which gets in, taking into account the fact that
  5561.   those data are partial. If no rule matches before the aforementioned delay,
  5562.   a last check is performed upon expiration, this time considering that the
  5563.   contents are definitive. If no delay is set, haproxy will not wait at all
  5564.   and will immediately apply a verdict based on the available information.
  5565.   Obviously this is unlikely to be very useful and might even be racy, so such
  5566.   setups are not recommended.
  5567.  
  5568.   As soon as a rule matches, the request is released and continues as usual. If
  5569.   the timeout is reached and no rule matches, the default policy will be to let
  5570.   it pass through unaffected.
  5571.  
  5572.   For most protocols, it is enough to set it to a few seconds, as most clients
  5573.   send the full request immediately upon connection. Add 3 or more seconds to
  5574.   cover TCP retransmits but that's all. For some protocols, it may make sense
  5575.   to use large values, for instance to ensure that the client never talks
  5576.   before the server (eg: SMTP), or to wait for a client to talk before passing
  5577.   data to the server (eg: SSL). Note that the client timeout must cover at
  5578.   least the inspection delay, otherwise it will expire first. If the client
  5579.   closes the connection or if the buffer is full, the delay immediately expires
  5580.   since the contents will not be able to change anymore.
  5581.  
  5582.   See also : "tcp-request content accept", "tcp-request content reject",
  5583.              "timeout client".
  5584.  
  5585.  
  5586. timeout check <timeout>
  5587.   Set additional check timeout, but only after a connection has been already
  5588.   established.
  5589.  
  5590.   May be used in sections:    defaults | frontend | listen | backend
  5591.                                  yes   |    no    |   yes  |   yes
  5592.   Arguments:
  5593.     <timeout> is the timeout value specified in milliseconds by default, but
  5594.               can be in any other unit if the number is suffixed by the unit,
  5595.               as explained at the top of this document.
  5596.  
  5597.   If set, haproxy uses min("timeout connect", "inter") as a connect timeout
  5598.   for check and "timeout check" as an additional read timeout. The "min" is
  5599.   used so that people running with *very* long "timeout connect" (eg. those
  5600.   who needed this due to the queue or tarpit) do not slow down their checks.
  5601.   (Please also note that there is no valid reason to have such long connect
  5602.   timeouts, because "timeout queue" and "timeout tarpit" can always be used to
  5603.   avoid that).
  5604.  
  5605.   If "timeout check" is not set haproxy uses "inter" for complete check
  5606.   timeout (connect + read) exactly like all <1.3.15 version.
  5607.  
  5608.   In most cases check request is much simpler and faster to handle than normal
  5609.   requests and people may want to kick out laggy servers so this timeout should
  5610.   be smaller than "timeout server".
  5611.  
  5612.   This parameter is specific to backends, but can be specified once for all in
  5613.   "defaults" sections. This is in fact one of the easiest solutions not to
  5614.   forget about it.
  5615.  
  5616.   See also: "timeout connect", "timeout queue", "timeout server",
  5617.             "timeout tarpit".
  5618.  
  5619.  
  5620. timeout client <timeout>
  5621. timeout clitimeout <timeout> (deprecated)
  5622.   Set the maximum inactivity time on the client side.
  5623.   May be used in sections :   defaults | frontend | listen | backend
  5624.                                  yes   |    yes   |   yes  |   no
  5625.   Arguments :
  5626.     <timeout> is the timeout value specified in milliseconds by default, but
  5627.               can be in any other unit if the number is suffixed by the unit,
  5628.               as explained at the top of this document.
  5629.  
  5630.   The inactivity timeout applies when the client is expected to acknowledge or
  5631.   send data. In HTTP mode, this timeout is particularly important to consider
  5632.   during the first phase, when the client sends the request, and during the
  5633.   response while it is reading data sent by the server. The value is specified
  5634.   in milliseconds by default, but can be in any other unit if the number is
  5635.   suffixed by the unit, as specified at the top of this document. In TCP mode
  5636.   (and to a lesser extent, in HTTP mode), it is highly recommended that the
  5637.   client timeout remains equal to the server timeout in order to avoid complex
  5638.   situations to debug. It is a good practice to cover one or several TCP packet
  5639.   losses by specifying timeouts that are slightly above multiples of 3 seconds
  5640.   (eg: 4 or 5 seconds).
  5641.  
  5642.   This parameter is specific to frontends, but can be specified once for all in
  5643.   "defaults" sections. This is in fact one of the easiest solutions not to
  5644.   forget about it. An unspecified timeout results in an infinite timeout, which
  5645.   is not recommended. Such a usage is accepted and works but reports a warning
  5646.   during startup because it may results in accumulation of expired sessions in
  5647.   the system if the system's timeouts are not configured either.
  5648.  
  5649.   This parameter replaces the old, deprecated "clitimeout". It is recommended
  5650.   to use it to write new configurations. The form "timeout clitimeout" is
  5651.   provided only by backwards compatibility but its use is strongly discouraged.
  5652.  
  5653.   See also : "clitimeout", "timeout server".
  5654.  
  5655.  
  5656. timeout connect <timeout>
  5657. timeout contimeout <timeout> (deprecated)
  5658.   Set the maximum time to wait for a connection attempt to a server to succeed.
  5659.   May be used in sections :   defaults | frontend | listen | backend
  5660.                                  yes   |    no    |   yes  |   yes
  5661.   Arguments :
  5662.     <timeout> is the timeout value specified in milliseconds by default, but
  5663.               can be in any other unit if the number is suffixed by the unit,
  5664.               as explained at the top of this document.
  5665.  
  5666.   If the server is located on the same LAN as haproxy, the connection should be
  5667.   immediate (less than a few milliseconds). Anyway, it is a good practice to
  5668.   cover one or several TCP packet losses by specifying timeouts that are
  5669.   slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
  5670.   connect timeout also presets both queue and tarpit timeouts to the same value
  5671.   if these have not been specified.
  5672.  
  5673.   This parameter is specific to backends, but can be specified once for all in
  5674.   "defaults" sections. This is in fact one of the easiest solutions not to
  5675.   forget about it. An unspecified timeout results in an infinite timeout, which
  5676.   is not recommended. Such a usage is accepted and works but reports a warning
  5677.   during startup because it may results in accumulation of failed sessions in
  5678.   the system if the system's timeouts are not configured either.
  5679.  
  5680.   This parameter replaces the old, deprecated "contimeout". It is recommended
  5681.   to use it to write new configurations. The form "timeout contimeout" is
  5682.   provided only by backwards compatibility but its use is strongly discouraged.
  5683.  
  5684.   See also: "timeout check", "timeout queue", "timeout server", "contimeout",
  5685.             "timeout tarpit".
  5686.  
  5687.  
  5688. timeout http-keep-alive <timeout>
  5689.   Set the maximum allowed time to wait for a new HTTP request to appear
  5690.   May be used in sections :   defaults | frontend | listen | backend
  5691.                                  yes   |    yes   |   yes  |   yes
  5692.   Arguments :
  5693.     <timeout> is the timeout value specified in milliseconds by default, but
  5694.               can be in any other unit if the number is suffixed by the unit,
  5695.               as explained at the top of this document.
  5696.  
  5697.   By default, the time to wait for a new request in case of keep-alive is set
  5698.   by "timeout http-request". However this is not always convenient because some
  5699.   people want very short keep-alive timeouts in order to release connections
  5700.   faster, and others prefer to have larger ones but still have short timeouts
  5701.   once the request has started to present itself.
  5702.  
  5703.   The "http-keep-alive" timeout covers these needs. It will define how long to
  5704.   wait for a new HTTP request to start coming after a response was sent. Once
  5705.   the first byte of request has been seen, the "http-request" timeout is used
  5706.   to wait for the complete request to come. Note that empty lines prior to a
  5707.   new request do not refresh the timeout and are not counted as a new request.
  5708.  
  5709.   There is also another difference between the two timeouts : when a connection
  5710.   expires during timeout http-keep-alive, no error is returned, the connection
  5711.   just closes. If the connection expires in "http-request" while waiting for a
  5712.   connection to complete, a HTTP 408 error is returned.
  5713.  
  5714.   In general it is optimal to set this value to a few tens to hundreds of
  5715.   milliseconds, to allow users to fetch all objects of a page at once but
  5716.   without waiting for further clicks. Also, if set to a very small value (eg:
  5717.   1 millisecond) it will probably only accept pipelined requests but not the
  5718.   non-pipelined ones. It may be a nice trade-off for very large sites running
  5719.   with tens to hundreds of thousands of clients.
  5720.  
  5721.   If this parameter is not set, the "http-request" timeout applies, and if both
  5722.   are not set, "timeout client" still applies at the lower level. It should be
  5723.   set in the frontend to take effect, unless the frontend is in TCP mode, in
  5724.   which case the HTTP backend's timeout will be used.
  5725.  
  5726.   See also : "timeout http-request", "timeout client".
  5727.  
  5728.  
  5729. timeout http-request <timeout>
  5730.   Set the maximum allowed time to wait for a complete HTTP request
  5731.   May be used in sections :   defaults | frontend | listen | backend
  5732.                                  yes   |    yes   |   yes  |   yes
  5733.   Arguments :
  5734.     <timeout> is the timeout value specified in milliseconds by default, but
  5735.               can be in any other unit if the number is suffixed by the unit,
  5736.               as explained at the top of this document.
  5737.  
  5738.   In order to offer DoS protection, it may be required to lower the maximum
  5739.   accepted time to receive a complete HTTP request without affecting the client
  5740.   timeout. This helps protecting against established connections on which
  5741.   nothing is sent. The client timeout cannot offer a good protection against
  5742.   this abuse because it is an inactivity timeout, which means that if the
  5743.   attacker sends one character every now and then, the timeout will not
  5744.   trigger. With the HTTP request timeout, no matter what speed the client
  5745.   types, the request will be aborted if it does not complete in time.
  5746.  
  5747.   Note that this timeout only applies to the header part of the request, and
  5748.   not to any data. As soon as the empty line is received, this timeout is not
  5749.   used anymore. It is used again on keep-alive connections to wait for a second
  5750.   request if "timeout http-keep-alive" is not set.
  5751.  
  5752.   Generally it is enough to set it to a few seconds, as most clients send the
  5753.   full request immediately upon connection. Add 3 or more seconds to cover TCP
  5754.   retransmits but that's all. Setting it to very low values (eg: 50 ms) will
  5755.   generally work on local networks as long as there are no packet losses. This
  5756.   will prevent people from sending bare HTTP requests using telnet.
  5757.  
  5758.   If this parameter is not set, the client timeout still applies between each
  5759.   chunk of the incoming request. It should be set in the frontend to take
  5760.   effect, unless the frontend is in TCP mode, in which case the HTTP backend's
  5761.   timeout will be used.
  5762.  
  5763.   See also : "timeout http-keep-alive", "timeout client".
  5764.  
  5765.  
  5766. timeout queue <timeout>
  5767.   Set the maximum time to wait in the queue for a connection slot to be free
  5768.   May be used in sections :   defaults | frontend | listen | backend
  5769.                                  yes   |    no    |   yes  |   yes
  5770.   Arguments :
  5771.     <timeout> is the timeout value specified in milliseconds by default, but
  5772.               can be in any other unit if the number is suffixed by the unit,
  5773.               as explained at the top of this document.
  5774.  
  5775.   When a server's maxconn is reached, connections are left pending in a queue
  5776.   which may be server-specific or global to the backend. In order not to wait
  5777.   indefinitely, a timeout is applied to requests pending in the queue. If the
  5778.   timeout is reached, it is considered that the request will almost never be
  5779.   served, so it is dropped and a 503 error is returned to the client.
  5780.  
  5781.   The "timeout queue" statement allows to fix the maximum time for a request to
  5782.   be left pending in a queue. If unspecified, the same value as the backend's
  5783.   connection timeout ("timeout connect") is used, for backwards compatibility
  5784.   with older versions with no "timeout queue" parameter.
  5785.  
  5786.   See also : "timeout connect", "contimeout".
  5787.  
  5788.  
  5789. timeout server <timeout>
  5790. timeout srvtimeout <timeout> (deprecated)
  5791.   Set the maximum inactivity time on the server side.
  5792.   May be used in sections :   defaults | frontend | listen | backend
  5793.                                  yes   |    no    |   yes  |   yes
  5794.   Arguments :
  5795.     <timeout> is the timeout value specified in milliseconds by default, but
  5796.               can be in any other unit if the number is suffixed by the unit,
  5797.               as explained at the top of this document.
  5798.  
  5799.   The inactivity timeout applies when the server is expected to acknowledge or
  5800.   send data. In HTTP mode, this timeout is particularly important to consider
  5801.   during the first phase of the server's response, when it has to send the
  5802.   headers, as it directly represents the server's processing time for the
  5803.   request. To find out what value to put there, it's often good to start with
  5804.   what would be considered as unacceptable response times, then check the logs
  5805.   to observe the response time distribution, and adjust the value accordingly.
  5806.  
  5807.   The value is specified in milliseconds by default, but can be in any other
  5808.   unit if the number is suffixed by the unit, as specified at the top of this
  5809.   document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
  5810.   recommended that the client timeout remains equal to the server timeout in
  5811.   order to avoid complex situations to debug. Whatever the expected server
  5812.   response times, it is a good practice to cover at least one or several TCP
  5813.   packet losses by specifying timeouts that are slightly above multiples of 3
  5814.   seconds (eg: 4 or 5 seconds minimum).
  5815.  
  5816.   This parameter is specific to backends, but can be specified once for all in
  5817.   "defaults" sections. This is in fact one of the easiest solutions not to
  5818.   forget about it. An unspecified timeout results in an infinite timeout, which
  5819.   is not recommended. Such a usage is accepted and works but reports a warning
  5820.   during startup because it may results in accumulation of expired sessions in
  5821.   the system if the system's timeouts are not configured either.
  5822.  
  5823.   This parameter replaces the old, deprecated "srvtimeout". It is recommended
  5824.   to use it to write new configurations. The form "timeout srvtimeout" is
  5825.   provided only by backwards compatibility but its use is strongly discouraged.
  5826.  
  5827.   See also : "srvtimeout", "timeout client".
  5828.  
  5829.  
  5830. timeout tarpit <timeout>
  5831.   Set the duration for which tarpitted connections will be maintained
  5832.   May be used in sections :   defaults | frontend | listen | backend
  5833.                                  yes   |    yes   |   yes  |   yes
  5834.   Arguments :
  5835.     <timeout> is the tarpit duration specified in milliseconds by default, but
  5836.               can be in any other unit if the number is suffixed by the unit,
  5837.               as explained at the top of this document.
  5838.  
  5839.   When a connection is tarpitted using "reqtarpit", it is maintained open with
  5840.   no activity for a certain amount of time, then closed. "timeout tarpit"
  5841.   defines how long it will be maintained open.
  5842.  
  5843.   The value is specified in milliseconds by default, but can be in any other
  5844.   unit if the number is suffixed by the unit, as specified at the top of this
  5845.   document. If unspecified, the same value as the backend's connection timeout
  5846.   ("timeout connect") is used, for backwards compatibility with older versions
  5847.   with no "timeout tarpit" parameter.
  5848.  
  5849.   See also : "timeout connect", "contimeout".
  5850.  
  5851.  
  5852. transparent (deprecated)
  5853.   Enable client-side transparent proxying
  5854.   May be used in sections :   defaults | frontend | listen | backend
  5855.                                  yes   |    no    |   yes  |   yes
  5856.   Arguments : none
  5857.  
  5858.   This keyword was introduced in order to provide layer 7 persistence to layer
  5859.   3 load balancers. The idea is to use the OS's ability to redirect an incoming
  5860.   connection for a remote address to a local process (here HAProxy), and let
  5861.   this process know what address was initially requested. When this option is
  5862.   used, sessions without cookies will be forwarded to the original destination
  5863.   IP address of the incoming request (which should match that of another
  5864.   equipment), while requests with cookies will still be forwarded to the
  5865.   appropriate server.
  5866.  
  5867.   The "transparent" keyword is deprecated, use "option transparent" instead.
  5868.  
  5869.   Note that contrary to a common belief, this option does NOT make HAProxy
  5870.   present the client's IP to the server when establishing the connection.
  5871.  
  5872.   See also: "option transparent"
  5873.  
  5874.  
  5875. use_backend <backend> if <condition>
  5876. use_backend <backend> unless <condition>
  5877.   Switch to a specific backend if/unless an ACL-based condition is matched.
  5878.   May be used in sections :   defaults | frontend | listen | backend
  5879.                                   no   |    yes   |   yes  |   no
  5880.   Arguments :
  5881.     <backend>   is the name of a valid backend or "listen" section.
  5882.  
  5883.     <condition> is a condition composed of ACLs, as described in section 7.
  5884.  
  5885.   When doing content-switching, connections arrive on a frontend and are then
  5886.   dispatched to various backends depending on a number of conditions. The
  5887.   relation between the conditions and the backends is described with the
  5888.   "use_backend" keyword. While it is normally used with HTTP processing, it can
  5889.   also be used in pure TCP, either without content using stateless ACLs (eg:
  5890.   source address validation) or combined with a "tcp-request" rule to wait for
  5891.   some payload.
  5892.  
  5893.   There may be as many "use_backend" rules as desired. All of these rules are
  5894.   evaluated in their declaration order, and the first one which matches will
  5895.   assign the backend.
  5896.  
  5897.   In the first form, the backend will be used if the condition is met. In the
  5898.   second form, the backend will be used if the condition is not met. If no
  5899.   condition is valid, the backend defined with "default_backend" will be used.
  5900.   If no default backend is defined, either the servers in the same section are
  5901.   used (in case of a "listen" section) or, in case of a frontend, no server is
  5902.   used and a 503 service unavailable response is returned.
  5903.  
  5904.   Note that it is possible to switch from a TCP frontend to an HTTP backend. In
  5905.   this case, either the frontend has already checked that the protocol is HTTP,
  5906.   and backend processing will immediately follow, or the backend will wait for
  5907.   a complete HTTP request to get in. This feature is useful when a frontend
  5908.   must decode several protocols on a unique port, one of them being HTTP.
  5909.  
  5910.   See also: "default_backend", "tcp-request", and section 7 about ACLs.
  5911.  
  5912.  
  5913. 5. Server and default-server options
  5914. ------------------------------------
  5915.  
  5916. The "server" and "default-server" keywords support a certain number of settings
  5917. which are all passed as arguments on the server line. The order in which those
  5918. arguments appear does not count, and they are all optional. Some of those
  5919. settings are single words (booleans) while others expect one or several values
  5920. after them. In this case, the values must immediately follow the setting name.
  5921. Except default-server, all those settings must be specified after the server's
  5922. address if they are used:
  5923.  
  5924.   server <name> <address>[:port] [settings ...]
  5925.   default-server [settings ...]
  5926.  
  5927. The currently supported settings are the following ones.
  5928.  
  5929. addr <ipv4>
  5930.   Using the "addr" parameter, it becomes possible to use a different IP address
  5931.   to send health-checks. On some servers, it may be desirable to dedicate an IP
  5932.   address to specific component able to perform complex tests which are more
  5933.   suitable to health-checks than the application. This parameter is ignored if
  5934.   the "check" parameter is not set. See also the "port" parameter.
  5935.  
  5936.   Supported in default-server: No
  5937.  
  5938. backup
  5939.   When "backup" is present on a server line, the server is only used in load
  5940.   balancing when all other non-backup servers are unavailable. Requests coming
  5941.   with a persistence cookie referencing the server will always be served
  5942.   though. By default, only the first operational backup server is used, unless
  5943.   the "allbackups" option is set in the backend. See also the "allbackups"
  5944.   option.
  5945.  
  5946.   Supported in default-server: No
  5947.  
  5948. check
  5949.   This option enables health checks on the server. By default, a server is
  5950.   always considered available. If "check" is set, the server will receive
  5951.   periodic health checks to ensure that it is really able to serve requests.
  5952.   The default address and port to send the tests to are those of the server,
  5953.   and the default source is the same as the one defined in the backend. It is
  5954.   possible to change the address using the "addr" parameter, the port using the
  5955.   "port" parameter, the source address using the "source" address, and the
  5956.   interval and timers using the "inter", "rise" and "fall" parameters. The
  5957.   request method is define in the backend using the "httpchk", "smtpchk",
  5958.   "mysql-check" and "ssl-hello-chk" options. Please refer to those options and
  5959.   parameters for more information.
  5960.  
  5961.   Supported in default-server: No
  5962.  
  5963. cookie <value>
  5964.   The "cookie" parameter sets the cookie value assigned to the server to
  5965.   <value>. This value will be checked in incoming requests, and the first
  5966.   operational server possessing the same value will be selected. In return, in
  5967.   cookie insertion or rewrite modes, this value will be assigned to the cookie
  5968.   sent to the client. There is nothing wrong in having several servers sharing
  5969.   the same cookie value, and it is in fact somewhat common between normal and
  5970.   backup servers. See also the "cookie" keyword in backend section.
  5971.  
  5972.   Supported in default-server: No
  5973.  
  5974. disabled
  5975.   The "disabled" keyword starts the server in the "disabled" state. That means
  5976.   that it is marked down in maintenance mode, and no connection other than the
  5977.   ones allowed by persist mode will reach it. It is very well suited to setup
  5978.   new servers, because normal traffic will never reach them, while it is still
  5979.   possible to test the service by making use of the force-persist mechanism.
  5980.  
  5981.   Supported in default-server: No
  5982.  
  5983. error-limit <count>
  5984.   If health observing is enabled, the "error-limit" parameter specifies the
  5985.   number of consecutive errors that triggers event selected by the "on-error"
  5986.   option. By default it is set to 10 consecutive errors.
  5987.  
  5988.   Supported in default-server: Yes
  5989.  
  5990.   See also the "check", "error-limit" and "on-error".
  5991.  
  5992. fall <count>
  5993.   The "fall" parameter states that a server will be considered as dead after
  5994.   <count> consecutive unsuccessful health checks. This value defaults to 3 if
  5995.   unspecified. See also the "check", "inter" and "rise" parameters.
  5996.  
  5997.   Supported in default-server: Yes
  5998.  
  5999. id <value>
  6000.   Set a persistent ID for the server. This ID must be positive and unique for
  6001.   the proxy. An unused ID will automatically be assigned if unset. The first
  6002.   assigned value will be 1. This ID is currently only returned in statistics.
  6003.  
  6004.   Supported in default-server: No
  6005.  
  6006. inter <delay>
  6007. fastinter <delay>
  6008. downinter <delay>
  6009.   The "inter" parameter sets the interval between two consecutive health checks
  6010.   to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
  6011.   It is also possible to use "fastinter" and "downinter" to optimize delays
  6012.   between checks depending on the server state :
  6013.  
  6014.              Server state            |             Interval used
  6015.     ---------------------------------+-----------------------------------------
  6016.      UP 100% (non-transitional)      | "inter"
  6017.     ---------------------------------+-----------------------------------------
  6018.      Transitionally UP (going down), |
  6019.      Transitionally DOWN (going up), | "fastinter" if set, "inter" otherwise.
  6020.      or yet unchecked.               |
  6021.     ---------------------------------+-----------------------------------------
  6022.      DOWN 100% (non-transitional)    | "downinter" if set, "inter" otherwise.
  6023.     ---------------------------------+-----------------------------------------
  6024.  
  6025.   Just as with every other time-based parameter, they can be entered in any
  6026.   other explicit unit among { us, ms, s, m, h, d }. The "inter" parameter also
  6027.   serves as a timeout for health checks sent to servers if "timeout check" is
  6028.   not set. In order to reduce "resonance" effects when multiple servers are
  6029.   hosted on the same hardware, the health-checks of all servers are started
  6030.   with a small time offset between them. It is also possible to add some random
  6031.   noise in the health checks interval using the global "spread-checks"
  6032.   keyword. This makes sense for instance when a lot of backends use the same
  6033.   servers.
  6034.  
  6035.   Supported in default-server: Yes
  6036.  
  6037. maxconn <maxconn>
  6038.   The "maxconn" parameter specifies the maximal number of concurrent
  6039.   connections that will be sent to this server. If the number of incoming
  6040.   concurrent requests goes higher than this value, they will be queued, waiting
  6041.   for a connection to be released. This parameter is very important as it can
  6042.   save fragile servers from going down under extreme loads. If a "minconn"
  6043.   parameter is specified, the limit becomes dynamic. The default value is "0"
  6044.   which means unlimited. See also the "minconn" and "maxqueue" parameters, and
  6045.   the backend's "fullconn" keyword.
  6046.  
  6047.   Supported in default-server: Yes
  6048.  
  6049. maxqueue <maxqueue>
  6050.   The "maxqueue" parameter specifies the maximal number of connections which
  6051.   will wait in the queue for this server. If this limit is reached, next
  6052.   requests will be redispatched to other servers instead of indefinitely
  6053.   waiting to be served. This will break persistence but may allow people to
  6054.   quickly re-log in when the server they try to connect to is dying. The
  6055.   default value is "0" which means the queue is unlimited. See also the
  6056.   "maxconn" and "minconn" parameters.
  6057.  
  6058.   Supported in default-server: Yes
  6059.  
  6060. minconn <minconn>
  6061.   When the "minconn" parameter is set, the maxconn limit becomes a dynamic
  6062.   limit following the backend's load. The server will always accept at least
  6063.   <minconn> connections, never more than <maxconn>, and the limit will be on
  6064.   the ramp between both values when the backend has less than <fullconn>
  6065.   concurrent connections. This makes it possible to limit the load on the
  6066.   server during normal loads, but push it further for important loads without
  6067.   overloading the server during exceptional loads. See also the "maxconn"
  6068.   and "maxqueue" parameters, as well as the "fullconn" backend keyword.
  6069.  
  6070.   Supported in default-server: Yes
  6071.  
  6072. observe <mode>
  6073.   This option enables health adjusting based on observing communication with
  6074.   the server. By default this functionality is disabled and enabling it also
  6075.   requires to enable health checks. There are two supported modes: "layer4" and
  6076.   "layer7". In layer4 mode, only successful/unsuccessful tcp connections are
  6077.   significant. In layer7, which is only allowed for http proxies, responses
  6078.   received from server are verified, like valid/wrong http code, unparsable
  6079.   headers, a timeout, etc. Valid status codes include 100 to 499, 501 and 505.
  6080.  
  6081.   Supported in default-server: No
  6082.  
  6083.   See also the "check", "on-error" and "error-limit".
  6084.  
  6085. on-error <mode>
  6086.   Select what should happen when enough consecutive errors are detected.
  6087.   Currently, four modes are available:
  6088.   - fastinter: force fastinter
  6089.   - fail-check: simulate a failed check, also forces fastinter (default)
  6090.   - sudden-death: simulate a pre-fatal failed health check, one more failed
  6091.     check will mark a server down, forces fastinter
  6092.   - mark-down: mark the server immediately down and force fastinter
  6093.  
  6094.   Supported in default-server: Yes
  6095.  
  6096.   See also the "check", "observe" and "error-limit".
  6097.  
  6098. port <port>
  6099.   Using the "port" parameter, it becomes possible to use a different port to
  6100.   send health-checks. On some servers, it may be desirable to dedicate a port
  6101.   to a specific component able to perform complex tests which are more suitable
  6102.   to health-checks than the application. It is common to run a simple script in
  6103.   inetd for instance. This parameter is ignored if the "check" parameter is not
  6104.   set. See also the "addr" parameter.
  6105.  
  6106.   Supported in default-server: Yes
  6107.  
  6108. redir <prefix>
  6109.   The "redir" parameter enables the redirection mode for all GET and HEAD
  6110.   requests addressing this server. This means that instead of having HAProxy
  6111.   forward the request to the server, it will send an "HTTP 302" response with
  6112.   the "Location" header composed of this prefix immediately followed by the
  6113.   requested URI beginning at the leading '/' of the path component. That means
  6114.   that no trailing slash should be used after <prefix>. All invalid requests
  6115.   will be rejected, and all non-GET or HEAD requests will be normally served by
  6116.   the server. Note that since the response is completely forged, no header
  6117.   mangling nor cookie insertion is possible in the response. However, cookies in
  6118.   requests are still analysed, making this solution completely usable to direct
  6119.   users to a remote location in case of local disaster. Main use consists in
  6120.   increasing bandwidth for static servers by having the clients directly
  6121.   connect to them. Note: never use a relative location here, it would cause a
  6122.   loop between the client and HAProxy!
  6123.  
  6124.   Example :  server srv1 192.168.1.1:80 redir http://image1.mydomain.com check
  6125.  
  6126.   Supported in default-server: No
  6127.  
  6128. rise <count>
  6129.   The "rise" parameter states that a server will be considered as operational
  6130.   after <count> consecutive successful health checks. This value defaults to 2
  6131.   if unspecified. See also the "check", "inter" and "fall" parameters.
  6132.  
  6133.   Supported in default-server: Yes
  6134.  
  6135. slowstart <start_time_in_ms>
  6136.   The "slowstart" parameter for a server accepts a value in milliseconds which
  6137.   indicates after how long a server which has just come back up will run at
  6138.   full speed. Just as with every other time-based parameter, it can be entered
  6139.   in any other explicit unit among { us, ms, s, m, h, d }. The speed grows
  6140.   linearly from 0 to 100% during this time. The limitation applies to two
  6141.   parameters :
  6142.  
  6143.   - maxconn: the number of connections accepted by the server will grow from 1
  6144.     to 100% of the usual dynamic limit defined by (minconn,maxconn,fullconn).
  6145.  
  6146.   - weight: when the backend uses a dynamic weighted algorithm, the weight
  6147.     grows linearly from 1 to 100%. In this case, the weight is updated at every
  6148.     health-check. For this reason, it is important that the "inter" parameter
  6149.     is smaller than the "slowstart", in order to maximize the number of steps.
  6150.  
  6151.   The slowstart never applies when haproxy starts, otherwise it would cause
  6152.   trouble to running servers. It only applies when a server has been previously
  6153.   seen as failed.
  6154.  
  6155.   Supported in default-server: Yes
  6156.  
  6157. source <addr>[:<pl>[-<ph>]] [usesrc { <addr2>[:<port2>] | client | clientip } ]
  6158. source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
  6159. source <addr>[:<pl>[-<ph>]] [interface <name>] ...
  6160.   The "source" parameter sets the source address which will be used when
  6161.   connecting to the server. It follows the exact same parameters and principle
  6162.   as the backend "source" keyword, except that it only applies to the server
  6163.   referencing it. Please consult the "source" keyword for details.
  6164.  
  6165.   Additionally, the "source" statement on a server line allows one to specify a
  6166.   source port range by indicating the lower and higher bounds delimited by a
  6167.   dash ('-'). Some operating systems might require a valid IP address when a
  6168.   source port range is specified. It is permitted to have the same IP/range for
  6169.   several servers. Doing so makes it possible to bypass the maximum of 64k
  6170.   total concurrent connections. The limit will then reach 64k connections per
  6171.   server.
  6172.  
  6173.   Supported in default-server: No
  6174.  
  6175. track [<proxy>/]<server>
  6176.   This option enables ability to set the current state of the server by
  6177.   tracking another one. Only a server with checks enabled can be tracked
  6178.   so it is not possible for example to track a server that tracks another
  6179.   one. If <proxy> is omitted the current one is used. If disable-on-404 is
  6180.   used, it has to be enabled on both proxies.
  6181.  
  6182.   Supported in default-server: No
  6183.  
  6184. weight <weight>
  6185.   The "weight" parameter is used to adjust the server's weight relative to
  6186.   other servers. All servers will receive a load proportional to their weight
  6187.   relative to the sum of all weights, so the higher the weight, the higher the
  6188.   load. The default weight is 1, and the maximal value is 256. A value of 0
  6189.   means the server will not participate in load-balancing but will still accept
  6190.   persistent connections. If this parameter is used to distribute the load
  6191.   according to server's capacity, it is recommended to start with values which
  6192.   can both grow and shrink, for instance between 10 and 100 to leave enough
  6193.   room above and below for later adjustments.
  6194.  
  6195.   Supported in default-server: Yes
  6196.  
  6197.  
  6198. 6. HTTP header manipulation
  6199. ---------------------------
  6200.  
  6201. In HTTP mode, it is possible to rewrite, add or delete some of the request and
  6202. response headers based on regular expressions. It is also possible to block a
  6203. request or a response if a particular header matches a regular expression,
  6204. which is enough to stop most elementary protocol attacks, and to protect
  6205. against information leak from the internal network. But there is a limitation
  6206. to this : since HAProxy's HTTP engine does not support keep-alive, only headers
  6207. passed during the first request of a TCP session will be seen. All subsequent
  6208. headers will be considered data only and not analyzed. Furthermore, HAProxy
  6209. never touches data contents, it stops analysis at the end of headers.
  6210.  
  6211. There is an exception though. If HAProxy encounters an "Informational Response"
  6212. (status code 1xx), it is able to process all rsp* rules which can allow, deny,
  6213. rewrite or delete a header, but it will refuse to add a header to any such
  6214. messages as this is not HTTP-compliant. The reason for still processing headers
  6215. in such responses is to stop and/or fix any possible information leak which may
  6216. happen, for instance because another downstream equipment would unconditionally
  6217. add a header, or if a server name appears there. When such messages are seen,
  6218. normal processing still occurs on the next non-informational messages.
  6219.  
  6220. This section covers common usage of the following keywords, described in detail
  6221. in section 4.2 :
  6222.  
  6223.   - reqadd     <string>
  6224.   - reqallow   <search>
  6225.   - reqiallow  <search>
  6226.   - reqdel     <search>
  6227.   - reqidel    <search>
  6228.   - reqdeny    <search>
  6229.   - reqideny   <search>
  6230.   - reqpass    <search>
  6231.   - reqipass   <search>
  6232.   - reqrep     <search> <replace>
  6233.   - reqirep    <search> <replace>
  6234.   - reqtarpit  <search>
  6235.   - reqitarpit <search>
  6236.   - rspadd     <string>
  6237.   - rspdel     <search>
  6238.   - rspidel    <search>
  6239.   - rspdeny    <search>
  6240.   - rspideny   <search>
  6241.   - rsprep     <search> <replace>
  6242.   - rspirep    <search> <replace>
  6243.  
  6244. With all these keywords, the same conventions are used. The <search> parameter
  6245. is a POSIX extended regular expression (regex) which supports grouping through
  6246. parenthesis (without the backslash). Spaces and other delimiters must be
  6247. prefixed with a backslash ('\') to avoid confusion with a field delimiter.
  6248. Other characters may be prefixed with a backslash to change their meaning :
  6249.  
  6250.   \t   for a tab
  6251.   \r   for a carriage return (CR)
  6252.   \n   for a new line (LF)
  6253.   \    to mark a space and differentiate it from a delimiter
  6254.   \#   to mark a sharp and differentiate it from a comment
  6255.   \\   to use a backslash in a regex
  6256.   \\\\ to use a backslash in the text (*2 for regex, *2 for haproxy)
  6257.   \xXX to write the ASCII hex code XX as in the C language
  6258.  
  6259. The <replace> parameter contains the string to be used to replace the largest
  6260. portion of text matching the regex. It can make use of the special characters
  6261. above, and can reference a substring which is delimited by parenthesis in the
  6262. regex, by writing a backslash ('\') immediately followed by one digit from 0 to
  6263. 9 indicating the group position (0 designating the entire line). This practice
  6264. is very common to users of the "sed" program.
  6265.  
  6266. The <string> parameter represents the string which will systematically be added
  6267. after the last header line. It can also use special character sequences above.
  6268.  
  6269. Notes related to these keywords :
  6270. ---------------------------------
  6271.   - these keywords are not always convenient to allow/deny based on header
  6272.     contents. It is strongly recommended to use ACLs with the "block" keyword
  6273.     instead, resulting in far more flexible and manageable rules.
  6274.  
  6275.   - lines are always considered as a whole. It is not possible to reference
  6276.     a header name only or a value only. This is important because of the way
  6277.     headers are written (notably the number of spaces after the colon).
  6278.  
  6279.   - the first line is always considered as a header, which makes it possible to
  6280.     rewrite or filter HTTP requests URIs or response codes, but in turn makes
  6281.     it harder to distinguish between headers and request line. The regex prefix
  6282.     ^[^\ \t]*[\ \t] matches any HTTP method followed by a space, and the prefix
  6283.     ^[^ \t:]*: matches any header name followed by a colon.
  6284.  
  6285.   - for performances reasons, the number of characters added to a request or to
  6286.     a response is limited at build time to values between 1 and 4 kB. This
  6287.     should normally be far more than enough for most usages. If it is too short
  6288.     on occasional usages, it is possible to gain some space by removing some
  6289.     useless headers before adding new ones.
  6290.  
  6291.   - keywords beginning with "reqi" and "rspi" are the same as their counterpart
  6292.     without the 'i' letter except that they ignore case when matching patterns.
  6293.  
  6294.   - when a request passes through a frontend then a backend, all req* rules
  6295.     from the frontend will be evaluated, then all req* rules from the backend
  6296.     will be evaluated. The reverse path is applied to responses.
  6297.  
  6298.   - req* statements are applied after "block" statements, so that "block" is
  6299.     always the first one, but before "use_backend" in order to permit rewriting
  6300.     before switching.
  6301.  
  6302.  
  6303. 7. Using ACLs and pattern extraction
  6304. ------------------------------------
  6305.  
  6306. The use of Access Control Lists (ACL) provides a flexible solution to perform
  6307. content switching and generally to take decisions based on content extracted
  6308. from the request, the response or any environmental status. The principle is
  6309. simple :
  6310.  
  6311.   - define test criteria with sets of values
  6312.   - perform actions only if a set of tests is valid
  6313.  
  6314. The actions generally consist in blocking the request, or selecting a backend.
  6315.  
  6316. In order to define a test, the "acl" keyword is used. The syntax is :
  6317.  
  6318.    acl <aclname> <criterion> [flags] [operator] <value> ...
  6319.  
  6320. This creates a new ACL <aclname> or completes an existing one with new tests.
  6321. Those tests apply to the portion of request/response specified in <criterion>
  6322. and may be adjusted with optional flags [flags]. Some criteria also support
  6323. an operator which may be specified before the set of values. The values are
  6324. of the type supported by the criterion, and are separated by spaces.
  6325.  
  6326. ACL names must be formed from upper and lower case letters, digits, '-' (dash),
  6327. '_' (underscore) , '.' (dot) and ':' (colon). ACL names are case-sensitive,
  6328. which means that "my_acl" and "My_Acl" are two different ACLs.
  6329.  
  6330. There is no enforced limit to the number of ACLs. The unused ones do not affect
  6331. performance, they just consume a small amount of memory.
  6332.  
  6333. The following ACL flags are currently supported :
  6334.  
  6335.    -i : ignore case during matching of all subsequent patterns.
  6336.    -f : load patterns from a file.
  6337.    -- : force end of flags. Useful when a string looks like one of the flags.
  6338.  
  6339. The "-f" flag is special as it loads all of the lines it finds in the file
  6340. specified in argument and loads all of them before continuing. It is even
  6341. possible to pass multiple "-f" arguments if the patterns are to be loaded from
  6342. multiple files. Empty lines as well as lines beginning with a sharp ('#') will
  6343. be ignored. All leading spaces and tabs will be stripped. If it is absolutely
  6344. needed to insert a valid pattern beginning with a sharp, just prefix it with a
  6345. space so that it is not taken for a comment. Depending on the data type and
  6346. match method, haproxy may load the lines into a binary tree, allowing very fast
  6347. lookups. This is true for IPv4 and exact string matching. In this case,
  6348. duplicates will automatically be removed. Also, note that the "-i" flag applies
  6349. to subsequent entries and not to entries loaded from files preceeding it. For
  6350. instance :
  6351.  
  6352.     acl valid-ua hdr(user-agent) -f exact-ua.lst -i -f generic-ua.lst  test
  6353.  
  6354. In this example, each line of "exact-ua.lst" will be exactly matched against
  6355. the "user-agent" header of the request. Then each line of "generic-ua" will be
  6356. case-insensitively matched. Then the word "test" will be insensitively matched
  6357. too.
  6358.  
  6359. Note that right now it is difficult for the ACL parsers to report errors, so if
  6360. a file is unreadable or unparsable, the most you'll get is a parse error in the
  6361. ACL. Thus, file-based ACLs should only be produced by reliable processes.
  6362.  
  6363. Supported types of values are :
  6364.  
  6365.   - integers or integer ranges
  6366.   - strings
  6367.   - regular expressions
  6368.   - IP addresses and networks
  6369.  
  6370.  
  6371. 7.1. Matching integers
  6372. ----------------------
  6373.  
  6374. Matching integers is special in that ranges and operators are permitted. Note
  6375. that integer matching only applies to positive values. A range is a value
  6376. expressed with a lower and an upper bound separated with a colon, both of which
  6377. may be omitted.
  6378.  
  6379. For instance, "1024:65535" is a valid range to represent a range of
  6380. unprivileged ports, and "1024:" would also work. "0:1023" is a valid
  6381. representation of privileged ports, and ":1023" would also work.
  6382.  
  6383. As a special case, some ACL functions support decimal numbers which are in fact
  6384. two integers separated by a dot. This is used with some version checks for
  6385. instance. All integer properties apply to those decimal numbers, including
  6386. ranges and operators.
  6387.  
  6388. For an easier usage, comparison operators are also supported. Note that using
  6389. operators with ranges does not make much sense and is strongly discouraged.
  6390. Similarly, it does not make much sense to perform order comparisons with a set
  6391. of values.
  6392.  
  6393. Available operators for integer matching are :
  6394.  
  6395.   eq : true if the tested value equals at least one value
  6396.   ge : true if the tested value is greater than or equal to at least one value
  6397.   gt : true if the tested value is greater than at least one value
  6398.   le : true if the tested value is less than or equal to at least one value
  6399.   lt : true if the tested value is less than at least one value
  6400.  
  6401. For instance, the following ACL matches any negative Content-Length header :
  6402.  
  6403.   acl negative-length hdr_val(content-length) lt 0
  6404.  
  6405. This one matches SSL versions between 3.0 and 3.1 (inclusive) :
  6406.  
  6407.   acl sslv3 req_ssl_ver 3:3.1
  6408.  
  6409.  
  6410. 7.2. Matching strings
  6411. ---------------------
  6412.  
  6413. String matching applies to verbatim strings as they are passed, with the
  6414. exception of the backslash ("\") which makes it possible to escape some
  6415. characters such as the space. If the "-i" flag is passed before the first
  6416. string, then the matching will be performed ignoring the case. In order
  6417. to match the string "-i", either set it second, or pass the "--" flag
  6418. before the first string. Same applies of course to match the string "--".
  6419.  
  6420.  
  6421. 7.3. Matching regular expressions (regexes)
  6422. -------------------------------------------
  6423.  
  6424. Just like with string matching, regex matching applies to verbatim strings as
  6425. they are passed, with the exception of the backslash ("\") which makes it
  6426. possible to escape some characters such as the space. If the "-i" flag is
  6427. passed before the first regex, then the matching will be performed ignoring
  6428. the case. In order to match the string "-i", either set it second, or pass
  6429. the "--" flag before the first string. Same principle applies of course to
  6430. match the string "--".
  6431.  
  6432.  
  6433. 7.4. Matching IPv4 addresses
  6434. ----------------------------
  6435.  
  6436. IPv4 addresses values can be specified either as plain addresses or with a
  6437. netmask appended, in which case the IPv4 address matches whenever it is
  6438. within the network. Plain addresses may also be replaced with a resolvable
  6439. host name, but this practice is generally discouraged as it makes it more
  6440. difficult to read and debug configurations. If hostnames are used, you should
  6441. at least ensure that they are present in /etc/hosts so that the configuration
  6442. does not depend on any random DNS match at the moment the configuration is
  6443. parsed.
  6444.  
  6445.  
  6446. 7.5. Available matching criteria
  6447. --------------------------------
  6448.  
  6449. 7.5.1. Matching at Layer 4 and below
  6450. ------------------------------------
  6451.  
  6452. A first set of criteria applies to information which does not require any
  6453. analysis of the request or response contents. Those generally include TCP/IP
  6454. addresses and ports, as well as internal values independant on the stream.
  6455.  
  6456. always_false
  6457.   This one never matches. All values and flags are ignored. It may be used as
  6458.   a temporary replacement for another one when adjusting configurations.
  6459.  
  6460. always_true
  6461.   This one always matches. All values and flags are ignored. It may be used as
  6462.   a temporary replacement for another one when adjusting configurations.
  6463.  
  6464. avg_queue <integer>
  6465. avg_queue(backend) <integer>
  6466.   Returns the total number of queued connections of the designated backend
  6467.   divided by the number of active servers. This is very similar to "queue"
  6468.   except that the size of the farm is considered, in order to give a more
  6469.   accurate measurement of the time it may take for a new connection to be
  6470.   processed. The main usage is to return a sorry page to new users when it
  6471.   becomes certain they will get a degraded service. Note that in the event
  6472.   there would not be any active server anymore, we would consider twice the
  6473.   number of queued connections as the measured value. This is a fair estimate,
  6474.   as we expect one server to get back soon anyway, but we still prefer to send
  6475.   new traffic to another backend if in better shape. See also the "queue",
  6476.   "be_conn", and "be_sess_rate" criteria.
  6477.  
  6478. be_conn <integer>
  6479. be_conn(backend) <integer>
  6480.   Applies to the number of currently established connections on the backend,
  6481.   possibly including the connection being evaluated. If no backend name is
  6482.   specified, the current one is used. But it is also possible to check another
  6483.   backend. It can be used to use a specific farm when the nominal one is full.
  6484.   See also the "fe_conn", "queue" and "be_sess_rate" criteria.
  6485.  
  6486. be_id <integer>
  6487.   Applies to the backend's id. Can be used in frontends to check from which
  6488.   backend it was called.
  6489.  
  6490. be_sess_rate <integer>
  6491. be_sess_rate(backend) <integer>
  6492.   Returns true when the sessions creation rate on the backend matches the
  6493.   specified values or ranges, in number of new sessions per second. This is
  6494.   used to switch to an alternate backend when an expensive or fragile one
  6495.   reaches too high a session rate, or to limit abuse of service (eg. prevent
  6496.   sucking of an online dictionary).
  6497.  
  6498.   Example :
  6499.         # Redirect to an error page if the dictionary is requested too often
  6500.         backend dynamic
  6501.             mode http
  6502.             acl being_scanned be_sess_rate gt 100
  6503.             redirect location /denied.html if being_scanned
  6504.  
  6505. connslots <integer>
  6506. connslots(backend) <integer>
  6507.   The basic idea here is to be able to measure the number of connection "slots"
  6508.   still available (connection + queue), so that anything beyond that (intended
  6509.   usage; see "use_backend" keyword) can be redirected to a different backend.
  6510.  
  6511.   'connslots' = number of available server connection slots, + number of
  6512.   available server queue slots.
  6513.  
  6514.   Note that while "fe_conn" may be used, "connslots" comes in especially
  6515.   useful when you have a case of traffic going to one single ip, splitting into
  6516.   multiple backends (perhaps using acls to do name-based load balancing) and
  6517.   you want to be able to differentiate between different backends, and their
  6518.   available "connslots".  Also, whereas "nbsrv" only measures servers that are
  6519.   actually *down*, this acl is more fine-grained and looks into the number of
  6520.   available connection slots as well. See also "queue" and "avg_queue".
  6521.  
  6522.   OTHER CAVEATS AND NOTES: at this point in time, the code does not take care
  6523.   of dynamic connections. Also, if any of the server maxconn, or maxqueue is 0,
  6524.   then this acl clearly does not make sense, in which case the value returned
  6525.   will be -1.
  6526.  
  6527. dst <ip_address>
  6528.   Applies to the local IPv4 address the client connected to. It can be used to
  6529.   switch to a different backend for some alternative addresses.
  6530.  
  6531. dst_conn <integer>
  6532.   Applies to the number of currently established connections on the same socket
  6533.   including the one being evaluated. It can be used to either return a sorry
  6534.   page before hard-blocking, or to use a specific backend to drain new requests
  6535.   when the socket is considered saturated. This offers the ability to assign
  6536.   different limits to different listening ports or addresses. See also the
  6537.   "fe_conn" and "be_conn" criteria.
  6538.  
  6539. dst_port <integer>
  6540.   Applies to the local port the client connected to. It can be used to switch
  6541.   to a different backend for some alternative ports.
  6542.  
  6543. fe_conn <integer>
  6544. fe_conn(frontend) <integer>
  6545.   Applies to the number of currently established connections on the frontend,
  6546.   possibly including the connection being evaluated. If no frontend name is
  6547.   specified, the current one is used. But it is also possible to check another
  6548.   frontend. It can be used to either return a sorry page before hard-blocking,
  6549.   or to use a specific backend to drain new requests when the farm is
  6550.   considered saturated. See also the "dst_conn", "be_conn" and "fe_sess_rate"
  6551.   criteria.
  6552.  
  6553. fe_id <integer>
  6554.   Applies to the frontend's id. Can be used in backends to check from which
  6555.   frontend it was called.
  6556.  
  6557. fe_sess_rate <integer>
  6558. fe_sess_rate(frontend) <integer>
  6559.   Returns true when the session creation rate on the current or the named
  6560.   frontend matches the specified values or ranges, expressed in new sessions
  6561.   per second. This is used to limit the connection rate to acceptable ranges in
  6562.   order to prevent abuse of service at the earliest moment. This can be
  6563.   combined with layer 4 ACLs in order to force the clients to wait a bit for
  6564.   the rate to go down below the limit.
  6565.  
  6566.   Example :
  6567.         # This frontend limits incoming mails to 10/s with a max of 100
  6568.         # concurrent connections. We accept any connection below 10/s, and
  6569.         # force excess clients to wait for 100 ms. Since clients are limited to
  6570.         # 100 max, there cannot be more than 10 incoming mails per second.
  6571.         frontend mail
  6572.             bind :25
  6573.             mode tcp
  6574.             maxconn 100
  6575.             acl too_fast fe_sess_rate ge 10
  6576.             tcp-request inspect-delay 100ms
  6577.             tcp-request content accept if ! too_fast
  6578.             tcp-request content accept if WAIT_END
  6579.  
  6580. nbsrv <integer>
  6581. nbsrv(backend) <integer>
  6582.   Returns true when the number of usable servers of either the current backend
  6583.   or the named backend matches the values or ranges specified. This is used to
  6584.   switch to an alternate backend when the number of servers is too low to
  6585.   to handle some load. It is useful to report a failure when combined with
  6586.   "monitor fail".
  6587.  
  6588. queue <integer>
  6589. queue(backend) <integer>
  6590.   Returns the total number of queued connections of the designated backend,
  6591.   including all the connections in server queues. If no backend name is
  6592.   specified, the current one is used, but it is also possible to check another
  6593.   one. This can be used to take actions when queuing goes above a known level,
  6594.   generally indicating a surge of traffic or a massive slowdown on the servers.
  6595.   One possible action could be to reject new users but still accept old ones.
  6596.   See also the "avg_queue", "be_conn", and "be_sess_rate" criteria.
  6597.  
  6598. so_id <integer>
  6599.   Applies to the socket's id. Useful in frontends with many bind keywords.
  6600.  
  6601. src <ip_address>
  6602.   Applies to the client's IPv4 address. It is usually used to limit access to
  6603.   certain resources such as statistics. Note that it is the TCP-level source
  6604.   address which is used, and not the address of a client behind a proxy.
  6605.  
  6606. src_port <integer>
  6607.   Applies to the client's TCP source port. This has a very limited usage.
  6608.  
  6609. srv_id <integer>
  6610.   Applies to the server's id. Can be used in frontends or backends.
  6611.  
  6612. srv_is_up(<server>)
  6613. srv_is_up(<backend>/<server>)
  6614.   Returns true when the designated server is UP, and false when it is either
  6615.   DOWN or in maintenance mode. If <backend> is omitted, then the server is
  6616.   looked up in the current backend. The function takes no arguments since it
  6617.   is used as a boolean. It is mainly used to take action based on an external
  6618.   status reported via a health check (eg: a geographical site's availability).
  6619.   Another possible use which is more of a hack consists in using dummy servers
  6620.   as boolean variables that can be enabled or disabled from the CLI, so that
  6621.   rules depending on those ACLs can be tweaked in realtime.
  6622.  
  6623.  
  6624. 7.5.2. Matching contents at Layer 4
  6625. -----------------------------------
  6626.  
  6627. A second set of criteria depends on data found in buffers, but which can change
  6628. during analysis. This requires that some data has been buffered, for instance
  6629. through TCP request content inspection. Please see the "tcp-request" keyword
  6630. for more detailed information on the subject.
  6631.  
  6632. req_len <integer>
  6633.   Returns true when the length of the data in the request buffer matches the
  6634.   specified range. It is important to understand that this test does not
  6635.   return false as long as the buffer is changing. This means that a check with
  6636.   equality to zero will almost always immediately match at the beginning of the
  6637.   session, while a test for more data will wait for that data to come in and
  6638.   return false only when haproxy is certain that no more data will come in.
  6639.   This test was designed to be used with TCP request content inspection.
  6640.  
  6641. req_proto_http
  6642.   Returns true when data in the request buffer look like HTTP and correctly
  6643.   parses as such. It is the same parser as the common HTTP request parser which
  6644.   is used so there should be no surprises. This test can be used for instance
  6645.   to direct HTTP traffic to a given port and HTTPS traffic to another one
  6646.   using TCP request content inspection rules.
  6647.  
  6648. req_rdp_cookie       <string>
  6649. req_rdp_cookie(name) <string>
  6650.   Returns true when data in the request buffer look like the RDP protocol, and
  6651.   a cookie is present and equal to <string>. By default, any cookie name is
  6652.   checked, but a specific cookie name can be specified in parenthesis. The
  6653.   parser only checks for the first cookie, as illustrated in the RDP protocol
  6654.   specification. The cookie name is case insensitive. This ACL can be useful
  6655.   with the "MSTS" cookie, as it can contain the user name of the client
  6656.   connecting to the server if properly configured on the client. This can be
  6657.   used to restrict access to certain servers to certain users.
  6658.  
  6659. req_rdp_cookie_cnt       <integer>
  6660. req_rdp_cookie_cnt(name) <integer>
  6661.   Returns true when the data in the request buffer look like the RDP protocol
  6662.   and the number of RDP cookies matches the specified range (typically zero or
  6663.   one). Optionally a specific cookie name can be checked. This is a simple way
  6664.   of detecting the RDP protocol, as clients generally send the MSTS or MSTSHASH
  6665.   cookies.
  6666.  
  6667. req_ssl_ver <decimal>
  6668.   Returns true when data in the request buffer look like SSL, with a protocol
  6669.   version matching the specified range. Both SSLv2 hello messages and SSLv3
  6670.   messages are supported. The test tries to be strict enough to avoid being
  6671.   easily fooled. In particular, it waits for as many bytes as announced in the
  6672.   message header if this header looks valid (bound to the buffer size). Note
  6673.   that TLSv1 is announced as SSL version 3.1. This test was designed to be used
  6674.   with TCP request content inspection.
  6675.  
  6676. wait_end
  6677.   Waits for the end of the analysis period to return true. This may be used in
  6678.   conjunction with content analysis to avoid returning a wrong verdict early.
  6679.   It may also be used to delay some actions, such as a delayed reject for some
  6680.   special addresses. Since it either stops the rules evaluation or immediately
  6681.   returns true, it is recommended to use this acl as the last one in a rule.
  6682.   Please note that the default ACL "WAIT_END" is always usable without prior
  6683.   declaration. This test was designed to be used with TCP request content
  6684.   inspection.
  6685.  
  6686.   Examples :
  6687.      # delay every incoming request by 2 seconds
  6688.      tcp-request inspect-delay 2s
  6689.      tcp-request content accept if WAIT_END
  6690.  
  6691.      # don't immediately tell bad guys they are rejected
  6692.      tcp-request inspect-delay 10s
  6693.      acl goodguys src 10.0.0.0/24
  6694.      acl badguys  src 10.0.1.0/24
  6695.      tcp-request content accept if goodguys
  6696.      tcp-request content reject if badguys WAIT_END
  6697.      tcp-request content reject
  6698.  
  6699.  
  6700. 7.5.3. Matching at Layer 7
  6701. --------------------------
  6702.  
  6703. A third set of criteria applies to information which can be found at the
  6704. application layer (layer 7). Those require that a full HTTP request has been
  6705. read, and are only evaluated then. They may require slightly more CPU resources
  6706. than the layer 4 ones, but not much since the request and response are indexed.
  6707.  
  6708. hdr <string>
  6709. hdr(header) <string>
  6710.   Note: all the "hdr*" matching criteria either apply to all headers, or to a
  6711.   particular header whose name is passed between parenthesis and without any
  6712.   space. The header name is not case-sensitive. The header matching complies
  6713.   with RFC2616, and treats as separate headers all values delimited by commas.
  6714.   Use the shdr() variant for response headers sent by the server.
  6715.  
  6716.   The "hdr" criteria returns true if any of the headers matching the criteria
  6717.   match any of the strings. This can be used to check exact for values. For
  6718.   instance, checking that "connection: close" is set :
  6719.  
  6720.      hdr(Connection) -i close
  6721.  
  6722. hdr_beg <string>
  6723. hdr_beg(header) <string>
  6724.   Returns true when one of the headers begins with one of the strings. See
  6725.   "hdr" for more information on header matching. Use the shdr_beg() variant for
  6726.   response headers sent by the server.
  6727.  
  6728. hdr_cnt <integer>
  6729. hdr_cnt(header) <integer>
  6730.   Returns true when the number of occurrence of the specified header matches
  6731.   the values or ranges specified. It is important to remember that one header
  6732.   line may count as several headers if it has several values. This is used to
  6733.   detect presence, absence or abuse of a specific header, as well as to block
  6734.   request smuggling attacks by rejecting requests which contain more than one
  6735.   of certain headers. See "hdr" for more information on header matching. Use
  6736.   the shdr_cnt() variant for response headers sent by the server.
  6737.  
  6738. hdr_dir <string>
  6739. hdr_dir(header) <string>
  6740.   Returns true when one of the headers contains one of the strings either
  6741.   isolated or delimited by slashes. This is used to perform filename or
  6742.   directory name matching, and may be used with Referer. See "hdr" for more
  6743.   information on header matching. Use the shdr_dir() variant for response
  6744.   headers sent by the server.
  6745.  
  6746. hdr_dom <string>
  6747. hdr_dom(header) <string>
  6748.   Returns true when one of the headers contains one of the strings either
  6749.   isolated or delimited by dots. This is used to perform domain name matching,
  6750.   and may be used with the Host header. See "hdr" for more information on
  6751.   header matching. Use the shdr_dom() variant for response headers sent by the
  6752.   server.
  6753.  
  6754. hdr_end <string>
  6755. hdr_end(header) <string>
  6756.   Returns true when one of the headers ends with one of the strings. See "hdr"
  6757.   for more information on header matching. Use the shdr_end() variant for
  6758.   response headers sent by the server.
  6759.  
  6760. hdr_ip <ip_address>
  6761. hdr_ip(header) <ip_address>
  6762.   Returns true when one of the headers' values contains an IP address matching
  6763.   <ip_address>. This is mainly used with headers such as X-Forwarded-For or
  6764.   X-Client-IP. See "hdr" for more information on header matching. Use the
  6765.   shdr_ip() variant for response headers sent by the server.
  6766.  
  6767. hdr_len <integer>
  6768. hdr_len(<header>) <integer>
  6769.   Returns true when at least one of the headers has a length which matches the
  6770.   values or ranges specified. This may be used to detect empty or too large
  6771.   headers. See "hdr" for more information on header matching. Use the
  6772.   shdr_len() variant for response headers sent by the server.
  6773.  
  6774. hdr_reg <regex>
  6775. hdr_reg(header) <regex>
  6776.   Returns true when one of the headers matches of the regular expressions. It
  6777.   can be used at any time, but it is important to remember that regex matching
  6778.   is slower than other methods. See also other "hdr_" criteria, as well as
  6779.   "hdr" for more information on header matching. Use the shdr_reg() variant for
  6780.   response headers sent by the server.
  6781.  
  6782. hdr_sub <string>
  6783. hdr_sub(header) <string>
  6784.   Returns true when one of the headers contains one of the strings. See "hdr"
  6785.   for more information on header matching. Use the shdr_sub() variant for
  6786.   response headers sent by the server.
  6787.  
  6788. hdr_val <integer>
  6789. hdr_val(header) <integer>
  6790.   Returns true when one of the headers starts with a number which matches the
  6791.   values or ranges specified. This may be used to limit content-length to
  6792.   acceptable values for example. See "hdr" for more information on header
  6793.   matching. Use the shdr_val() variant for response headers sent by the server.
  6794.  
  6795. http_auth(userlist)
  6796. http_auth_group(userlist) <group> [<group>]*
  6797.   Returns true when authentication data received from the client matches
  6798.   username & password stored on the userlist. It is also possible to
  6799.   use http_auth_group to check if the user is assigned to at least one
  6800.   of specified groups.
  6801.  
  6802.   Currently only http basic auth is supported.
  6803.  
  6804. http_first_req
  6805.   Returns true when the request being processed is the first one of the
  6806.   connection. This can be used to add or remove headers that may be missing
  6807.   from some requests when a request is not the first one, or even to perform
  6808.   some specific ACL checks only on the first request.
  6809.  
  6810. method <string>
  6811.   Applies to the method in the HTTP request, eg: "GET". Some predefined ACL
  6812.   already check for most common methods.
  6813.  
  6814. path <string>
  6815.   Returns true when the path part of the request, which starts at the first
  6816.   slash and ends before the question mark, equals one of the strings. It may be
  6817.   used to match known files, such as /favicon.ico.
  6818.  
  6819. path_beg <string>
  6820.   Returns true when the path begins with one of the strings. This can be used
  6821.   to send certain directory names to alternative backends.
  6822.  
  6823. path_dir <string>
  6824.   Returns true when one of the strings is found isolated or delimited with
  6825.   slashes in the path. This is used to perform filename or directory name
  6826.   matching without the risk of wrong match due to colliding prefixes. See also
  6827.   "url_dir" and "path_sub".
  6828.  
  6829. path_dom <string>
  6830.   Returns true when one of the strings is found isolated or delimited with dots
  6831.   in the path. This may be used to perform domain name matching in proxy
  6832.   requests. See also "path_sub" and "url_dom".
  6833.  
  6834. path_end <string>
  6835.   Returns true when the path ends with one of the strings. This may be used to
  6836.   control file name extension.
  6837.  
  6838. path_len <integer>
  6839.   Returns true when the path length matches the values or ranges specified.
  6840.   This may be used to detect abusive requests for instance.
  6841.  
  6842. path_reg <regex>
  6843.   Returns true when the path matches one of the regular expressions. It can be
  6844.   used any time, but it is important to remember that regex matching is slower
  6845.   than other methods. See also "url_reg" and all "path_" criteria.
  6846.  
  6847. path_sub <string>
  6848.   Returns true when the path contains one of the strings. It can be used to
  6849.   detect particular patterns in paths, such as "../" for example. See also
  6850.   "path_dir".
  6851.  
  6852. req_ver <string>
  6853.   Applies to the version string in the HTTP request, eg: "1.0". Some predefined
  6854.   ACL already check for versions 1.0 and 1.1.
  6855.  
  6856. status <integer>
  6857.   Applies to the HTTP status code in the HTTP response, eg: "302". It can be
  6858.   used to act on responses depending on status ranges, for instance, remove
  6859.   any Location header if the response is not a 3xx.
  6860.  
  6861. url <string>
  6862.   Applies to the whole URL passed in the request. The only real use is to match
  6863.   "*", for which there already is a predefined ACL.
  6864.  
  6865. url_beg <string>
  6866.   Returns true when the URL begins with one of the strings. This can be used to
  6867.   check whether a URL begins with a slash or with a protocol scheme.
  6868.  
  6869. url_dir <string>
  6870.   Returns true when one of the strings is found isolated or delimited with
  6871.   slashes in the URL. This is used to perform filename or directory name
  6872.   matching without the risk of wrong match due to colliding prefixes. See also
  6873.   "path_dir" and "url_sub".
  6874.  
  6875. url_dom <string>
  6876.   Returns true when one of the strings is found isolated or delimited with dots
  6877.   in the URL. This is used to perform domain name matching without the risk of
  6878.   wrong match due to colliding prefixes. See also "url_sub".
  6879.  
  6880. url_end <string>
  6881.   Returns true when the URL ends with one of the strings. It has very limited
  6882.   use. "path_end" should be used instead for filename matching.
  6883.  
  6884. url_ip <ip_address>
  6885.   Applies to the IP address specified in the absolute URI in an HTTP request.
  6886.   It can be used to prevent access to certain resources such as local network.
  6887.   It is useful with option "http_proxy".
  6888.  
  6889. url_len <integer>
  6890.   Returns true when the url length matches the values or ranges specified. This
  6891.   may be used to detect abusive requests for instance.
  6892.  
  6893. url_port <integer>
  6894.   Applies to the port specified in the absolute URI in an HTTP request. It can
  6895.   be used to prevent access to certain resources. It is useful with option
  6896.   "http_proxy". Note that if the port is not specified in the request, port 80
  6897.   is assumed.
  6898.  
  6899. url_reg <regex>
  6900.   Returns true when the URL matches one of the regular expressions. It can be
  6901.   used any time, but it is important to remember that regex matching is slower
  6902.   than other methods. See also "path_reg" and all "url_" criteria.
  6903.  
  6904. url_sub <string>
  6905.   Returns true when the URL contains one of the strings. It can be used to
  6906.   detect particular patterns in query strings for example. See also "path_sub".
  6907.  
  6908.  
  6909. 7.6. Pre-defined ACLs
  6910. ---------------------
  6911.  
  6912. Some predefined ACLs are hard-coded so that they do not have to be declared in
  6913. every frontend which needs them. They all have their names in upper case in
  6914. order to avoid confusion. Their equivalence is provided below.
  6915.  
  6916. ACL name          Equivalent to                Usage
  6917. ---------------+-----------------------------+---------------------------------
  6918. FALSE            always_false                  never match
  6919. HTTP             req_proto_http                match if protocol is valid HTTP
  6920. HTTP_1.0         req_ver 1.0                   match HTTP version 1.0
  6921. HTTP_1.1         req_ver 1.1                   match HTTP version 1.1
  6922. HTTP_CONTENT     hdr_val(content-length) gt 0  match an existing content-length
  6923. HTTP_URL_ABS     url_reg ^[^/:]*://            match absolute URL with scheme
  6924. HTTP_URL_SLASH   url_beg /                     match URL beginning with "/"
  6925. HTTP_URL_STAR    url     *                     match URL equal to "*"
  6926. LOCALHOST        src 127.0.0.1/8               match connection from local host
  6927. METH_CONNECT     method  CONNECT               match HTTP CONNECT method
  6928. METH_GET         method  GET HEAD              match HTTP GET or HEAD method
  6929. METH_HEAD        method  HEAD                  match HTTP HEAD method
  6930. METH_OPTIONS     method  OPTIONS               match HTTP OPTIONS method
  6931. METH_POST        method  POST                  match HTTP POST method
  6932. METH_TRACE       method  TRACE                 match HTTP TRACE method
  6933. RDP_COOKIE       req_rdp_cookie_cnt gt 0       match presence of an RDP cookie
  6934. REQ_CONTENT      req_len gt 0                  match data in the request buffer
  6935. TRUE             always_true                   always match
  6936. WAIT_END         wait_end                      wait for end of content analysis
  6937. ---------------+-----------------------------+---------------------------------
  6938.  
  6939.  
  6940. 7.7. Using ACLs to form conditions
  6941. ----------------------------------
  6942.  
  6943. Some actions are only performed upon a valid condition. A condition is a
  6944. combination of ACLs with operators. 3 operators are supported :
  6945.  
  6946.   - AND (implicit)
  6947.   - OR  (explicit with the "or" keyword or the "||" operator)
  6948.   - Negation with the exclamation mark ("!")
  6949.  
  6950. A condition is formed as a disjunctive form:
  6951.  
  6952.    [!]acl1 [!]acl2 ... [!]acln  { or [!]acl1 [!]acl2 ... [!]acln } ...
  6953.  
  6954. Such conditions are generally used after an "if" or "unless" statement,
  6955. indicating when the condition will trigger the action.
  6956.  
  6957. For instance, to block HTTP requests to the "*" URL with methods other than
  6958. "OPTIONS", as well as POST requests without content-length, and GET or HEAD
  6959. requests with a content-length greater than 0, and finally every request which
  6960. is not either GET/HEAD/POST/OPTIONS !
  6961.  
  6962.    acl missing_cl hdr_cnt(Content-length) eq 0
  6963.    block if HTTP_URL_STAR !METH_OPTIONS || METH_POST missing_cl
  6964.    block if METH_GET HTTP_CONTENT
  6965.    block unless METH_GET or METH_POST or METH_OPTIONS
  6966.  
  6967. To select a different backend for requests to static contents on the "www" site
  6968. and to every request on the "img", "video", "download" and "ftp" hosts :
  6969.  
  6970.    acl url_static  path_beg         /static /images /img /css
  6971.    acl url_static  path_end         .gif .png .jpg .css .js
  6972.    acl host_www    hdr_beg(host) -i www
  6973.    acl host_static hdr_beg(host) -i img. video. download. ftp.
  6974.  
  6975.    # now use backend "static" for all static-only hosts, and for static urls
  6976.    # of host "www". Use backend "www" for the rest.
  6977.    use_backend static if host_static or host_www url_static
  6978.    use_backend www    if host_www
  6979.  
  6980. It is also possible to form rules using "anonymous ACLs". Those are unnamed ACL
  6981. expressions that are built on the fly without needing to be declared. They must
  6982. be enclosed between braces, with a space before and after each brace (because
  6983. the braces must be seen as independant words). Example :
  6984.  
  6985.    The following rule :
  6986.  
  6987.        acl missing_cl hdr_cnt(Content-length) eq 0
  6988.        block if METH_POST missing_cl
  6989.  
  6990.    Can also be written that way :
  6991.  
  6992.        block if METH_POST { hdr_cnt(Content-length) eq 0 }
  6993.  
  6994. It is generally not recommended to use this construct because it's a lot easier
  6995. to leave errors in the configuration when written that way. However, for very
  6996. simple rules matching only one source IP address for instance, it can make more
  6997. sense to use them than to declare ACLs with random names. Another example of
  6998. good use is the following :
  6999.  
  7000.    With named ACLs :
  7001.  
  7002.         acl site_dead nbsrv(dynamic) lt 2
  7003.         acl site_dead nbsrv(static)  lt 2
  7004.         monitor fail  if site_dead
  7005.  
  7006.    With anonymous ACLs :
  7007.  
  7008.         monitor fail if { nbsrv(dynamic) lt 2 } || { nbsrv(static) lt 2 }
  7009.  
  7010. See section 4.2 for detailed help on the "block" and "use_backend" keywords.
  7011.  
  7012.  
  7013. 7.8. Pattern extraction
  7014. -----------------------
  7015.  
  7016. The stickiness features relies on pattern extraction in the request and
  7017. response. Sometimes the data needs to be converted first before being stored,
  7018. for instance converted from ASCII to IP or upper case to lower case.
  7019.  
  7020. All these operations of data extraction and conversion are defined as
  7021. "pattern extraction rules". A pattern rule always has the same format. It
  7022. begins with a single pattern fetch word, potentially followed by a list of
  7023. arguments within parenthesis then an optional list of transformations. As
  7024. much as possible, the pattern fetch functions use the same name as their
  7025. equivalent used in ACLs.
  7026.  
  7027. The list of currently supported pattern fetch functions is the following :
  7028.  
  7029.   src          This is the source IPv4 address of the client of the session.
  7030.                It is of type IP and only works with such tables.
  7031.  
  7032.   dst          This is the destination IPv4 address of the session on the
  7033.                client side, which is the address the client connected to.
  7034.                It can be useful when running in transparent mode. It is of
  7035.                type IP and only works with such tables.
  7036.  
  7037.   dst_port     This is the destination TCP port of the session on the client
  7038.                side, which is the port the client connected to. This might be
  7039.                used when running in transparent mode or when assigning dynamic
  7040.                ports to some clients for a whole application session. It is of
  7041.                type integer and only works with such tables.
  7042.  
  7043.   hdr(name)    This extracts the last occurrence of header <name> in an HTTP
  7044.                request and converts it to an IP address. This IP address is
  7045.                then used to match the table. A typical use is with the
  7046.                x-forwarded-for header.
  7047.  
  7048.  
  7049. The currently available list of transformations include :
  7050.  
  7051.   lower        Convert a string pattern to lower case. This can only be placed
  7052.                after a string pattern fetch function or after a conversion
  7053.                function returning a string type. The result is of type string.
  7054.  
  7055.   upper        Convert a string pattern to upper case. This can only be placed
  7056.                after a string pattern fetch function or after a conversion
  7057.                function returning a string type. The result is of type string.
  7058.  
  7059.   ipmask(mask) Apply a mask to an IPv4 address, and use the result for lookups
  7060.                and storage. This can be used to make all hosts within a
  7061.                certain mask to share the same table entries and as such use
  7062.                the same server. The mask can be passed in dotted form (eg:
  7063.                255.255.255.0) or in CIDR form (eg: 24).
  7064.  
  7065.  
  7066. 8. Logging
  7067. ----------
  7068.  
  7069. One of HAProxy's strong points certainly lies is its precise logs. It probably
  7070. provides the finest level of information available for such a product, which is
  7071. very important for troubleshooting complex environments. Standard information
  7072. provided in logs include client ports, TCP/HTTP state timers, precise session
  7073. state at termination and precise termination cause, information about decisions
  7074. to direct traffic to a server, and of course the ability to capture arbitrary
  7075. headers.
  7076.  
  7077. In order to improve administrators reactivity, it offers a great transparency
  7078. about encountered problems, both internal and external, and it is possible to
  7079. send logs to different sources at the same time with different level filters :
  7080.  
  7081.   - global process-level logs (system errors, start/stop, etc..)
  7082.   - per-instance system and internal errors (lack of resource, bugs, ...)
  7083.   - per-instance external troubles (servers up/down, max connections)
  7084.   - per-instance activity (client connections), either at the establishment or
  7085.     at the termination.
  7086.  
  7087. The ability to distribute different levels of logs to different log servers
  7088. allow several production teams to interact and to fix their problems as soon
  7089. as possible. For example, the system team might monitor system-wide errors,
  7090. while the application team might be monitoring the up/down for their servers in
  7091. real time, and the security team might analyze the activity logs with one hour
  7092. delay.
  7093.  
  7094.  
  7095. 8.1. Log levels
  7096. ---------------
  7097.  
  7098. TCP and HTTP connections can be logged with information such as the date, time,
  7099. source IP address, destination address, connection duration, response times,
  7100. HTTP request, HTTP return code, number of bytes transmitted, conditions
  7101. in which the session ended, and even exchanged cookies values. For example
  7102. track a particular user's problems. All messages may be sent to up to two
  7103. syslog servers. Check the "log" keyword in section 4.2 for more information
  7104. about log facilities.
  7105.  
  7106.  
  7107. 8.2. Log formats
  7108. ----------------
  7109.  
  7110. HAProxy supports 4 log formats. Several fields are common between these formats
  7111. and will be detailed in the following sections. A few of them may vary
  7112. slightly with the configuration, due to indicators specific to certain
  7113. options. The supported formats are as follows :
  7114.  
  7115.   - the default format, which is very basic and very rarely used. It only
  7116.     provides very basic information about the incoming connection at the moment
  7117.     it is accepted : source IP:port, destination IP:port, and frontend-name.
  7118.     This mode will eventually disappear so it will not be described to great
  7119.     extents.
  7120.  
  7121.   - the TCP format, which is more advanced. This format is enabled when "option
  7122.     tcplog" is set on the frontend. HAProxy will then usually wait for the
  7123.     connection to terminate before logging. This format provides much richer
  7124.     information, such as timers, connection counts, queue size, etc... This
  7125.     format is recommended for pure TCP proxies.
  7126.  
  7127.   - the HTTP format, which is the most advanced for HTTP proxying. This format
  7128.     is enabled when "option httplog" is set on the frontend. It provides the
  7129.     same information as the TCP format with some HTTP-specific fields such as
  7130.     the request, the status code, and captures of headers and cookies. This
  7131.     format is recommended for HTTP proxies.
  7132.  
  7133.   - the CLF HTTP format, which is equivalent to the HTTP format, but with the
  7134.     fields arranged in the same order as the CLF format. In this mode, all
  7135.     timers, captures, flags, etc... appear one per field after the end of the
  7136.     common fields, in the same order they appear in the standard HTTP format.
  7137.  
  7138. Next sections will go deeper into details for each of these formats. Format
  7139. specification will be performed on a "field" basis. Unless stated otherwise, a
  7140. field is a portion of text delimited by any number of spaces. Since syslog
  7141. servers are susceptible of inserting fields at the beginning of a line, it is
  7142. always assumed that the first field is the one containing the process name and
  7143. identifier.
  7144.  
  7145. Note : Since log lines may be quite long, the log examples in sections below
  7146.        might be broken into multiple lines. The example log lines will be
  7147.        prefixed with 3 closing angle brackets ('>>>') and each time a log is
  7148.        broken into multiple lines, each non-final line will end with a
  7149.        backslash ('\') and the next line will start indented by two characters.
  7150.  
  7151.  
  7152. 8.2.1. Default log format
  7153. -------------------------
  7154.  
  7155. This format is used when no specific option is set. The log is emitted as soon
  7156. as the connection is accepted. One should note that this currently is the only
  7157. format which logs the request's destination IP and ports.
  7158.  
  7159.   Example :
  7160.         listen www
  7161.             mode http
  7162.             log global
  7163.             server srv1 127.0.0.1:8000
  7164.  
  7165.     >>> Feb  6 12:12:09 localhost \
  7166.           haproxy[14385]: Connect from 10.0.1.2:33312 to 10.0.3.31:8012 \
  7167.           (www/HTTP)
  7168.  
  7169.   Field   Format                                Extract from the example above
  7170.       1   process_name '[' pid ']:'                            haproxy[14385]:
  7171.       2   'Connect from'                                          Connect from
  7172.       3   source_ip ':' source_port                             10.0.1.2:33312
  7173.       4   'to'                                                              to
  7174.       5   destination_ip ':' destination_port                   10.0.3.31:8012
  7175.       6   '(' frontend_name '/' mode ')'                            (www/HTTP)
  7176.  
  7177. Detailed fields description :
  7178.   - "source_ip" is the IP address of the client which initiated the connection.
  7179.   - "source_port" is the TCP port of the client which initiated the connection.
  7180.   - "destination_ip" is the IP address the client connected to.
  7181.   - "destination_port" is the TCP port the client connected to.
  7182.   - "frontend_name" is the name of the frontend (or listener) which received
  7183.     and processed the connection.
  7184.   - "mode is the mode the frontend is operating (TCP or HTTP).
  7185.  
  7186. It is advised not to use this deprecated format for newer installations as it
  7187. will eventually disappear.
  7188.  
  7189.  
  7190. 8.2.2. TCP log format
  7191. ---------------------
  7192.  
  7193. The TCP format is used when "option tcplog" is specified in the frontend, and
  7194. is the recommended format for pure TCP proxies. It provides a lot of precious
  7195. information for troubleshooting. Since this format includes timers and byte
  7196. counts, the log is normally emitted at the end of the session. It can be
  7197. emitted earlier if "option logasap" is specified, which makes sense in most
  7198. environments with long sessions such as remote terminals. Sessions which match
  7199. the "monitor" rules are never logged. It is also possible not to emit logs for
  7200. sessions for which no data were exchanged between the client and the server, by
  7201. specifying "option dontlognull" in the frontend. Successful connections will
  7202. not be logged if "option dontlog-normal" is specified in the frontend. A few
  7203. fields may slightly vary depending on some configuration options, those are
  7204. marked with a star ('*') after the field name below.
  7205.  
  7206.   Example :
  7207.         frontend fnt
  7208.             mode tcp
  7209.             option tcplog
  7210.             log global
  7211.             default_backend bck
  7212.  
  7213.         backend bck
  7214.             server srv1 127.0.0.1:8000
  7215.  
  7216.     >>> Feb  6 12:12:56 localhost \
  7217.           haproxy[14387]: 10.0.1.2:33313 [06/Feb/2009:12:12:51.443] fnt \
  7218.           bck/srv1 0/0/5007 212 -- 0/0/0/0/3 0/0
  7219.  
  7220.   Field   Format                                Extract from the example above
  7221.       1   process_name '[' pid ']:'                            haproxy[14387]:
  7222.       2   client_ip ':' client_port                             10.0.1.2:33313
  7223.       3   '[' accept_date ']'                       [06/Feb/2009:12:12:51.443]
  7224.       4   frontend_name                                                    fnt
  7225.       5   backend_name '/' server_name                                bck/srv1
  7226.       6   Tw '/' Tc '/' Tt*                                           0/0/5007
  7227.       7   bytes_read*                                                      212
  7228.       8   termination_state                                                 --
  7229.       9   actconn '/' feconn '/' beconn '/' srv_conn '/' retries*    0/0/0/0/3
  7230.      10   srv_queue '/' backend_queue                                      0/0
  7231.  
  7232. Detailed fields description :
  7233.   - "client_ip" is the IP address of the client which initiated the TCP
  7234.     connection to haproxy.
  7235.  
  7236.   - "client_port" is the TCP port of the client which initiated the connection.
  7237.  
  7238.   - "accept_date" is the exact date when the connection was received by haproxy
  7239.     (which might be very slightly different from the date observed on the
  7240.     network if there was some queuing in the system's backlog). This is usually
  7241.     the same date which may appear in any upstream firewall's log.
  7242.  
  7243.   - "frontend_name" is the name of the frontend (or listener) which received
  7244.     and processed the connection.
  7245.  
  7246.   - "backend_name" is the name of the backend (or listener) which was selected
  7247.     to manage the connection to the server. This will be the same as the
  7248.     frontend if no switching rule has been applied, which is common for TCP
  7249.     applications.
  7250.  
  7251.   - "server_name" is the name of the last server to which the connection was
  7252.     sent, which might differ from the first one if there were connection errors
  7253.     and a redispatch occurred. Note that this server belongs to the backend
  7254.     which processed the request. If the connection was aborted before reaching
  7255.     a server, "<NOSRV>" is indicated instead of a server name.
  7256.  
  7257.   - "Tw" is the total time in milliseconds spent waiting in the various queues.
  7258.     It can be "-1" if the connection was aborted before reaching the queue.
  7259.     See "Timers" below for more details.
  7260.  
  7261.   - "Tc" is the total time in milliseconds spent waiting for the connection to
  7262.     establish to the final server, including retries. It can be "-1" if the
  7263.     connection was aborted before a connection could be established. See
  7264.     "Timers" below for more details.
  7265.  
  7266.   - "Tt" is the total time in milliseconds elapsed between the accept and the
  7267.     last close. It covers all possible processings. There is one exception, if
  7268.     "option logasap" was specified, then the time counting stops at the moment
  7269.     the log is emitted. In this case, a '+' sign is prepended before the value,
  7270.     indicating that the final one will be larger. See "Timers" below for more
  7271.     details.
  7272.  
  7273.   - "bytes_read" is the total number of bytes transmitted from the server to
  7274.     the client when the log is emitted. If "option logasap" is specified, the
  7275.     this value will be prefixed with a '+' sign indicating that the final one
  7276.     may be larger. Please note that this value is a 64-bit counter, so log
  7277.     analysis tools must be able to handle it without overflowing.
  7278.  
  7279.   - "termination_state" is the condition the session was in when the session
  7280.     ended. This indicates the session state, which side caused the end of
  7281.     session to happen, and for what reason (timeout, error, ...). The normal
  7282.     flags should be "--", indicating the session was closed by either end with
  7283.     no data remaining in buffers. See below "Session state at disconnection"
  7284.     for more details.
  7285.  
  7286.   - "actconn" is the total number of concurrent connections on the process when
  7287.     the session was logged. It it useful to detect when some per-process system
  7288.     limits have been reached. For instance, if actconn is close to 512 when
  7289.     multiple connection errors occur, chances are high that the system limits
  7290.     the process to use a maximum of 1024 file descriptors and that all of them
  7291.     are used. See section 3 "Global parameters" to find how to tune the system.
  7292.  
  7293.   - "feconn" is the total number of concurrent connections on the frontend when
  7294.     the session was logged. It is useful to estimate the amount of resource
  7295.     required to sustain high loads, and to detect when the frontend's "maxconn"
  7296.     has been reached. Most often when this value increases by huge jumps, it is
  7297.     because there is congestion on the backend servers, but sometimes it can be
  7298.     caused by a denial of service attack.
  7299.  
  7300.   - "beconn" is the total number of concurrent connections handled by the
  7301.     backend when the session was logged. It includes the total number of
  7302.     concurrent connections active on servers as well as the number of
  7303.     connections pending in queues. It is useful to estimate the amount of
  7304.     additional servers needed to support high loads for a given application.
  7305.     Most often when this value increases by huge jumps, it is because there is
  7306.     congestion on the backend servers, but sometimes it can be caused by a
  7307.     denial of service attack.
  7308.  
  7309.   - "srv_conn" is the total number of concurrent connections still active on
  7310.     the server when the session was logged. It can never exceed the server's
  7311.     configured "maxconn" parameter. If this value is very often close or equal
  7312.     to the server's "maxconn", it means that traffic regulation is involved a
  7313.     lot, meaning that either the server's maxconn value is too low, or that
  7314.     there aren't enough servers to process the load with an optimal response
  7315.     time. When only one of the server's "srv_conn" is high, it usually means
  7316.     that this server has some trouble causing the connections to take longer to
  7317.     be processed than on other servers.
  7318.  
  7319.   - "retries" is the number of connection retries experienced by this session
  7320.     when trying to connect to the server. It must normally be zero, unless a
  7321.     server is being stopped at the same moment the connection was attempted.
  7322.     Frequent retries generally indicate either a network problem between
  7323.     haproxy and the server, or a misconfigured system backlog on the server
  7324.     preventing new connections from being queued. This field may optionally be
  7325.     prefixed with a '+' sign, indicating that the session has experienced a
  7326.     redispatch after the maximal retry count has been reached on the initial
  7327.     server. In this case, the server name appearing in the log is the one the
  7328.     connection was redispatched to, and not the first one, though both may
  7329.     sometimes be the same in case of hashing for instance. So as a general rule
  7330.     of thumb, when a '+' is present in front of the retry count, this count
  7331.     should not be attributed to the logged server.
  7332.  
  7333.   - "srv_queue" is the total number of requests which were processed before
  7334.     this one in the server queue. It is zero when the request has not gone
  7335.     through the server queue. It makes it possible to estimate the approximate
  7336.     server's response time by dividing the time spent in queue by the number of
  7337.     requests in the queue. It is worth noting that if a session experiences a
  7338.     redispatch and passes through two server queues, their positions will be
  7339.     cumulated. A request should not pass through both the server queue and the
  7340.     backend queue unless a redispatch occurs.
  7341.  
  7342.   - "backend_queue" is the total number of requests which were processed before
  7343.     this one in the backend's global queue. It is zero when the request has not
  7344.     gone through the global queue. It makes it possible to estimate the average
  7345.     queue length, which easily translates into a number of missing servers when
  7346.     divided by a server's "maxconn" parameter. It is worth noting that if a
  7347.     session experiences a redispatch, it may pass twice in the backend's queue,
  7348.     and then both positions will be cumulated. A request should not pass
  7349.     through both the server queue and the backend queue unless a redispatch
  7350.     occurs.
  7351.  
  7352.  
  7353. 8.2.3. HTTP log format
  7354. ----------------------
  7355.  
  7356. The HTTP format is the most complete and the best suited for HTTP proxies. It
  7357. is enabled by when "option httplog" is specified in the frontend. It provides
  7358. the same level of information as the TCP format with additional features which
  7359. are specific to the HTTP protocol. Just like the TCP format, the log is usually
  7360. emitted at the end of the session, unless "option logasap" is specified, which
  7361. generally only makes sense for download sites. A session which matches the
  7362. "monitor" rules will never logged. It is also possible not to log sessions for
  7363. which no data were sent by the client by specifying "option dontlognull" in the
  7364. frontend. Successful connections will not be logged if "option dontlog-normal"
  7365. is specified in the frontend.
  7366.  
  7367. Most fields are shared with the TCP log, some being different. A few fields may
  7368. slightly vary depending on some configuration options. Those ones are marked
  7369. with a star ('*') after the field name below.
  7370.  
  7371.   Example :
  7372.         frontend http-in
  7373.             mode http
  7374.             option httplog
  7375.             log global
  7376.             default_backend bck
  7377.  
  7378.         backend static
  7379.             server srv1 127.0.0.1:8000
  7380.  
  7381.     >>> Feb  6 12:14:14 localhost \
  7382.           haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
  7383.           static/srv1 10/0/30/69/109 200 2750 - - ---- 1/1/1/1/0 0/0 {1wt.eu} \
  7384.           {} "GET /index.html HTTP/1.1"
  7385.  
  7386.   Field   Format                                Extract from the example above
  7387.       1   process_name '[' pid ']:'                            haproxy[14389]:
  7388.       2   client_ip ':' client_port                             10.0.1.2:33317
  7389.       3   '[' accept_date ']'                       [06/Feb/2009:12:14:14.655]
  7390.       4   frontend_name                                                http-in
  7391.       5   backend_name '/' server_name                             static/srv1
  7392.       6   Tq '/' Tw '/' Tc '/' Tr '/' Tt*                       10/0/30/69/109
  7393.       7   status_code                                                      200
  7394.       8   bytes_read*                                                     2750
  7395.       9   captured_request_cookie                                            -
  7396.      10   captured_response_cookie                                           -
  7397.      11   termination_state                                               ----
  7398.      12   actconn '/' feconn '/' beconn '/' srv_conn '/' retries*    1/1/1/1/0
  7399.      13   srv_queue '/' backend_queue                                      0/0
  7400.      14   '{' captured_request_headers* '}'                   {haproxy.1wt.eu}
  7401.      15   '{' captured_response_headers* '}'                                {}
  7402.      16   '"' http_request '"'                      "GET /index.html HTTP/1.1"
  7403.  
  7404.  
  7405. Detailed fields description :
  7406.   - "client_ip" is the IP address of the client which initiated the TCP
  7407.     connection to haproxy.
  7408.  
  7409.   - "client_port" is the TCP port of the client which initiated the connection.
  7410.  
  7411.   - "accept_date" is the exact date when the TCP connection was received by
  7412.     haproxy (which might be very slightly different from the date observed on
  7413.     the network if there was some queuing in the system's backlog). This is
  7414.     usually the same date which may appear in any upstream firewall's log. This
  7415.     does not depend on the fact that the client has sent the request or not.
  7416.  
  7417.   - "frontend_name" is the name of the frontend (or listener) which received
  7418.     and processed the connection.
  7419.  
  7420.   - "backend_name" is the name of the backend (or listener) which was selected
  7421.     to manage the connection to the server. This will be the same as the
  7422.     frontend if no switching rule has been applied.
  7423.  
  7424.   - "server_name" is the name of the last server to which the connection was
  7425.     sent, which might differ from the first one if there were connection errors
  7426.     and a redispatch occurred. Note that this server belongs to the backend
  7427.     which processed the request. If the request was aborted before reaching a
  7428.     server, "<NOSRV>" is indicated instead of a server name. If the request was
  7429.     intercepted by the stats subsystem, "<STATS>" is indicated instead.
  7430.  
  7431.   - "Tq" is the total time in milliseconds spent waiting for the client to send
  7432.     a full HTTP request, not counting data. It can be "-1" if the connection
  7433.     was aborted before a complete request could be received. It should always
  7434.     be very small because a request generally fits in one single packet. Large
  7435.     times here generally indicate network trouble between the client and
  7436.     haproxy. See "Timers" below for more details.
  7437.  
  7438.   - "Tw" is the total time in milliseconds spent waiting in the various queues.
  7439.     It can be "-1" if the connection was aborted before reaching the queue.
  7440.     See "Timers" below for more details.
  7441.  
  7442.   - "Tc" is the total time in milliseconds spent waiting for the connection to
  7443.     establish to the final server, including retries. It can be "-1" if the
  7444.     request was aborted before a connection could be established. See "Timers"
  7445.     below for more details.
  7446.  
  7447.   - "Tr" is the total time in milliseconds spent waiting for the server to send
  7448.     a full HTTP response, not counting data. It can be "-1" if the request was
  7449.     aborted before a complete response could be received. It generally matches
  7450.     the server's processing time for the request, though it may be altered by
  7451.     the amount of data sent by the client to the server. Large times here on
  7452.     "GET" requests generally indicate an overloaded server. See "Timers" below
  7453.     for more details.
  7454.  
  7455.   - "Tt" is the total time in milliseconds elapsed between the accept and the
  7456.     last close. It covers all possible processings. There is one exception, if
  7457.     "option logasap" was specified, then the time counting stops at the moment
  7458.     the log is emitted. In this case, a '+' sign is prepended before the value,
  7459.     indicating that the final one will be larger. See "Timers" below for more
  7460.     details.
  7461.  
  7462.   - "status_code" is the HTTP status code returned to the client. This status
  7463.     is generally set by the server, but it might also be set by haproxy when
  7464.     the server cannot be reached or when its response is blocked by haproxy.
  7465.  
  7466.   - "bytes_read" is the total number of bytes transmitted to the client when
  7467.     the log is emitted. This does include HTTP headers. If "option logasap" is
  7468.     specified, the this value will be prefixed with a '+' sign indicating that
  7469.     the final one may be larger. Please note that this value is a 64-bit
  7470.     counter, so log analysis tools must be able to handle it without
  7471.     overflowing.
  7472.  
  7473.   - "captured_request_cookie" is an optional "name=value" entry indicating that
  7474.     the client had this cookie in the request. The cookie name and its maximum
  7475.     length are defined by the "capture cookie" statement in the frontend
  7476.     configuration. The field is a single dash ('-') when the option is not
  7477.     set. Only one cookie may be captured, it is generally used to track session
  7478.     ID exchanges between a client and a server to detect session crossing
  7479.     between clients due to application bugs. For more details, please consult
  7480.     the section "Capturing HTTP headers and cookies" below.
  7481.  
  7482.   - "captured_response_cookie" is an optional "name=value" entry indicating
  7483.     that the server has returned a cookie with its response. The cookie name
  7484.     and its maximum length are defined by the "capture cookie" statement in the
  7485.     frontend configuration. The field is a single dash ('-') when the option is
  7486.     not set. Only one cookie may be captured, it is generally used to track
  7487.     session ID exchanges between a client and a server to detect session
  7488.     crossing between clients due to application bugs. For more details, please
  7489.     consult the section "Capturing HTTP headers and cookies" below.
  7490.  
  7491.   - "termination_state" is the condition the session was in when the session
  7492.     ended. This indicates the session state, which side caused the end of
  7493.     session to happen, for what reason (timeout, error, ...), just like in TCP
  7494.     logs, and information about persistence operations on cookies in the last
  7495.     two characters. The normal flags should begin with "--", indicating the
  7496.     session was closed by either end with no data remaining in buffers. See
  7497.     below "Session state at disconnection" for more details.
  7498.  
  7499.   - "actconn" is the total number of concurrent connections on the process when
  7500.     the session was logged. It it useful to detect when some per-process system
  7501.     limits have been reached. For instance, if actconn is close to 512 or 1024
  7502.     when multiple connection errors occur, chances are high that the system
  7503.     limits the process to use a maximum of 1024 file descriptors and that all
  7504.     of them are used. See section 3 "Global parameters" to find how to tune the
  7505.     system.
  7506.  
  7507.   - "feconn" is the total number of concurrent connections on the frontend when
  7508.     the session was logged. It is useful to estimate the amount of resource
  7509.     required to sustain high loads, and to detect when the frontend's "maxconn"
  7510.     has been reached. Most often when this value increases by huge jumps, it is
  7511.     because there is congestion on the backend servers, but sometimes it can be
  7512.     caused by a denial of service attack.
  7513.  
  7514.   - "beconn" is the total number of concurrent connections handled by the
  7515.     backend when the session was logged. It includes the total number of
  7516.     concurrent connections active on servers as well as the number of
  7517.     connections pending in queues. It is useful to estimate the amount of
  7518.     additional servers needed to support high loads for a given application.
  7519.     Most often when this value increases by huge jumps, it is because there is
  7520.     congestion on the backend servers, but sometimes it can be caused by a
  7521.     denial of service attack.
  7522.  
  7523.   - "srv_conn" is the total number of concurrent connections still active on
  7524.     the server when the session was logged. It can never exceed the server's
  7525.     configured "maxconn" parameter. If this value is very often close or equal
  7526.     to the server's "maxconn", it means that traffic regulation is involved a
  7527.     lot, meaning that either the server's maxconn value is too low, or that
  7528.     there aren't enough servers to process the load with an optimal response
  7529.     time. When only one of the server's "srv_conn" is high, it usually means
  7530.     that this server has some trouble causing the requests to take longer to be
  7531.     processed than on other servers.
  7532.  
  7533.   - "retries" is the number of connection retries experienced by this session
  7534.     when trying to connect to the server. It must normally be zero, unless a
  7535.     server is being stopped at the same moment the connection was attempted.
  7536.     Frequent retries generally indicate either a network problem between
  7537.     haproxy and the server, or a misconfigured system backlog on the server
  7538.     preventing new connections from being queued. This field may optionally be
  7539.     prefixed with a '+' sign, indicating that the session has experienced a
  7540.     redispatch after the maximal retry count has been reached on the initial
  7541.     server. In this case, the server name appearing in the log is the one the
  7542.     connection was redispatched to, and not the first one, though both may
  7543.     sometimes be the same in case of hashing for instance. So as a general rule
  7544.     of thumb, when a '+' is present in front of the retry count, this count
  7545.     should not be attributed to the logged server.
  7546.  
  7547.   - "srv_queue" is the total number of requests which were processed before
  7548.     this one in the server queue. It is zero when the request has not gone
  7549.     through the server queue. It makes it possible to estimate the approximate
  7550.     server's response time by dividing the time spent in queue by the number of
  7551.     requests in the queue. It is worth noting that if a session experiences a
  7552.     redispatch and passes through two server queues, their positions will be
  7553.     cumulated. A request should not pass through both the server queue and the
  7554.     backend queue unless a redispatch occurs.
  7555.  
  7556.   - "backend_queue" is the total number of requests which were processed before
  7557.     this one in the backend's global queue. It is zero when the request has not
  7558.     gone through the global queue. It makes it possible to estimate the average
  7559.     queue length, which easily translates into a number of missing servers when
  7560.     divided by a server's "maxconn" parameter. It is worth noting that if a
  7561.     session experiences a redispatch, it may pass twice in the backend's queue,
  7562.     and then both positions will be cumulated. A request should not pass
  7563.     through both the server queue and the backend queue unless a redispatch
  7564.     occurs.
  7565.  
  7566.   - "captured_request_headers" is a list of headers captured in the request due
  7567.     to the presence of the "capture request header" statement in the frontend.
  7568.     Multiple headers can be captured, they will be delimited by a vertical bar
  7569.     ('|'). When no capture is enabled, the braces do not appear, causing a
  7570.     shift of remaining fields. It is important to note that this field may
  7571.     contain spaces, and that using it requires a smarter log parser than when
  7572.     it's not used. Please consult the section "Capturing HTTP headers and
  7573.     cookies" below for more details.
  7574.  
  7575.   - "captured_response_headers" is a list of headers captured in the response
  7576.     due to the presence of the "capture response header" statement in the
  7577.     frontend. Multiple headers can be captured, they will be delimited by a
  7578.     vertical bar ('|'). When no capture is enabled, the braces do not appear,
  7579.     causing a shift of remaining fields. It is important to note that this
  7580.     field may contain spaces, and that using it requires a smarter log parser
  7581.     than when it's not used. Please consult the section "Capturing HTTP headers
  7582.     and cookies" below for more details.
  7583.  
  7584.   - "http_request" is the complete HTTP request line, including the method,
  7585.     request and HTTP version string. Non-printable characters are encoded (see
  7586.     below the section "Non-printable characters"). This is always the last
  7587.     field, and it is always delimited by quotes and is the only one which can
  7588.     contain quotes. If new fields are added to the log format, they will be
  7589.     added before this field. This field might be truncated if the request is
  7590.     huge and does not fit in the standard syslog buffer (1024 characters). This
  7591.     is the reason why this field must always remain the last one.
  7592.  
  7593.  
  7594. 8.3. Advanced logging options
  7595. -----------------------------
  7596.  
  7597. Some advanced logging options are often looked for but are not easy to find out
  7598. just by looking at the various options. Here is an entry point for the few
  7599. options which can enable better logging. Please refer to the keywords reference
  7600. for more information about their usage.
  7601.  
  7602.  
  7603. 8.3.1. Disabling logging of external tests
  7604. ------------------------------------------
  7605.  
  7606. It is quite common to have some monitoring tools perform health checks on
  7607. haproxy. Sometimes it will be a layer 3 load-balancer such as LVS or any
  7608. commercial load-balancer, and sometimes it will simply be a more complete
  7609. monitoring system such as Nagios. When the tests are very frequent, users often
  7610. ask how to disable logging for those checks. There are three possibilities :
  7611.  
  7612.   - if connections come from everywhere and are just TCP probes, it is often
  7613.     desired to simply disable logging of connections without data exchange, by
  7614.     setting "option dontlognull" in the frontend. It also disables logging of
  7615.     port scans, which may or may not be desired.
  7616.  
  7617.   - if the connection come from a known source network, use "monitor-net" to
  7618.     declare this network as monitoring only. Any host in this network will then
  7619.     only be able to perform health checks, and their requests will not be
  7620.     logged. This is generally appropriate to designate a list of equipments
  7621.     such as other load-balancers.
  7622.  
  7623.   - if the tests are performed on a known URI, use "monitor-uri" to declare
  7624.     this URI as dedicated to monitoring. Any host sending this request will
  7625.     only get the result of a health-check, and the request will not be logged.
  7626.  
  7627.  
  7628. 8.3.2. Logging before waiting for the session to terminate
  7629. ----------------------------------------------------------
  7630.  
  7631. The problem with logging at end of connection is that you have no clue about
  7632. what is happening during very long sessions, such as remote terminal sessions
  7633. or large file downloads. This problem can be worked around by specifying
  7634. "option logasap" in the frontend. Haproxy will then log as soon as possible,
  7635. just before data transfer begins. This means that in case of TCP, it will still
  7636. log the connection status to the server, and in case of HTTP, it will log just
  7637. after processing the server headers. In this case, the number of bytes reported
  7638. is the number of header bytes sent to the client. In order to avoid confusion
  7639. with normal logs, the total time field and the number of bytes are prefixed
  7640. with a '+' sign which means that real numbers are certainly larger.
  7641.  
  7642.  
  7643. 8.3.3. Raising log level upon errors
  7644. ------------------------------------
  7645.  
  7646. Sometimes it is more convenient to separate normal traffic from errors logs,
  7647. for instance in order to ease error monitoring from log files. When the option
  7648. "log-separate-errors" is used, connections which experience errors, timeouts,
  7649. retries, redispatches or HTTP status codes 5xx will see their syslog level
  7650. raised from "info" to "err". This will help a syslog daemon store the log in
  7651. a separate file. It is very important to keep the errors in the normal traffic
  7652. file too, so that log ordering is not altered. You should also be careful if
  7653. you already have configured your syslog daemon to store all logs higher than
  7654. "notice" in an "admin" file, because the "err" level is higher than "notice".
  7655.  
  7656.  
  7657. 8.3.4. Disabling logging of successful connections
  7658. --------------------------------------------------
  7659.  
  7660. Although this may sound strange at first, some large sites have to deal with
  7661. multiple thousands of logs per second and are experiencing difficulties keeping
  7662. them intact for a long time or detecting errors within them. If the option
  7663. "dontlog-normal" is set on the frontend, all normal connections will not be
  7664. logged. In this regard, a normal connection is defined as one without any
  7665. error, timeout, retry nor redispatch. In HTTP, the status code is checked too,
  7666. and a response with a status 5xx is not considered normal and will be logged
  7667. too. Of course, doing is is really discouraged as it will remove most of the
  7668. useful information from the logs. Do this only if you have no other
  7669. alternative.
  7670.  
  7671.  
  7672. 8.4. Timing events
  7673. ------------------
  7674.  
  7675. Timers provide a great help in troubleshooting network problems. All values are
  7676. reported in milliseconds (ms). These timers should be used in conjunction with
  7677. the session termination flags. In TCP mode with "option tcplog" set on the
  7678. frontend, 3 control points are reported under the form "Tw/Tc/Tt", and in HTTP
  7679. mode, 5 control points are reported under the form "Tq/Tw/Tc/Tr/Tt" :
  7680.  
  7681.   - Tq: total time to get the client request (HTTP mode only). It's the time
  7682.     elapsed between the moment the client connection was accepted and the
  7683.     moment the proxy received the last HTTP header. The value "-1" indicates
  7684.     that the end of headers (empty line) has never been seen. This happens when
  7685.     the client closes prematurely or times out.
  7686.  
  7687.   - Tw: total time spent in the queues waiting for a connection slot. It
  7688.     accounts for backend queue as well as the server queues, and depends on the
  7689.     queue size, and the time needed for the server to complete previous
  7690.     requests. The value "-1" means that the request was killed before reaching
  7691.     the queue, which is generally what happens with invalid or denied requests.
  7692.  
  7693.   - Tc: total time to establish the TCP connection to the server. It's the time
  7694.     elapsed between the moment the proxy sent the connection request, and the
  7695.     moment it was acknowledged by the server, or between the TCP SYN packet and
  7696.     the matching SYN/ACK packet in return. The value "-1" means that the
  7697.     connection never established.
  7698.  
  7699.   - Tr: server response time (HTTP mode only). It's the time elapsed between
  7700.     the moment the TCP connection was established to the server and the moment
  7701.     the server sent its complete response headers. It purely shows its request
  7702.     processing time, without the network overhead due to the data transmission.
  7703.     It is worth noting that when the client has data to send to the server, for
  7704.     instance during a POST request, the time already runs, and this can distort
  7705.     apparent response time. For this reason, it's generally wise not to trust
  7706.     too much this field for POST requests initiated from clients behind an
  7707.     untrusted network. A value of "-1" here means that the last the response
  7708.     header (empty line) was never seen, most likely because the server timeout
  7709.     stroke before the server managed to process the request.
  7710.  
  7711.   - Tt: total session duration time, between the moment the proxy accepted it
  7712.     and the moment both ends were closed. The exception is when the "logasap"
  7713.     option is specified. In this case, it only equals (Tq+Tw+Tc+Tr), and is
  7714.     prefixed with a '+' sign. From this field, we can deduce "Td", the data
  7715.     transmission time, by substracting other timers when valid :
  7716.  
  7717.         Td = Tt - (Tq + Tw + Tc + Tr)
  7718.  
  7719.     Timers with "-1" values have to be excluded from this equation. In TCP
  7720.     mode, "Tq" and "Tr" have to be excluded too. Note that "Tt" can never be
  7721.     negative.
  7722.  
  7723. These timers provide precious indications on trouble causes. Since the TCP
  7724. protocol defines retransmit delays of 3, 6, 12... seconds, we know for sure
  7725. that timers close to multiples of 3s are nearly always related to lost packets
  7726. due to network problems (wires, negotiation, congestion). Moreover, if "Tt" is
  7727. close to a timeout value specified in the configuration, it often means that a
  7728. session has been aborted on timeout.
  7729.  
  7730. Most common cases :
  7731.  
  7732.   - If "Tq" is close to 3000, a packet has probably been lost between the
  7733.     client and the proxy. This is very rare on local networks but might happen
  7734.     when clients are on far remote networks and send large requests. It may
  7735.     happen that values larger than usual appear here without any network cause.
  7736.     Sometimes, during an attack or just after a resource starvation has ended,
  7737.     haproxy may accept thousands of connections in a few milliseconds. The time
  7738.     spent accepting these connections will inevitably slightly delay processing
  7739.     of other connections, and it can happen that request times in the order of
  7740.     a few tens of milliseconds are measured after a few thousands of new
  7741.     connections have been accepted at once. Setting "option http-server-close"
  7742.     may display larger request times since "Tq" also measures the time spent
  7743.     waiting for additional requests.
  7744.  
  7745.   - If "Tc" is close to 3000, a packet has probably been lost between the
  7746.     server and the proxy during the server connection phase. This value should
  7747.     always be very low, such as 1 ms on local networks and less than a few tens
  7748.     of ms on remote networks.
  7749.  
  7750.   - If "Tr" is nearly always lower than 3000 except some rare values which seem
  7751.     to be the average majored by 3000, there are probably some packets lost
  7752.     between the proxy and the server.
  7753.  
  7754.   - If "Tt" is large even for small byte counts, it generally is because
  7755.     neither the client nor the server decides to close the connection, for
  7756.     instance because both have agreed on a keep-alive connection mode. In order
  7757.     to solve this issue, it will be needed to specify "option httpclose" on
  7758.     either the frontend or the backend. If the problem persists, it means that
  7759.     the server ignores the "close" connection mode and expects the client to
  7760.     close. Then it will be required to use "option forceclose". Having the
  7761.     smallest possible 'Tt' is important when connection regulation is used with
  7762.     the "maxconn" option on the servers, since no new connection will be sent
  7763.     to the server until another one is released.
  7764.  
  7765. Other noticeable HTTP log cases ('xx' means any value to be ignored) :
  7766.  
  7767.   Tq/Tw/Tc/Tr/+Tt  The "option logasap" is present on the frontend and the log
  7768.                    was emitted before the data phase. All the timers are valid
  7769.                    except "Tt" which is shorter than reality.
  7770.  
  7771.   -1/xx/xx/xx/Tt   The client was not able to send a complete request in time
  7772.                    or it aborted too early. Check the session termination flags
  7773.                    then "timeout http-request" and "timeout client" settings.
  7774.  
  7775.   Tq/-1/xx/xx/Tt   It was not possible to process the request, maybe because
  7776.                    servers were out of order, because the request was invalid
  7777.                    or forbidden by ACL rules. Check the session termination
  7778.                    flags.
  7779.  
  7780.   Tq/Tw/-1/xx/Tt   The connection could not establish on the server. Either it
  7781.                    actively refused it or it timed out after Tt-(Tq+Tw) ms.
  7782.                    Check the session termination flags, then check the
  7783.                    "timeout connect" setting. Note that the tarpit action might
  7784.                    return similar-looking patterns, with "Tw" equal to the time
  7785.                    the client connection was maintained open.
  7786.  
  7787.   Tq/Tw/Tc/-1/Tt   The server has accepted the connection but did not return
  7788.                    a complete response in time, or it closed its connexion
  7789.                    unexpectedly after Tt-(Tq+Tw+Tc) ms. Check the session
  7790.                    termination flags, then check the "timeout server" setting.
  7791.  
  7792.  
  7793. 8.5. Session state at disconnection
  7794. -----------------------------------
  7795.  
  7796. TCP and HTTP logs provide a session termination indicator in the
  7797. "termination_state" field, just before the number of active connections. It is
  7798. 2-characters long in TCP mode, and is extended to 4 characters in HTTP mode,
  7799. each of which has a special meaning :
  7800.  
  7801.   - On the first character, a code reporting the first event which caused the
  7802.     session to terminate :
  7803.  
  7804.         C : the TCP session was unexpectedly aborted by the client.
  7805.  
  7806.         S : the TCP session was unexpectedly aborted by the server, or the
  7807.             server explicitly refused it.
  7808.  
  7809.         P : the session was prematurely aborted by the proxy, because of a
  7810.             connection limit enforcement, because a DENY filter was matched,
  7811.             because of a security check which detected and blocked a dangerous
  7812.             error in server response which might have caused information leak
  7813.             (eg: cacheable cookie), or because the response was processed by
  7814.             the proxy (redirect, stats, etc...).
  7815.  
  7816.         R : a resource on the proxy has been exhausted (memory, sockets, source
  7817.             ports, ...). Usually, this appears during the connection phase, and
  7818.             system logs should contain a copy of the precise error. If this
  7819.             happens, it must be considered as a very serious anomaly which
  7820.             should be fixed as soon as possible by any means.
  7821.  
  7822.         I : an internal error was identified by the proxy during a self-check.
  7823.             This should NEVER happen, and you are encouraged to report any log
  7824.             containing this, because this would almost certainly be a bug. It
  7825.             would be wise to preventively restart the process after such an
  7826.             event too, in case it would be caused by memory corruption.
  7827.  
  7828.         c : the client-side timeout expired while waiting for the client to
  7829.             send or receive data.
  7830.  
  7831.         s : the server-side timeout expired while waiting for the server to
  7832.             send or receive data.
  7833.  
  7834.         - : normal session completion, both the client and the server closed
  7835.             with nothing left in the buffers.
  7836.  
  7837.   - on the second character, the TCP or HTTP session state when it was closed :
  7838.  
  7839.         R : the proxy was waiting for a complete, valid REQUEST from the client
  7840.             (HTTP mode only). Nothing was sent to any server.
  7841.  
  7842.         Q : the proxy was waiting in the QUEUE for a connection slot. This can
  7843.             only happen when servers have a 'maxconn' parameter set. It can
  7844.             also happen in the global queue after a redispatch consecutive to
  7845.             a failed attempt to connect to a dying server. If no redispatch is
  7846.             reported, then no connection attempt was made to any server.
  7847.  
  7848.         C : the proxy was waiting for the CONNECTION to establish on the
  7849.             server. The server might at most have noticed a connection attempt.
  7850.  
  7851.         H : the proxy was waiting for complete, valid response HEADERS from the
  7852.             server (HTTP only).
  7853.  
  7854.         D : the session was in the DATA phase.
  7855.  
  7856.         L : the proxy was still transmitting LAST data to the client while the
  7857.             server had already finished. This one is very rare as it can only
  7858.             happen when the client dies while receiving the last packets.
  7859.  
  7860.         T : the request was tarpitted. It has been held open with the client
  7861.             during the whole "timeout tarpit" duration or until the client
  7862.             closed, both of which will be reported in the "Tw" timer.
  7863.  
  7864.         - : normal session completion after end of data transfer.
  7865.  
  7866.   - the third character tells whether the persistence cookie was provided by
  7867.     the client (only in HTTP mode) :
  7868.  
  7869.         N : the client provided NO cookie. This is usually the case for new
  7870.             visitors, so counting the number of occurrences of this flag in the
  7871.             logs generally indicate a valid trend for the site frequentation.
  7872.  
  7873.         I : the client provided an INVALID cookie matching no known server.
  7874.             This might be caused by a recent configuration change, mixed
  7875.             cookies between HTTP/HTTPS sites, persistence conditionally
  7876.             ignored, or an attack.
  7877.  
  7878.         D : the client provided a cookie designating a server which was DOWN,
  7879.             so either "option persist" was used and the client was sent to
  7880.             this server, or it was not set and the client was redispatched to
  7881.             another server.
  7882.  
  7883.         V : the client provided a VALID cookie, and was sent to the associated
  7884.             server.
  7885.  
  7886.         E : the client provided a valid cookie, but with a last date which was
  7887.             older than what is allowed by the "maxidle" cookie parameter, so
  7888.             the cookie is consider EXPIRED and is ignored. The request will be
  7889.             redispatched just as if there was no cookie.
  7890.  
  7891.         O : the client provided a valid cookie, but with a first date which was
  7892.             older than what is allowed by the "maxlife" cookie parameter, so
  7893.             the cookie is consider too OLD and is ignored. The request will be
  7894.             redispatched just as if there was no cookie.
  7895.  
  7896.         - : does not apply (no cookie set in configuration).
  7897.  
  7898.   - the last character reports what operations were performed on the persistence
  7899.     cookie returned by the server (only in HTTP mode) :
  7900.  
  7901.         N : NO cookie was provided by the server, and none was inserted either.
  7902.  
  7903.         I : no cookie was provided by the server, and the proxy INSERTED one.
  7904.             Note that in "cookie insert" mode, if the server provides a cookie,
  7905.             it will still be overwritten and reported as "I" here.
  7906.  
  7907.         U : the proxy UPDATED the last date in the cookie that was presented by
  7908.             the client. This can only happen in insert mode with "maxidle". It
  7909.             happens everytime there is activity at a different date than the
  7910.             date indicated in the cookie. If any other change happens, such as
  7911.             a redispatch, then the cookie will be marked as inserted instead.
  7912.  
  7913.         P : a cookie was PROVIDED by the server and transmitted as-is.
  7914.  
  7915.         R : the cookie provided by the server was REWRITTEN by the proxy, which
  7916.             happens in "cookie rewrite" or "cookie prefix" modes.
  7917.  
  7918.         D : the cookie provided by the server was DELETED by the proxy.
  7919.  
  7920.         - : does not apply (no cookie set in configuration).
  7921.  
  7922. The combination of the two first flags gives a lot of information about what
  7923. was happening when the session terminated, and why it did terminate. It can be
  7924. helpful to detect server saturation, network troubles, local system resource
  7925. starvation, attacks, etc...
  7926.  
  7927. The most common termination flags combinations are indicated below. They are
  7928. alphabetically sorted, with the lowercase set just after the upper case for
  7929. easier finding and understanding.
  7930.  
  7931.   Flags   Reason
  7932.  
  7933.      --   Normal termination.
  7934.  
  7935.      CC   The client aborted before the connection could be established to the
  7936.           server. This can happen when haproxy tries to connect to a recently
  7937.           dead (or unchecked) server, and the client aborts while haproxy is
  7938.           waiting for the server to respond or for "timeout connect" to expire.
  7939.  
  7940.      CD   The client unexpectedly aborted during data transfer. This can be
  7941.           caused by a browser crash, by an intermediate equipment between the
  7942.           client and haproxy which decided to actively break the connection,
  7943.           by network routing issues between the client and haproxy, or by a
  7944.           keep-alive session between the server and the client terminated first
  7945.           by the client.
  7946.  
  7947.      cD   The client did not send nor acknowledge any data for as long as the
  7948.           "timeout client" delay. This is often caused by network failures on
  7949.           the client side, or the client simply leaving the net uncleanly.
  7950.  
  7951.      CH   The client aborted while waiting for the server to start responding.
  7952.           It might be the server taking too long to respond or the client
  7953.           clicking the 'Stop' button too fast.
  7954.  
  7955.      cH   The "timeout client" stroke while waiting for client data during a
  7956.           POST request. This is sometimes caused by too large TCP MSS values
  7957.           for PPPoE networks which cannot transport full-sized packets. It can
  7958.           also happen when client timeout is smaller than server timeout and
  7959.           the server takes too long to respond.
  7960.  
  7961.      CQ   The client aborted while its session was queued, waiting for a server
  7962.           with enough empty slots to accept it. It might be that either all the
  7963.           servers were saturated or that the assigned server was taking too
  7964.           long a time to respond.
  7965.  
  7966.      CR   The client aborted before sending a full HTTP request. Most likely
  7967.           the request was typed by hand using a telnet client, and aborted
  7968.           too early. The HTTP status code is likely a 400 here. Sometimes this
  7969.           might also be caused by an IDS killing the connection between haproxy
  7970.           and the client.
  7971.  
  7972.      cR   The "timeout http-request" stroke before the client sent a full HTTP
  7973.           request. This is sometimes caused by too large TCP MSS values on the
  7974.           client side for PPPoE networks which cannot transport full-sized
  7975.           packets, or by clients sending requests by hand and not typing fast
  7976.           enough, or forgetting to enter the empty line at the end of the
  7977.           request. The HTTP status code is likely a 408 here.
  7978.  
  7979.      CT   The client aborted while its session was tarpitted. It is important to
  7980.           check if this happens on valid requests, in order to be sure that no
  7981.           wrong tarpit rules have been written. If a lot of them happen, it
  7982.           might make sense to lower the "timeout tarpit" value to something
  7983.           closer to the average reported "Tw" timer, in order not to consume
  7984.           resources for just a few attackers.
  7985.  
  7986.      SC   The server or an equipment between it and haproxy explicitly refused
  7987.           the TCP connection (the proxy received a TCP RST or an ICMP message
  7988.           in return). Under some circumstances, it can also be the network
  7989.           stack telling the proxy that the server is unreachable (eg: no route,
  7990.           or no ARP response on local network). When this happens in HTTP mode,
  7991.           the status code is likely a 502 or 503 here.
  7992.  
  7993.      sC   The "timeout connect" stroke before a connection to the server could
  7994.           complete. When this happens in HTTP mode, the status code is likely a
  7995.           503 or 504 here.
  7996.  
  7997.      SD   The connection to the server died with an error during the data
  7998.           transfer. This usually means that haproxy has received an RST from
  7999.           the server or an ICMP message from an intermediate equipment while
  8000.           exchanging data with the server. This can be caused by a server crash
  8001.           or by a network issue on an intermediate equipment.
  8002.  
  8003.      sD   The server did not send nor acknowledge any data for as long as the
  8004.           "timeout server" setting during the data phase. This is often caused
  8005.           by too short timeouts on L4 equipments before the server (firewalls,
  8006.           load-balancers, ...), as well as keep-alive sessions maintained
  8007.           between the client and the server expiring first on haproxy.
  8008.  
  8009.      SH   The server aborted before sending its full HTTP response headers, or
  8010.           it crashed while processing the request. Since a server aborting at
  8011.           this moment is very rare, it would be wise to inspect its logs to
  8012.           control whether it crashed and why. The logged request may indicate a
  8013.           small set of faulty requests, demonstrating bugs in the application.
  8014.           Sometimes this might also be caused by an IDS killing the connection
  8015.           between haproxy and the server.
  8016.  
  8017.      sH   The "timeout server" stroke before the server could return its
  8018.           response headers. This is the most common anomaly, indicating too
  8019.           long transactions, probably caused by server or database saturation.
  8020.           The immediate workaround consists in increasing the "timeout server"
  8021.           setting, but it is important to keep in mind that the user experience
  8022.           will suffer from these long response times. The only long term
  8023.           solution is to fix the application.
  8024.  
  8025.      sQ   The session spent too much time in queue and has been expired. See
  8026.           the "timeout queue" and "timeout connect" settings to find out how to
  8027.           fix this if it happens too often. If it often happens massively in
  8028.           short periods, it may indicate general problems on the affected
  8029.           servers due to I/O or database congestion, or saturation caused by
  8030.           external attacks.
  8031.  
  8032.      PC   The proxy refused to establish a connection to the server because the
  8033.           process' socket limit has been reached while attempting to connect.
  8034.           The global "maxconn" parameter may be increased in the configuration
  8035.           so that it does not happen anymore. This status is very rare and
  8036.           might happen when the global "ulimit-n" parameter is forced by hand.
  8037.  
  8038.      PD   The proxy blocked an incorrectly formatted chunked encoded message in
  8039.           a request or a response, after the server has emitted its headers. In
  8040.           most cases, this will indicate an invalid message from the server to
  8041.           the client.
  8042.  
  8043.      PH   The proxy blocked the server's response, because it was invalid,
  8044.           incomplete, dangerous (cache control), or matched a security filter.
  8045.           In any case, an HTTP 502 error is sent to the client. One possible
  8046.           cause for this error is an invalid syntax in an HTTP header name
  8047.           containing unauthorized characters. It is also possible but quite
  8048.           rare, that the proxy blocked a chunked-encoding request from the
  8049.           client due to an invalid syntax, before the server responded. In this
  8050.           case, an HTTP 400 error is sent to the client and reported in the
  8051.           logs.
  8052.  
  8053.      PR   The proxy blocked the client's HTTP request, either because of an
  8054.           invalid HTTP syntax, in which case it returned an HTTP 400 error to
  8055.           the client, or because a deny filter matched, in which case it
  8056.           returned an HTTP 403 error.
  8057.  
  8058.      PT   The proxy blocked the client's request and has tarpitted its
  8059.           connection before returning it a 500 server error. Nothing was sent
  8060.           to the server. The connection was maintained open for as long as
  8061.           reported by the "Tw" timer field.
  8062.  
  8063.      RC   A local resource has been exhausted (memory, sockets, source ports)
  8064.           preventing the connection to the server from establishing. The error
  8065.           logs will tell precisely what was missing. This is very rare and can
  8066.           only be solved by proper system tuning.
  8067.  
  8068. The combination of the two last flags gives a lot of information about how
  8069. persistence was handled by the client, the server and by haproxy. This is very
  8070. important to troubleshoot disconnections, when users complain they have to
  8071. re-authenticate. The commonly encountered flags are :
  8072.  
  8073.      --   Persistence cookie is not enabled.
  8074.  
  8075.      NN   No cookie was provided by the client, none was inserted in the
  8076.           response. For instance, this can be in insert mode with "postonly"
  8077.           set on a GET request.
  8078.  
  8079.      II   A cookie designating an invalid server was provided by the client,
  8080.           a valid one was inserted in the response. This typically happens when
  8081.           a "server" entry is removed from the configuraton, since its cookie
  8082.           value can be presented by a client when no other server knows it.
  8083.  
  8084.      NI   No cookie was provided by the client, one was inserted in the
  8085.           response. This typically happens for first requests from every user
  8086.           in "insert" mode, which makes it an easy way to count real users.
  8087.  
  8088.      VN   A cookie was provided by the client, none was inserted in the
  8089.           response. This happens for most responses for which the client has
  8090.           already got a cookie.
  8091.  
  8092.      VU   A cookie was provided by the client, with a last visit date which is
  8093.           not completely up-to-date, so an updated cookie was provided in
  8094.           response. This can also happen if there was no date at all, or if
  8095.           there was a date but the "maxidle" parameter was not set, so that the
  8096.           cookie can be switched to unlimited time.
  8097.  
  8098.      EI   A cookie was provided by the client, with a last visit date which is
  8099.           too old for the "maxidle" parameter, so the cookie was ignored and a
  8100.           new cookie was inserted in the response.
  8101.  
  8102.      OI   A cookie was provided by the client, with a first visit date which is
  8103.           too old for the "maxlife" parameter, so the cookie was ignored and a
  8104.           new cookie was inserted in the response.
  8105.  
  8106.      DI   The server designated by the cookie was down, a new server was
  8107.           selected and a new cookie was emitted in the response.
  8108.  
  8109.      VI   The server designated by the cookie was not marked dead but could not
  8110.           be reached. A redispatch happened and selected another one, which was
  8111.           then advertised in the response.
  8112.  
  8113.  
  8114. 8.6. Non-printable characters
  8115. -----------------------------
  8116.  
  8117. In order not to cause trouble to log analysis tools or terminals during log
  8118. consulting, non-printable characters are not sent as-is into log files, but are
  8119. converted to the two-digits hexadecimal representation of their ASCII code,
  8120. prefixed by the character '#'. The only characters that can be logged without
  8121. being escaped are comprised between 32 and 126 (inclusive). Obviously, the
  8122. escape character '#' itself is also encoded to avoid any ambiguity ("#23"). It
  8123. is the same for the character '"' which becomes "#22", as well as '{', '|' and
  8124. '}' when logging headers.
  8125.  
  8126. Note that the space character (' ') is not encoded in headers, which can cause
  8127. issues for tools relying on space count to locate fields. A typical header
  8128. containing spaces is "User-Agent".
  8129.  
  8130. Last, it has been observed that some syslog daemons such as syslog-ng escape
  8131. the quote ('"') with a backslash ('\'). The reverse operation can safely be
  8132. performed since no quote may appear anywhere else in the logs.
  8133.  
  8134.  
  8135. 8.7. Capturing HTTP cookies
  8136. ---------------------------
  8137.  
  8138. Cookie capture simplifies the tracking a complete user session. This can be
  8139. achieved using the "capture cookie" statement in the frontend. Please refer to
  8140. section 4.2 for more details. Only one cookie can be captured, and the same
  8141. cookie will simultaneously be checked in the request ("Cookie:" header) and in
  8142. the response ("Set-Cookie:" header). The respective values will be reported in
  8143. the HTTP logs at the "captured_request_cookie" and "captured_response_cookie"
  8144. locations (see section 8.2.3 about HTTP log format). When either cookie is
  8145. not seen, a dash ('-') replaces the value. This way, it's easy to detect when a
  8146. user switches to a new session for example, because the server will reassign it
  8147. a new cookie. It is also possible to detect if a server unexpectedly sets a
  8148. wrong cookie to a client, leading to session crossing.
  8149.  
  8150.   Examples :
  8151.         # capture the first cookie whose name starts with "ASPSESSION"
  8152.         capture cookie ASPSESSION len 32
  8153.  
  8154.         # capture the first cookie whose name is exactly "vgnvisitor"
  8155.         capture cookie vgnvisitor= len 32
  8156.  
  8157.  
  8158. 8.8. Capturing HTTP headers
  8159. ---------------------------
  8160.  
  8161. Header captures are useful to track unique request identifiers set by an upper
  8162. proxy, virtual host names, user-agents, POST content-length, referrers, etc. In
  8163. the response, one can search for information about the response length, how the
  8164. server asked the cache to behave, or an object location during a redirection.
  8165.  
  8166. Header captures are performed using the "capture request header" and "capture
  8167. response header" statements in the frontend. Please consult their definition in
  8168. section 4.2 for more details.
  8169.  
  8170. It is possible to include both request headers and response headers at the same
  8171. time. Non-existent headers are logged as empty strings, and if one header
  8172. appears more than once, only its last occurrence will be logged. Request headers
  8173. are grouped within braces '{' and '}' in the same order as they were declared,
  8174. and delimited with a vertical bar '|' without any space. Response headers
  8175. follow the same representation, but are displayed after a space following the
  8176. request headers block. These blocks are displayed just before the HTTP request
  8177. in the logs.
  8178.  
  8179.   Example :
  8180.         # This instance chains to the outgoing proxy
  8181.         listen proxy-out
  8182.             mode http
  8183.             option httplog
  8184.             option logasap
  8185.             log global
  8186.             server cache1 192.168.1.1:3128
  8187.  
  8188.             # log the name of the virtual server
  8189.             capture request  header Host len 20
  8190.  
  8191.             # log the amount of data uploaded during a POST
  8192.             capture request  header Content-Length len 10
  8193.  
  8194.             # log the beginning of the referrer
  8195.             capture request  header Referer len 20
  8196.  
  8197.             # server name (useful for outgoing proxies only)
  8198.             capture response header Server len 20
  8199.  
  8200.             # logging the content-length is useful with "option logasap"
  8201.             capture response header Content-Length len 10
  8202.  
  8203.             # log the expected cache behaviour on the response
  8204.             capture response header Cache-Control len 8
  8205.  
  8206.             # the Via header will report the next proxy's name
  8207.             capture response header Via len 20
  8208.  
  8209.             # log the URL location during a redirection
  8210.             capture response header Location len 20
  8211.  
  8212.     >>> Aug  9 20:26:09 localhost \
  8213.           haproxy[2022]: 127.0.0.1:34014 [09/Aug/2004:20:26:09] proxy-out \
  8214.           proxy-out/cache1 0/0/0/162/+162 200 +350 - - ---- 0/0/0/0/0 0/0 \
  8215.           {fr.adserver.yahoo.co||http://fr.f416.mail.} {|864|private||} \
  8216.           "GET http://fr.adserver.yahoo.com/"
  8217.  
  8218.     >>> Aug  9 20:30:46 localhost \
  8219.           haproxy[2022]: 127.0.0.1:34020 [09/Aug/2004:20:30:46] proxy-out \
  8220.           proxy-out/cache1 0/0/0/182/+182 200 +279 - - ---- 0/0/0/0/0 0/0 \
  8221.           {w.ods.org||} {Formilux/0.1.8|3495|||} \
  8222.           "GET http://trafic.1wt.eu/ HTTP/1.1"
  8223.  
  8224.     >>> Aug  9 20:30:46 localhost \
  8225.           haproxy[2022]: 127.0.0.1:34028 [09/Aug/2004:20:30:46] proxy-out \
  8226.           proxy-out/cache1 0/0/2/126/+128 301 +223 - - ---- 0/0/0/0/0 0/0 \
  8227.           {www.sytadin.equipement.gouv.fr||http://trafic.1wt.eu/} \
  8228.           {Apache|230|||http://www.sytadin.} \
  8229.           "GET http://www.sytadin.equipement.gouv.fr/ HTTP/1.1"
  8230.  
  8231.  
  8232. 8.9. Examples of logs
  8233. ---------------------
  8234.  
  8235. These are real-world examples of logs accompanied with an explanation. Some of
  8236. them have been made up by hand. The syslog part has been removed for better
  8237. reading. Their sole purpose is to explain how to decipher them.
  8238.  
  8239.     >>> haproxy[674]: 127.0.0.1:33318 [15/Oct/2003:08:31:57.130] px-http \
  8240.           px-http/srv1 6559/0/7/147/6723 200 243 - - ---- 5/3/3/1/0 0/0 \
  8241.           "HEAD / HTTP/1.0"
  8242.  
  8243.     => long request (6.5s) entered by hand through 'telnet'. The server replied
  8244.        in 147 ms, and the session ended normally ('----')
  8245.  
  8246.     >>> haproxy[674]: 127.0.0.1:33319 [15/Oct/2003:08:31:57.149] px-http \
  8247.           px-http/srv1 6559/1230/7/147/6870 200 243 - - ---- 324/239/239/99/0 \
  8248.           0/9 "HEAD / HTTP/1.0"
  8249.  
  8250.     => Idem, but the request was queued in the global queue behind 9 other
  8251.        requests, and waited there for 1230 ms.
  8252.  
  8253.     >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.654] px-http \
  8254.           px-http/srv1 9/0/7/14/+30 200 +243 - - ---- 3/3/3/1/0 0/0 \
  8255.           "GET /image.iso HTTP/1.0"
  8256.  
  8257.     => request for a long data transfer. The "logasap" option was specified, so
  8258.        the log was produced just before transferring data. The server replied in
  8259.        14 ms, 243 bytes of headers were sent to the client, and total time from
  8260.        accept to first data byte is 30 ms.
  8261.  
  8262.     >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.925] px-http \
  8263.           px-http/srv1 9/0/7/14/30 502 243 - - PH-- 3/2/2/0/0 0/0 \
  8264.           "GET /cgi-bin/bug.cgi? HTTP/1.0"
  8265.  
  8266.     => the proxy blocked a server response either because of an "rspdeny" or
  8267.        "rspideny" filter, or because the response was improperly formatted and
  8268.        not HTTP-compliant, or because it blocked sensitive information which
  8269.        risked being cached. In this case, the response is replaced with a "502
  8270.        bad gateway". The flags ("PH--") tell us that it was haproxy who decided
  8271.        to return the 502 and not the server.
  8272.  
  8273.     >>> haproxy[18113]: 127.0.0.1:34548 [15/Oct/2003:15:18:55.798] px-http \
  8274.           px-http/<NOSRV> -1/-1/-1/-1/8490 -1 0 - - CR-- 2/2/2/0/0 0/0 ""
  8275.  
  8276.     => the client never completed its request and aborted itself ("C---") after
  8277.        8.5s, while the proxy was waiting for the request headers ("-R--").
  8278.        Nothing was sent to any server.
  8279.  
  8280.     >>> haproxy[18113]: 127.0.0.1:34549 [15/Oct/2003:15:19:06.103] px-http \
  8281.          px-http/<NOSRV> -1/-1/-1/-1/50001 408 0 - - cR-- 2/2/2/0/0 0/0 ""
  8282.  
  8283.     => The client never completed its request, which was aborted by the
  8284.        time-out ("c---") after 50s, while the proxy was waiting for the request
  8285.        headers ("-R--").  Nothing was sent to any server, but the proxy could
  8286.        send a 408 return code to the client.
  8287.  
  8288.     >>> haproxy[18989]: 127.0.0.1:34550 [15/Oct/2003:15:24:28.312] px-tcp \
  8289.           px-tcp/srv1 0/0/5007 0 cD 0/0/0/0/0 0/0
  8290.  
  8291.     => This log was produced with "option tcplog". The client timed out after
  8292.        5 seconds ("c----").
  8293.  
  8294.     >>> haproxy[18989]: 10.0.0.1:34552 [15/Oct/2003:15:26:31.462] px-http \
  8295.           px-http/srv1 3183/-1/-1/-1/11215 503 0 - - SC-- 205/202/202/115/3 \
  8296.           0/0 "HEAD / HTTP/1.0"
  8297.  
  8298.     => The request took 3s to complete (probably a network problem), and the
  8299.        connection to the server failed ('SC--') after 4 attempts of 2 seconds
  8300.        (config says 'retries 3'), and no redispatch (otherwise we would have
  8301.        seen "/+3"). Status code 503 was returned to the client. There were 115
  8302.        connections on this server, 202 connections on this proxy, and 205 on
  8303.        the global process. It is possible that the server refused the
  8304.        connection because of too many already established.
  8305.  
  8306.  
  8307. 9. Statistics and monitoring
  8308. ----------------------------
  8309.  
  8310. It is possible to query HAProxy about its status. The most commonly used
  8311. mechanism is the HTTP statistics page. This page also exposes an alternative
  8312. CSV output format for monitoring tools. The same format is provided on the
  8313. Unix socket.
  8314.  
  8315.  
  8316. 9.1. CSV format
  8317. ---------------
  8318.  
  8319. The statistics may be consulted either from the unix socket or from the HTTP
  8320. page. Both means provide a CSV format whose fields follow.
  8321.  
  8322.   0. pxname: proxy name
  8323.   1. svname: service name (FRONTEND for frontend, BACKEND for backend, any name
  8324.     for server)
  8325.   2. qcur: current queued requests
  8326.   3. qmax: max queued requests
  8327.   4. scur: current sessions
  8328.   5. smax: max sessions
  8329.   6. slim: sessions limit
  8330.   7. stot: total sessions
  8331.   8. bin: bytes in
  8332.   9. bout: bytes out
  8333.  10. dreq: denied requests
  8334.  11. dresp: denied responses
  8335.  12. ereq: request errors
  8336.  13. econ: connection errors
  8337.  14. eresp: response errors (among which srv_abrt)
  8338.  15. wretr: retries (warning)
  8339.  16. wredis: redispatches (warning)
  8340.  17. status: status (UP/DOWN/NOLB/MAINT/MAINT(via)...)
  8341.  18. weight: server weight (server), total weight (backend)
  8342.  19. act: server is active (server), number of active servers (backend)
  8343.  20. bck: server is backup (server), number of backup servers (backend)
  8344.  21. chkfail: number of failed checks
  8345.  22. chkdown: number of UP->DOWN transitions
  8346.  23. lastchg: last status change (in seconds)
  8347.  24. downtime: total downtime (in seconds)
  8348.  25. qlimit: queue limit
  8349.  26. pid: process id (0 for first instance, 1 for second, ...)
  8350.  27. iid: unique proxy id
  8351.  28. sid: service id (unique inside a proxy)
  8352.  29. throttle: warm up status
  8353.  30. lbtot: total number of times a server was selected
  8354.  31. tracked: id of proxy/server if tracking is enabled
  8355.  32. type (0=frontend, 1=backend, 2=server, 3=socket)
  8356.  33. rate: number of sessions per second over last elapsed second
  8357.  34. rate_lim: limit on new sessions per second
  8358.  35. rate_max: max number of new sessions per second
  8359.  36. check_status: status of last health check, one of:
  8360.         UNK     -> unknown
  8361.         INI     -> initializing
  8362.         SOCKERR -> socket error
  8363.         L4OK    -> check passed on layer 4, no upper layers testing enabled
  8364.         L4TMOUT -> layer 1-4 timeout
  8365.         L4CON   -> layer 1-4 connection problem, for example
  8366.                    "Connection refused" (tcp rst) or "No route to host" (icmp)
  8367.         L6OK    -> check passed on layer 6
  8368.         L6TOUT  -> layer 6 (SSL) timeout
  8369.         L6RSP   -> layer 6 invalid response - protocol error
  8370.         L7OK    -> check passed on layer 7
  8371.         L7OKC   -> check conditionally passed on layer 7, for example 404 with
  8372.                    disable-on-404
  8373.         L7TOUT  -> layer 7 (HTTP/SMTP) timeout
  8374.         L7RSP   -> layer 7 invalid response - protocol error
  8375.         L7STS   -> layer 7 response error, for example HTTP 5xx
  8376.  37. check_code: layer5-7 code, if available
  8377.  38. check_duration: time in ms took to finish last health check
  8378.  39. hrsp_1xx: http responses with 1xx code
  8379.  40. hrsp_2xx: http responses with 2xx code
  8380.  41. hrsp_3xx: http responses with 3xx code
  8381.  42. hrsp_4xx: http responses with 4xx code
  8382.  43. hrsp_5xx: http responses with 5xx code
  8383.  44. hrsp_other: http responses with other codes (protocol error)
  8384.  45. hanafail: failed health checks details
  8385.  46. req_rate: HTTP requests per second over last elapsed second
  8386.  47. req_rate_max: max number of HTTP requests per second observed
  8387.  48. req_tot: total number of HTTP requests received
  8388.  49. cli_abrt: number of data transfers aborted by the client
  8389.  50. srv_abrt: number of data transfers aborted by the server (inc. in eresp)
  8390.  
  8391.  
  8392. 9.2. Unix Socket commands
  8393. -------------------------
  8394.  
  8395. The following commands are supported on the UNIX stats socket ; all of them
  8396. must be terminated by a line feed. The socket supports pipelining, so that it
  8397. is possible to chain multiple commands at once provided they are delimited by
  8398. a semi-colon or a line feed, although the former is more reliable as it has no
  8399. risk of being truncated over the network. The responses themselves will each be
  8400. followed by an empty line, so it will be easy for an external script to match a
  8401. given response with a given request. By default one command line is processed
  8402. then the connection closes, but there is an interactive allowing multiple lines
  8403. to be issued one at a time.
  8404.  
  8405. It is important to understand that when multiple haproxy processes are started
  8406. on the same sockets, any process may pick up the request and will output its
  8407. own stats.
  8408.  
  8409. clear counters
  8410.   Clear the max values of the statistics counters in each proxy (frontend &
  8411.   backend) and in each server. The cumulated counters are not affected. This
  8412.   can be used to get clean counters after an incident, without having to
  8413.   restart nor to clear traffic counters. This command is restricted and can
  8414.   only be issued on sockets configured for levels "operator" or "admin".
  8415.  
  8416. clear counters all
  8417.   Clear all statistics counters in each proxy (frontend & backend) and in each
  8418.   server. This has the same effect as restarting. This command is restricted
  8419.   and can only be issued on sockets configured for level "admin".
  8420.  
  8421. disable server <backend>/<server>
  8422.   Mark the server DOWN for maintenance. In this mode, no more checks will be
  8423.   performed on the server until it leaves maintenance.
  8424.   If the server is tracked by other servers, those servers will be set to DOWN
  8425.   during the maintenance.
  8426.  
  8427.   In the statistics page, a server DOWN for maintenance will appear with a
  8428.   "MAINT" status, its tracking servers with the "MAINT(via)" one.
  8429.  
  8430.   Both the backend and the server may be specified either by their name or by
  8431.   their numeric ID, prefixed with a sharp ('#').
  8432.  
  8433.   This command is restricted and can only be issued on sockets configured for
  8434.   level "admin".
  8435.  
  8436. enable server <backend>/<server>
  8437.   If the server was previously marked as DOWN for maintenance, this marks the
  8438.   server UP and checks are re-enabled.
  8439.  
  8440.   Both the backend and the server may be specified either by their name or by
  8441.   their numeric ID, prefixed with a sharp ('#').
  8442.  
  8443.   This command is restricted and can only be issued on sockets configured for
  8444.   level "admin".
  8445.  
  8446. get weight <backend>/<server>
  8447.   Report the current weight and the initial weight of server <server> in
  8448.   backend <backend> or an error if either doesn't exist. The initial weight is
  8449.   the one that appears in the configuration file. Both are normally equal
  8450.   unless the current weight has been changed. Both the backend and the server
  8451.   may be specified either by their name or by their numeric ID, prefixed with a
  8452.   sharp ('#').
  8453.  
  8454. help
  8455.   Print the list of known keywords and their basic usage. The same help screen
  8456.   is also displayed for unknown commands.
  8457.  
  8458. prompt
  8459.   Toggle the prompt at the beginning of the line and enter or leave interactive
  8460.   mode. In interactive mode, the connection is not closed after a command
  8461.   completes. Instead, the prompt will appear again, indicating the user that
  8462.   the interpreter is waiting for a new command. The prompt consists in a right
  8463.   angle bracket followed by a space "> ". This mode is particularly convenient
  8464.   when one wants to periodically check information such as stats or errors.
  8465.   It is also a good idea to enter interactive mode before issuing a "help"
  8466.   command.
  8467.  
  8468. quit
  8469.   Close the connection when in interactive mode.
  8470.  
  8471. set timeout cli <delay>
  8472.   Change the CLI interface timeout for current connection. This can be useful
  8473.   during long debugging sessions where the user needs to constantly inspect
  8474.   some indicators without being disconnected. The delay is passed in seconds.
  8475.  
  8476. set weight <backend>/<server> <weight>[%]
  8477.   Change a server's weight to the value passed in argument. If the value ends
  8478.   with the '%' sign, then the new weight will be relative to the initially
  8479.   configured weight. Relative weights are only permitted between 0 and 100%,
  8480.   and absolute weights are permitted between 0 and 256. Servers which are part
  8481.   of a farm running a static load-balancing algorithm have stricter limitations
  8482.   because the weight cannot change once set. Thus for these servers, the only
  8483.   accepted values are 0 and 100% (or 0 and the initial weight). Changes take
  8484.   effect immediately, though certain LB algorithms require a certain amount of
  8485.   requests to consider changes. A typical usage of this command is to disable
  8486.   a server during an update by setting its weight to zero, then to enable it
  8487.   again after the update by setting it back to 100%. This command is restricted
  8488.   and can only be issued on sockets configured for level "admin". Both the
  8489.   backend and the server may be specified either by their name or by their
  8490.   numeric ID, prefixed with a sharp ('#').
  8491.  
  8492. show errors [<iid>]
  8493.   Dump last known request and response errors collected by frontends and
  8494.   backends. If <iid> is specified, the limit the dump to errors concerning
  8495.   either frontend or backend whose ID is <iid>. This command is restricted
  8496.   and can only be issued on sockets configured for levels "operator" or
  8497.   "admin".
  8498.  
  8499.   The errors which may be collected are the last request and response errors
  8500.   caused by protocol violations, often due to invalid characters in header
  8501.   names. The report precisely indicates what exact character violated the
  8502.   protocol. Other important information such as the exact date the error was
  8503.   detected, frontend and backend names, the server name (when known), the
  8504.   internal session ID and the source address which has initiated the session
  8505.   are reported too.
  8506.  
  8507.   All characters are returned, and non-printable characters are encoded. The
  8508.   most common ones (\t = 9, \n = 10, \r = 13 and \e = 27) are encoded as one
  8509.   letter following a backslash. The backslash itself is encoded as '\\' to
  8510.   avoid confusion. Other non-printable characters are encoded '\xNN' where
  8511.   NN is the two-digits hexadecimal representation of the character's ASCII
  8512.   code.
  8513.  
  8514.   Lines are prefixed with the position of their first character, starting at 0
  8515.   for the beginning of the buffer. At most one input line is printed per line,
  8516.   and large lines will be broken into multiple consecutive output lines so that
  8517.   the output never goes beyond 79 characters wide. It is easy to detect if a
  8518.   line was broken, because it will not end with '\n' and the next line's offset
  8519.   will be followed by a '+' sign, indicating it is a continuation of previous
  8520.   line.
  8521.  
  8522.   Example :
  8523.     >>> $ echo "show errors" | socat stdio /tmp/sock1
  8524.         [04/Mar/2009:15:46:56.081] backend http-in (#2) : invalid response
  8525.           src 127.0.0.1, session #54, frontend fe-eth0 (#1), server s2 (#1)
  8526.           response length 213 bytes, error at position 23:
  8527.  
  8528.           00000  HTTP/1.0 200 OK\r\n
  8529.           00017  header/bizarre:blah\r\n
  8530.           00038  Location: blah\r\n
  8531.           00054  Long-line: this is a very long line which should b
  8532.           00104+ e broken into multiple lines on the output buffer,
  8533.           00154+  otherwise it would be too large to print in a ter
  8534.           00204+ minal\r\n
  8535.           00211  \r\n
  8536.  
  8537.     In the example above, we see that the backend "http-in" which has internal
  8538.     ID 2 has blocked an invalid response from its server s2 which has internal
  8539.     ID 1. The request was on session 54 initiated by source 127.0.0.1 and
  8540.     received by frontend fe-eth0 whose ID is 1. The total response length was
  8541.     213 bytes when the error was detected, and the error was at byte 23. This
  8542.     is the slash ('/') in header name "header/bizarre", which is not a valid
  8543.     HTTP character for a header name.
  8544.  
  8545. show info
  8546.   Dump info about haproxy status on current process.
  8547.  
  8548. show sess
  8549.   Dump all known sessions. Avoid doing this on slow connections as this can
  8550.   be huge. This command is restricted and can only be issued on sockets
  8551.   configured for levels "operator" or "admin".
  8552.  
  8553. show sess <id>
  8554.   Display a lot of internal information about the specified session identifier.
  8555.   This identifier is the first field at the beginning of the lines in the dumps
  8556.   of "show sess" (it corresponds to the session pointer). Those information are
  8557.   useless to most users but may be used by haproxy developers to troubleshoot a
  8558.   complex bug. The output format is intentionally not documented so that it can
  8559.   freely evolve depending on demands.
  8560.  
  8561. show stat [<iid> <type> <sid>]
  8562.   Dump statistics in the CSV format. By passing <id>, <type> and <sid>, it is
  8563.   possible to dump only selected items :
  8564.     - <iid> is a proxy ID, -1 to dump everything
  8565.     - <type> selects the type of dumpable objects : 1 for frontends, 2 for
  8566.        backends, 4 for servers, -1 for everything. These values can be ORed,
  8567.        for example:
  8568.           1 + 2     = 3   -> frontend + backend.
  8569.           1 + 2 + 4 = 7   -> frontend + backend + server.
  8570.     - <sid> is a server ID, -1 to dump everything from the selected proxy.
  8571.  
  8572.   Example :
  8573.     >>> $ echo "show info;show stat" | socat stdio unix-connect:/tmp/sock1
  8574.         Name: HAProxy
  8575.         Version: 1.4-dev2-49
  8576.         Release_date: 2009/09/23
  8577.         Nbproc: 1
  8578.         Process_num: 1
  8579.         (...)
  8580.  
  8581.         # pxname,svname,qcur,qmax,scur,smax,slim,stot,bin,bout,dreq,  (...)
  8582.         stats,FRONTEND,,,0,0,1000,0,0,0,0,0,0,,,,,OPEN,,,,,,,,,1,1,0, (...)
  8583.         stats,BACKEND,0,0,0,0,1000,0,0,0,0,0,,0,0,0,0,UP,0,0,0,,0,250,(...)
  8584.         (...)
  8585.         www1,BACKEND,0,0,0,0,1000,0,0,0,0,0,,0,0,0,0,UP,1,1,0,,0,250, (...)
  8586.  
  8587.         $
  8588.  
  8589.     Here, two commands have been issued at once. That way it's easy to find
  8590.     which process the stats apply to in multi-process mode. Notice the empty
  8591.     line after the information output which marks the end of the first block.
  8592.     A similar empty line appears at the end of the second block (stats) so that
  8593.     the reader knows the output has not been truncated.
  8594.  
  8595.  
  8596. /*
  8597.  * Local variables:
  8598.  *  fill-column: 79
  8599.  * End:
  8600.  */
  8601.  

Replies to HAProxy configuration.txt rss

Title Name Language When
Re: HAProxy configuration.txt Gamboge Ostrich text 6 Years ago.
Re: HAProxy configuration.txt Paltry Wigeon text 6 Years ago.
Re: HAProxy configuration.txt Scorching Agouti text 9 Years ago.