<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>HAProxy 3.4.4 Documentation on PIG.CENTER</title><link>https://pig.center/docs/haproxy/</link><description>Recent content in HAProxy 3.4.4 Documentation on PIG.CENTER</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Tue, 08 Sep 2026 21:29:01 +0800</lastBuildDate><atom:link href="https://pig.center/docs/haproxy/index.xml" rel="self" type="application/rss+xml"/><item><title>Starter Guide</title><link/><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid/><description/></item><item><title>Load Balancing Fundamentals</title><link>https://pig.center/docs/haproxy/load-balancing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/load-balancing/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;This document is an introduction to HAProxy for all those who don&amp;rsquo;t know it, as well as for those&#10;who want to re-discover it when they know older versions. Its primary focus is to provide users with&#10;all the elements to decide if HAProxy is the product they&amp;rsquo;re looking for or not. Advanced users may&#10;find here some parts of solutions to some ideas they had just because they were not aware of a given&#10;new feature. Some sizing information is also provided, the product&amp;rsquo;s lifecycle is explained, and&#10;comparisons with partially overlapping products are provided.&lt;/p&gt;</description></item><item><title>What HAProxy Is and How It Works</title><link>https://pig.center/docs/haproxy/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/architecture/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy is written as &amp;ldquo;HAProxy&amp;rdquo; to designate the product, and as &amp;ldquo;haproxy&amp;rdquo; to designate the&#10;executable program, software package or a process. However, both are commonly used for both&#10;purposes, and are pronounced H-A-Proxy. Very early, &amp;ldquo;haproxy&amp;rdquo; used to stand for &amp;ldquo;high availability&#10;proxy&amp;rdquo; and the name was written in two separate words, though by now it means nothing else than&#10;&amp;ldquo;HAProxy&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Basic Features</title><link>https://pig.center/docs/haproxy/basic-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/basic-features/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;This section will enumerate a number of features that HAProxy implements, some of which are&#10;generally expected from any modern load balancer, and some of which are a direct benefit of&#10;HAProxy&amp;rsquo;s architecture. More advanced features will be detailed in the next section.&lt;/p&gt;&#10;&lt;h2 id="section-3-3-1"&gt;3.3.1. Basic features : Proxying&#10;&lt;/h2&gt;&#10;&lt;p&gt;Proxying is the action of transferring data between a client and a server over two independent&#10;connections. The following basic features are supported by HAProxy regarding proxying and connection&#10;management:&lt;/p&gt;</description></item><item><title>Standard Features</title><link>https://pig.center/docs/haproxy/standard-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/standard-features/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;In this section, some features that are very commonly used in HAProxy but are not necessarily&#10;present on other load balancers are enumerated.&lt;/p&gt;&#10;&lt;h2 id="section-3-4-1"&gt;3.4.1. Standard features : Sampling and converting information&#10;&lt;/h2&gt;&#10;&lt;p&gt;HAProxy supports information sampling using a wide set of &amp;ldquo;sample fetch functions&amp;rdquo;. The principle is&#10;to extract pieces of information known as samples, for immediate use. This is used for stickiness,&#10;to build conditions, to produce information in logs or to enrich HTTP headers.&lt;/p&gt;</description></item><item><title>Advanced Features</title><link>https://pig.center/docs/haproxy/advanced-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/advanced-features/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;h2 id="section-3-5-1"&gt;3.5.1. Advanced features : Management&#10;&lt;/h2&gt;&#10;&lt;p&gt;HAProxy is designed to remain extremely stable and safe to manage in a regular production&#10;environment. It is provided as a single executable file which doesn&amp;rsquo;t require any installation&#10;process. Multiple versions can easily coexist, meaning that it&amp;rsquo;s possible (and recommended) to&#10;upgrade instances progressively by order of importance instead of migrating all of them at once.&#10;Configuration files are easily versioned. Configuration checking is done off-line so it doesn&amp;rsquo;t&#10;require to restart a service that will possibly fail. During configuration checks, a number of&#10;advanced mistakes may be detected (e.g. a rule hiding another one, or stickiness that will not work)&#10;and detailed warnings and configuration hints are proposed to fix them. Backwards configuration file&#10;compatibility goes very far away in time, with version 1.5 still fully supporting configurations for&#10;versions 1.1 written 13 years before, and 1.6 only dropping support for almost unused, obsolete&#10;keywords that can be done differently. The configuration and software upgrade mechanism is smooth&#10;and non disruptive in that it allows old and new processes to coexist on the system, each handling&#10;its own connections. System status, build options, and library compatibility are reported on&#10;startup.&lt;/p&gt;</description></item><item><title>Sizing and Performance</title><link>https://pig.center/docs/haproxy/sizing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/sizing/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Typical CPU usage figures show 15% of the processing time spent in HAProxy versus 85% in the kernel&#10;in TCP or HTTP close mode, and about 30% for HAProxy versus 70% for the kernel in HTTP keep-alive&#10;mode. This means that the operating system and its tuning have a strong impact on the global&#10;performance.&lt;/p&gt;&#10;&lt;p&gt;Usages vary a lot between users, some focus on bandwidth, other ones on request rate, others on&#10;connection concurrency, others on SSL performance. This section aims at providing a few elements to&#10;help with this task.&lt;/p&gt;</description></item><item><title>Releases, Packages, and Upgrades</title><link>https://pig.center/docs/haproxy/releases-and-upgrades/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/releases-and-upgrades/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy is an open source project covered by the GPLv2 license, meaning that everyone is allowed to&#10;redistribute it provided that access to the sources is also provided upon request, especially if any&#10;modifications were made.&lt;/p&gt;&#10;&lt;p&gt;HAProxy evolves as a main development branch called &amp;ldquo;master&amp;rdquo; or &amp;ldquo;mainline&amp;rdquo;, from which new branches&#10;are derived once the code is considered stable. A lot of web sites run some development branches in&#10;production on a voluntarily basis, either to participate to the project or because they need a&#10;bleeding edge feature, and their feedback is highly valuable to fix bugs and judge the overall&#10;quality and stability of the version being developed.&lt;/p&gt;</description></item><item><title>Companion Products and Alternatives</title><link>https://pig.center/docs/haproxy/ecosystem/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/ecosystem/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy integrates fairly well with certain products listed below, which is why they are mentioned&#10;here even if not directly related to HAProxy.&lt;/p&gt;&#10;&lt;h2 id="section-4-1"&gt;4.1. Apache HTTP server&#10;&lt;/h2&gt;&#10;&lt;p&gt;Apache is the de-facto standard HTTP server. It&amp;rsquo;s a very complete and modular project supporting&#10;both file serving and dynamic contents. It can serve as a frontend for some application servers. It&#10;can even proxy requests and cache responses. In all of these use cases, a front load balancer is&#10;commonly needed. Apache can work in various modes, some being heavier than others. Certain modules&#10;still require the heavier pre-forked model and will prevent Apache from scaling well with a high&#10;number of connections. In this case HAProxy can provide a tremendous help by enforcing the&#10;per-server connection limits to a safe value and will significantly speed up the server and preserve&#10;its resources that will be better used by the application.&lt;/p&gt;</description></item><item><title>Documentation and Community</title><link>https://pig.center/docs/haproxy/resources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/resources/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;h2 id="section-1"&gt;1. Available documentation&#10;&lt;/h2&gt;&#10;&lt;p&gt;The complete HAProxy documentation is contained in the following documents. Please ensure to consult&#10;the relevant documentation to save time and to get the most accurate response to your needs. Also&#10;please refrain from sending questions to the mailing list whose responses are present in these&#10;documents.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://pig.center/docs/haproxy/load-balancing/"&gt;&lt;code&gt;intro.txt&lt;/code&gt;&lt;/a&gt;&#10; (this document): it presents the basics of load balancing, HAProxy as a product, what it&#10;does, what it doesn&amp;rsquo;t do, some known traps to avoid, some OS-specific limitations, how to get it,&#10;how it evolves, how to ensure you&amp;rsquo;re running with all known fixes, how to update it, complements&#10;and alternatives.&lt;/p&gt;</description></item><item><title>Configuration Manual</title><link/><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid/><description/></item><item><title>1. Quick Reminder About HTTP</title><link>https://pig.center/docs/haproxy/http-fundamentals/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/http-fundamentals/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;This document covers the configuration language as implemented in the version specified above. It&#10;does not provide any hints, examples, or advice. For such documentation, please refer to the&#10;Reference Manual or the Architecture Manual. The numbered chapters are ordered in the flat HAProxy sidebar for direct navigation.&lt;/p&gt;&#10;&lt;p&gt;When HAProxy is running in HTTP mode, both the request and the response are fully analyzed and&#10;indexed, thus it becomes possible to build matching criteria on almost anything found in the&#10;contents.&lt;/p&gt;</description></item><item><title>2. Configuring HAProxy</title><link>https://pig.center/docs/haproxy/configuration-basics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/configuration-basics/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;h2 id="section-2-1"&gt;2.1. Configuration file format&#10;&lt;/h2&gt;&#10;&lt;p&gt;HAProxy&amp;rsquo;s configuration process involves 3 major sources of parameters:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;the arguments from the command-line, which always take precedence&lt;/li&gt;&#10;&lt;li&gt;the configuration file(s), whose format is described here&lt;/li&gt;&#10;&lt;li&gt;the running process&amp;rsquo;s environment, in case some environment variables are explicitly referenced&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The configuration file follows a fairly simple hierarchical format which obey a few basic rules:&lt;/p&gt;</description></item><item><title>3. Global Section</title><link>https://pig.center/docs/haproxy/global/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/global/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Parameters in the &amp;ldquo;global&amp;rdquo; section are process-wide and often OS-specific. They are generally set&#10;once for all and do not need being changed once correct. Some of them have command-line equivalents.&lt;/p&gt;&#10;&lt;p&gt;The following keywords are supported in the &amp;ldquo;global&amp;rdquo; section:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Process management and security&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;51degrees-allow-unmatched&lt;/li&gt;&#10;&lt;li&gt;51degrees-cache-size&lt;/li&gt;&#10;&lt;li&gt;51degrees-data-file&lt;/li&gt;&#10;&lt;li&gt;51degrees-difference&lt;/li&gt;&#10;&lt;li&gt;51degrees-drift&lt;/li&gt;&#10;&lt;li&gt;51degrees-property-name-list&lt;/li&gt;&#10;&lt;li&gt;51degrees-property-separator&lt;/li&gt;&#10;&lt;li&gt;51degrees-use-performance-graph&lt;/li&gt;&#10;&lt;li&gt;51degrees-use-predictive-graph&lt;/li&gt;&#10;&lt;li&gt;ca-base&lt;/li&gt;&#10;&lt;li&gt;chroot&lt;/li&gt;&#10;&lt;li&gt;cluster-secret&lt;/li&gt;&#10;&lt;li&gt;cpu-affinity&lt;/li&gt;&#10;&lt;li&gt;cpu-map&lt;/li&gt;&#10;&lt;li&gt;cpu-policy&lt;/li&gt;&#10;&lt;li&gt;cpu-set&lt;/li&gt;&#10;&lt;li&gt;crt-base&lt;/li&gt;&#10;&lt;li&gt;daemon&lt;/li&gt;&#10;&lt;li&gt;default-path&lt;/li&gt;&#10;&lt;li&gt;description&lt;/li&gt;&#10;&lt;li&gt;deviceatlas-json-file&lt;/li&gt;&#10;&lt;li&gt;deviceatlas-log-level&lt;/li&gt;&#10;&lt;li&gt;deviceatlas-properties-cookie&lt;/li&gt;&#10;&lt;li&gt;deviceatlas-separator&lt;/li&gt;&#10;&lt;li&gt;dns-accept-family&lt;/li&gt;&#10;&lt;li&gt;expose-deprecated-directives&lt;/li&gt;&#10;&lt;li&gt;expose-experimental-directives&lt;/li&gt;&#10;&lt;li&gt;external-check&lt;/li&gt;&#10;&lt;li&gt;fd-hard-limit&lt;/li&gt;&#10;&lt;li&gt;gid&lt;/li&gt;&#10;&lt;li&gt;grace&lt;/li&gt;&#10;&lt;li&gt;group&lt;/li&gt;&#10;&lt;li&gt;h1-accept-payload-with-any-method&lt;/li&gt;&#10;&lt;li&gt;h1-case-adjust&lt;/li&gt;&#10;&lt;li&gt;h1-case-adjust-file&lt;/li&gt;&#10;&lt;li&gt;h1-do-not-close-on-insecure-transfer-encoding&lt;/li&gt;&#10;&lt;li&gt;h2-workaround-bogus-websocket-clients&lt;/li&gt;&#10;&lt;li&gt;hard-stop-after&lt;/li&gt;&#10;&lt;li&gt;harden.reject-privileged-ports.tcp&lt;/li&gt;&#10;&lt;li&gt;harden.reject-privileged-ports.quic&lt;/li&gt;&#10;&lt;li&gt;insecure-fork-wanted&lt;/li&gt;&#10;&lt;li&gt;insecure-setuid-wanted&lt;/li&gt;&#10;&lt;li&gt;issuers-chain-path&lt;/li&gt;&#10;&lt;li&gt;jwt.decrypt_alg_list&lt;/li&gt;&#10;&lt;li&gt;jwt.decrypt_enc_list&lt;/li&gt;&#10;&lt;li&gt;key-base&lt;/li&gt;&#10;&lt;li&gt;limited-quic&lt;/li&gt;&#10;&lt;li&gt;localpeer&lt;/li&gt;&#10;&lt;li&gt;log&lt;/li&gt;&#10;&lt;li&gt;log-send-hostname&lt;/li&gt;&#10;&lt;li&gt;log-tag&lt;/li&gt;&#10;&lt;li&gt;lua-load&lt;/li&gt;&#10;&lt;li&gt;lua-load-per-thread&lt;/li&gt;&#10;&lt;li&gt;lua-prepend-path&lt;/li&gt;&#10;&lt;li&gt;max-threads-per-group&lt;/li&gt;&#10;&lt;li&gt;mworker-max-reloads&lt;/li&gt;&#10;&lt;li&gt;nbthread&lt;/li&gt;&#10;&lt;li&gt;node&lt;/li&gt;&#10;&lt;li&gt;numa-cpu-mapping&lt;/li&gt;&#10;&lt;li&gt;ocsp-update.disable&lt;/li&gt;&#10;&lt;li&gt;ocsp-update.maxdelay&lt;/li&gt;&#10;&lt;li&gt;ocsp-update.mindelay&lt;/li&gt;&#10;&lt;li&gt;ocsp-update.httpproxy&lt;/li&gt;&#10;&lt;li&gt;ocsp-update.mode&lt;/li&gt;&#10;&lt;li&gt;pidfile&lt;/li&gt;&#10;&lt;li&gt;pp2-never-send-local&lt;/li&gt;&#10;&lt;li&gt;presetenv&lt;/li&gt;&#10;&lt;li&gt;prealloc-fd&lt;/li&gt;&#10;&lt;li&gt;resetenv&lt;/li&gt;&#10;&lt;li&gt;set-dumpable&lt;/li&gt;&#10;&lt;li&gt;set-var&lt;/li&gt;&#10;&lt;li&gt;setenv&lt;/li&gt;&#10;&lt;li&gt;ssl-default-bind-ciphers&lt;/li&gt;&#10;&lt;li&gt;ssl-default-bind-ciphersuites&lt;/li&gt;&#10;&lt;li&gt;ssl-default-bind-client-sigalgs&lt;/li&gt;&#10;&lt;li&gt;ssl-default-bind-curves&lt;/li&gt;&#10;&lt;li&gt;ssl-default-bind-options&lt;/li&gt;&#10;&lt;li&gt;ssl-default-bind-sigalgs&lt;/li&gt;&#10;&lt;li&gt;ssl-default-server-ciphers&lt;/li&gt;&#10;&lt;li&gt;ssl-default-server-ciphersuites&lt;/li&gt;&#10;&lt;li&gt;ssl-default-server-client-sigalgs&lt;/li&gt;&#10;&lt;li&gt;ssl-default-server-curves&lt;/li&gt;&#10;&lt;li&gt;ssl-default-server-options&lt;/li&gt;&#10;&lt;li&gt;ssl-default-server-sigalgs&lt;/li&gt;&#10;&lt;li&gt;ssl-dh-param-file&lt;/li&gt;&#10;&lt;li&gt;ssl-propquery&lt;/li&gt;&#10;&lt;li&gt;ssl-provider&lt;/li&gt;&#10;&lt;li&gt;ssl-provider-path&lt;/li&gt;&#10;&lt;li&gt;ssl-security-level&lt;/li&gt;&#10;&lt;li&gt;ssl-server-verify&lt;/li&gt;&#10;&lt;li&gt;ssl-skip-self-issued-ca&lt;/li&gt;&#10;&lt;li&gt;stats&lt;/li&gt;&#10;&lt;li&gt;stats-file&lt;/li&gt;&#10;&lt;li&gt;strict-limits&lt;/li&gt;&#10;&lt;li&gt;uid&lt;/li&gt;&#10;&lt;li&gt;ulimit-n&lt;/li&gt;&#10;&lt;li&gt;unix-bind&lt;/li&gt;&#10;&lt;li&gt;unsetenv&lt;/li&gt;&#10;&lt;li&gt;user&lt;/li&gt;&#10;&lt;li&gt;wurfl-cache-size&lt;/li&gt;&#10;&lt;li&gt;wurfl-data-file&lt;/li&gt;&#10;&lt;li&gt;wurfl-information-list&lt;/li&gt;&#10;&lt;li&gt;wurfl-information-list-separator&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Performance tuning&lt;/p&gt;</description></item><item><title>4. Proxies</title><link>https://pig.center/docs/haproxy/proxies/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/proxies/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Proxy configuration can be located in a set of sections:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;defaults [&lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt;] [ from &lt;code&gt;&amp;lt;defaults_name&amp;gt;&lt;/code&gt; ]&lt;/li&gt;&#10;&lt;li&gt;frontend &lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt; [ from &lt;code&gt;&amp;lt;defaults_name&amp;gt;&lt;/code&gt; ]&lt;/li&gt;&#10;&lt;li&gt;backend &lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt; [ from &lt;code&gt;&amp;lt;defaults_name&amp;gt;&lt;/code&gt; ]&lt;/li&gt;&#10;&lt;li&gt;listen &lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt; [ from &lt;code&gt;&amp;lt;defaults_name&amp;gt;&lt;/code&gt; ]&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;A &amp;ldquo;frontend&amp;rdquo; section describes a set of listening sockets accepting client connections.&lt;/p&gt;&#10;&lt;p&gt;A &amp;ldquo;backend&amp;rdquo; section describes a set of servers to which the proxy will connect to forward incoming&#10;connections.&lt;/p&gt;</description></item><item><title>5. Bind and Server Options</title><link>https://pig.center/docs/haproxy/bind-and-server-options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/bind-and-server-options/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;The &amp;ldquo;bind&amp;rdquo;, &amp;ldquo;server&amp;rdquo; and &amp;ldquo;default-server&amp;rdquo; keywords support a number of settings depending on some&#10;build options and on the system HAProxy was built on. These settings generally each consist in one&#10;word sometimes followed by a value, written on the same line as the &amp;ldquo;bind&amp;rdquo; or &amp;ldquo;server&amp;rdquo; line. All&#10;these options are described in this section.&lt;/p&gt;&#10;&lt;h2 id="section-5-1"&gt;5.1. Bind options&#10;&lt;/h2&gt;&#10;&lt;p&gt;The &amp;ldquo;bind&amp;rdquo; keyword supports a certain number of settings which are all passed as arguments on the&#10;same line. The order in which those arguments appear makes no importance, provided that they appear&#10;after the bind address. All of these parameters are optional. Some of them consist in a single words&#10;(booleans), while other ones expect a value after them. In this case, the value must be provided&#10;immediately after the setting name.&lt;/p&gt;</description></item><item><title>6. Cache</title><link>https://pig.center/docs/haproxy/cache/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/cache/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy provides a cache, which was designed to perform cache on small objects (favicon, css&amp;hellip;).&#10;This is a minimalist low-maintenance cache which runs in RAM.&lt;/p&gt;&#10;&lt;p&gt;The cache is based on a memory area shared between all threads, and split in 1kB blocks.&lt;/p&gt;&#10;&lt;p&gt;If an object is not used anymore, it can be deleted to store a new object independently of its&#10;expiration date. The oldest objects are deleted first when we try to allocate a new one.&lt;/p&gt;</description></item><item><title>7. ACLs and Sample Fetching</title><link>https://pig.center/docs/haproxy/acls-and-samples/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/acls-and-samples/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy is capable of extracting data from request or response streams, from client or server&#10;information, from tables, environmental information etc&amp;hellip; The action of extracting such data is&#10;called fetching a sample. Once retrieved, these samples may be used for various purposes such as a&#10;key to a stick-table, but most common usages consist in matching them against predefined constant&#10;data called patterns.&lt;/p&gt;</description></item><item><title>8. Logging</title><link>https://pig.center/docs/haproxy/configuration-logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/configuration-logging/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;One of HAProxy&amp;rsquo;s strong points certainly lies is its precise logs. It probably provides the finest&#10;level of information available for such a product, which is very important for troubleshooting&#10;complex environments. Standard information provided in logs include client ports, TCP/HTTP state&#10;timers, precise stream state at termination and precise termination cause, information about&#10;decisions to direct traffic to a server, and of course the ability to capture arbitrary headers.&lt;/p&gt;</description></item><item><title>9. Supported Filters</title><link>https://pig.center/docs/haproxy/filters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/filters/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Here are listed officially supported filters with the list of parameters they accept. Depending on&#10;compile options, some of these filters might be unavailable. The list of available filters is&#10;reported in haproxy -vv.&lt;/p&gt;&#10;&lt;p&gt;See also: &amp;ldquo;filter&amp;rdquo;&lt;/p&gt;&#10;&lt;h2 id="section-9-1"&gt;9.1. Trace&#10;&lt;/h2&gt;&#10;&lt;p&gt;filter trace [name &lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt;] [random-forwarding] [max-fwd &lt;code&gt;&amp;lt;max&amp;gt;&lt;/code&gt;] [hexdump]&lt;/p&gt;&#10;&lt;p&gt;Arguments:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-e6dced40-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="text" data-td-line-count="16"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-e6dced40-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;name&amp;gt; is an arbitrary name that will be reported in&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; messages. If no name is provided, &amp;#34;TRACE&amp;#34; is used.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;quiet&amp;gt; inhibits trace messages.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;random-forwarding&amp;gt; enables the random forwarding of parsed data. By&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; default, this filter forwards all previously parsed&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; data. With this parameter, it only forwards a random&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; amount of the parsed data.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;max&amp;gt; is the maximum amount of data that can be forwarded at&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; a time. &amp;#34;max-fwd&amp;#34; option can be combined with the&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; random forwarding. &amp;lt;max&amp;gt; must be an positive integer.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 0 means there is no limit.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;hexdump&amp;gt; dumps all forwarded data to the server and the client.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;This filter can be used as a base to develop new filters. It defines all callbacks and print a&#10;message on the standard error stream (stderr) with useful information for all of them. It may be&#10;useful to debug the activity of other filters or, quite simply, HAProxy&amp;rsquo;s activity.&lt;/p&gt;</description></item><item><title>10. FastCGI Applications</title><link>https://pig.center/docs/haproxy/fastcgi/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/fastcgi/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy is able to send HTTP requests to Responder FastCGI applications. This feature was added in&#10;HAProxy 2.1. To do so, servers must be configured to use the FastCGI protocol (using the keyword&#10;&amp;ldquo;proto fcgi&amp;rdquo; on the server line) and a FastCGI application must be configured and used by the&#10;backend managing these servers (using the keyword &amp;ldquo;use-fcgi-app&amp;rdquo; into the proxy section). Several&#10;FastCGI applications may be defined, but only one can be used at a time by a backend.&lt;/p&gt;</description></item><item><title>11. Stick Tables and Peers</title><link>https://pig.center/docs/haproxy/stick-tables-and-peers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/stick-tables-and-peers/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Stick-tables in HAProxy are a mechanism which permits to associate a certain number of information&#10;and metrics with a key of a certain type, and this for a certain duration after the last update.&#10;This can be seen as a multicolumn line in a table, where the line number is defined by the key&#10;value, and the columns all represent distinct criteria.&lt;/p&gt;</description></item><item><title>12. Other Sections</title><link>https://pig.center/docs/haproxy/other-sections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/other-sections/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;The sections described below are less commonly used and usually support only a few parameters. There&#10;is no implicit relation between any of them. They&amp;rsquo;re all started using a single keyword. None of&#10;them is permitted before a &amp;ldquo;global&amp;rdquo; section. The support for some of them might be conditioned by&#10;build options (e.g. anything SSL-related).&lt;/p&gt;&#10;&lt;h2 id="section-12-1"&gt;12.1. Traces&#10;&lt;/h2&gt;&#10;&lt;p&gt;For debugging purpose, it is possible to activate traces on an HAProxy&amp;rsquo;s subsystem. This will dump&#10;debug messages about a specific subsystem. It is a very powerful tool to diagnose issues. Traces can&#10;be dynamically configured via the CLI. It is also possible to predefined some settings in the&#10;configuration file, in dedicated &amp;ldquo;traces&amp;rdquo; sections. More details about traces can be found in the&#10;management guide. It remains a developer tools used during complex debugging sessions. It is pretty&#10;verbose and have a cost, so use it with caution. And because it is a developer tool, there is no&#10;warranty about the backward compatibility of this section.&lt;/p&gt;</description></item><item><title>Management Guide</title><link/><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid/><description/></item><item><title>1. Prerequisites</title><link>https://pig.center/docs/haproxy/prerequisites/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/prerequisites/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;This document describes how to start, stop, manage, and troubleshoot HAProxy, as well as some known&#10;limitations and traps to avoid. It does not describe how to configure it (for this please read&#10;&lt;a href="https://pig.center/docs/haproxy/http-fundamentals/"&gt;&lt;code&gt;configuration.txt&lt;/code&gt;&lt;/a&gt;&#10;).&lt;/p&gt;&#10;&lt;p&gt;In this document it is assumed that the reader has sufficient administration skills on a UNIX-like&#10;operating system, uses the shell on a daily basis and is familiar with troubleshooting utilities&#10;such as strace and tcpdump.&lt;/p&gt;</description></item><item><title>2. HAProxy Architecture</title><link>https://pig.center/docs/haproxy/management-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/management-architecture/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy is a multi-threaded, event-driven, non-blocking daemon. This means it uses event&#10;multiplexing to schedule all of its activities instead of relying on the system to schedule between&#10;multiple activities. Most of the time it runs as a single process, so the output of &amp;ldquo;ps aux&amp;rdquo; on a&#10;system will report only one &amp;ldquo;haproxy&amp;rdquo; process, unless a soft reload is in progress and an older&#10;process is finishing its job in parallel to the new one. It is thus always easy to trace its&#10;activity using the strace utility. In order to scale with the number of available processors, by&#10;default haproxy will start one worker thread per processor it is allowed to run on. Unless&#10;explicitly configured differently, the incoming traffic is spread over all these threads, all&#10;running the same event loop. A great care is taken to limit inter-thread dependencies to the strict&#10;minimum, so as to try to achieve near-linear scalability. This has some impacts such as the fact&#10;that a given connection is served by a single thread. Thus in order to use all available processing&#10;capacity, it is needed to have at least as many connections as there are threads, which is almost&#10;always granted.&lt;/p&gt;</description></item><item><title>3. Starting HAProxy</title><link>https://pig.center/docs/haproxy/starting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/starting/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy is started by invoking the &amp;ldquo;haproxy&amp;rdquo; program with a number of arguments passed on the&#10;command line. The actual syntax is:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-cc693269-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-cc693269-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ haproxy &lt;span class="o"&gt;[&lt;/span&gt;&amp;lt;options&amp;gt;&lt;span class="o"&gt;]&lt;/span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;where [&lt;code&gt;&amp;lt;options&amp;gt;&lt;/code&gt;]* is any number of options. An option always starts with &amp;lsquo;-&amp;rsquo; followed by one&#10;of more letters, and possibly followed by one or multiple extra arguments. Without any option,&#10;HAProxy displays the help page with a reminder about supported options. Available options may vary&#10;slightly based on the operating system. A fair number of these options overlap with an equivalent&#10;one in the &amp;ldquo;global&amp;rdquo; section. In this case, the command line always has precedence over the&#10;configuration file, so that the command line can be used to quickly enforce some settings without&#10;touching the configuration files. The current list of options is:&lt;/p&gt;</description></item><item><title>4. Stopping and Restarting HAProxy</title><link>https://pig.center/docs/haproxy/stopping-and-restarting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/stopping-and-restarting/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy supports a graceful and a hard stop. The hard stop is simple, when the SIGTERM signal is&#10;sent to the haproxy process, it immediately quits and all established connections are closed. The&#10;graceful stop is triggered when the SIGUSR1 signal is sent to the haproxy process. It consists in&#10;only unbinding from listening ports, but continue to process existing connections until they close.&#10;Once the last connection is closed, the process leaves.&lt;/p&gt;</description></item><item><title>5. File-Descriptor Limitations</title><link>https://pig.center/docs/haproxy/file-descriptors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/file-descriptors/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;In order to ensure that all incoming connections will successfully be served, HAProxy computes at&#10;load time the total number of file descriptors that will be needed during the process&amp;rsquo;s life. A&#10;regular Unix process is generally granted 1024 file descriptors by default, and a privileged process&#10;can raise this limit itself. This is one reason for starting HAProxy as root and letting it adjust&#10;the limit. The default limit of 1024 file descriptors roughly allow about 500 concurrent connections&#10;to be processed. The computation is based on the global maxconn parameter which limits the total&#10;number of connections per process, the number of listeners, the number of servers which have a&#10;health check enabled, the agent checks, the peers, the loggers and possibly a few other technical&#10;requirements. A simple rough estimate of this number consists in simply doubling the maxconn value&#10;and adding a few tens to get the approximate number of file descriptors needed.&lt;/p&gt;</description></item><item><title>6. Memory Management</title><link>https://pig.center/docs/haproxy/memory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/memory/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy uses a simple and fast pool-based memory management. Since it relies on a small number of&#10;different object types, it&amp;rsquo;s much more efficient to pick new objects from a pool which already&#10;contains objects of the appropriate size than to call malloc() for each different size. The pools&#10;are organized as a stack or LIFO, so that newly allocated objects are taken from recently released&#10;objects still hot in the CPU caches. Pools of similar sizes are merged together, in order to limit&#10;memory fragmentation.&lt;/p&gt;</description></item><item><title>7. CPU Usage</title><link>https://pig.center/docs/haproxy/cpu/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/cpu/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy normally spends most of its time in the system and a smaller part in userland. A finely&#10;tuned 3.5 GHz CPU can sustain a rate about 80000 end-to-end connection setups and closes per second&#10;at 100% CPU on a single core. When one core is saturated, typical figures are:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;95% system, 5% user for long TCP connections or large HTTP objects&lt;/li&gt;&#10;&lt;li&gt;85% system and 15% user for short TCP connections or small HTTP objects in close mode&lt;/li&gt;&#10;&lt;li&gt;70% system and 30% user for small HTTP objects in keep-alive mode&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The amount of rules processing and regular expressions will increase the user land part. The&#10;presence of firewall rules, connection tracking, complex routing tables in the system will instead&#10;increase the system part.&lt;/p&gt;</description></item><item><title>8. Logging</title><link>https://pig.center/docs/haproxy/management-logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/management-logging/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;For logging, HAProxy always relies on a syslog server since it does not perform any file-system&#10;access. The standard way of using it is to send logs over UDP to the log server (by default on port&#10;514). Very commonly this is configured to 127.0.0.1 where the local syslog daemon is running, but&#10;it&amp;rsquo;s also used over the network to log to a central server. The central server provides additional&#10;benefits especially in active-active scenarios where it is desirable to keep the logs merged in&#10;arrival order. HAProxy may also make use of a UNIX socket to send its logs to the local syslog&#10;daemon, but it is not recommended at all, because if the syslog server is restarted while haproxy&#10;runs, the socket will be replaced and new logs will be lost. Since HAProxy will be isolated inside a&#10;chroot jail, it will not have the ability to reconnect to the new socket. It has also been observed&#10;in field that the log buffers in use on UNIX sockets are very small and lead to lost messages even&#10;at very light loads. But this can be fine for testing however.&lt;/p&gt;</description></item><item><title>9. Statistics and Monitoring</title><link>https://pig.center/docs/haproxy/statistics-and-monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/statistics-and-monitoring/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;It is possible to query HAProxy about its status. The most commonly used mechanism is the HTTP&#10;statistics page. This page also exposes an alternative CSV output format for monitoring tools. The&#10;same format is provided on the Unix socket.&lt;/p&gt;&#10;&lt;p&gt;Statistics are regroup in categories labelled as domains, corresponding to the multiple components&#10;of HAProxy. There are two domains available: proxy and resolvers. If not specified, the proxy domain&#10;is selected. Note that only the proxy statistics are printed on the HTTP page.&lt;/p&gt;</description></item><item><title>10. Easier Configuration Management</title><link>https://pig.center/docs/haproxy/configuration-management/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/configuration-management/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;It is very common that two HAProxy nodes constituting a cluster share exactly the same configuration&#10;modulo a few addresses. Instead of having to maintain a duplicate configuration for each node, which&#10;will inevitably diverge, it is possible to include environment variables in the configuration. Thus&#10;multiple configuration may share the exact same file with only a few different system wide&#10;environment variables. This started in version 1.5 where only addresses were allowed to include&#10;environment variables, and 1.6 goes further by supporting environment variables everywhere. The&#10;syntax is the same as in the UNIX shell, a variable starts with a dollar sign (&amp;rsquo;$&amp;rsquo;), followed by an&#10;opening curly brace (&amp;rsquo;{&amp;rsquo;), then the variable name followed by the closing brace (&amp;rsquo;}&amp;rsquo;). Except for&#10;addresses, environment variables are only interpreted in arguments surrounded with double quotes&#10;(this was necessary not to break existing setups using regular expressions involving the dollar&#10;symbol).&lt;/p&gt;</description></item><item><title>11. Well-Known Traps to Avoid</title><link>https://pig.center/docs/haproxy/traps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/traps/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Once in a while, someone reports that after a system reboot, the haproxy service wasn&amp;rsquo;t started, and&#10;that once they start it by hand it works. Most often, these people are running a clustered IP&#10;address mechanism such as keepalived, to assign the service IP address to the master node only, and&#10;while it used to work when they used to bind haproxy to address 0.0.0.0, it stopped working after&#10;they bound it to the virtual IP address. What happens here is that when the service starts, the&#10;virtual IP address is not yet owned by the local node, so when HAProxy wants to bind to it, the&#10;system rejects this because it is not a local IP address. The fix doesn&amp;rsquo;t consist in delaying the&#10;haproxy service startup (since it wouldn&amp;rsquo;t stand a restart), but instead to properly configure the&#10;system to allow binding to non-local addresses. This is easily done on Linux by setting the&#10;net.ipv4.ip_nonlocal_bind sysctl to 1. This is also needed in order to transparently intercept the&#10;IP traffic that passes through HAProxy for a specific target address.&lt;/p&gt;</description></item><item><title>12. Debugging and Performance Issues</title><link>https://pig.center/docs/haproxy/debugging-and-performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/debugging-and-performance/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;When HAProxy is started with the &amp;ldquo;-d&amp;rdquo; option, it will stay in the foreground and will print one line&#10;per event, such as an incoming connection, the end of a connection, and for each request or response&#10;header line seen. This debug output is emitted before the contents are processed, so they don&amp;rsquo;t&#10;consider the local modifications. The main use is to show the request and response without having to&#10;run a network sniffer. The output is less readable when multiple connections are handled in&#10;parallel, though the &amp;ldquo;debug2ansi&amp;rdquo; and &amp;ldquo;debug2html&amp;rdquo; scripts found in the examples/ directory&#10;definitely help here by coloring the output.&lt;/p&gt;</description></item><item><title>13. Security Considerations</title><link>https://pig.center/docs/haproxy/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/docs/haproxy/security/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy is designed to run with very limited privileges. The standard way to use it is to isolate it&#10;into a chroot jail and to drop its privileges to a non-root user without any permissions inside this&#10;jail so that if any future vulnerability were to be discovered, its compromise would not affect the&#10;rest of the system.&lt;/p&gt;&#10;&lt;p&gt;In order to perform a chroot, it first needs to be started as a root user. It is pointless to build&#10;hand-made chroots to start the process there, these ones are painful to build, are never properly&#10;maintained and always contain way more bugs than the main file-system. And in case of compromise,&#10;the intruder can use the purposely built file-system. Unfortunately many administrators confuse&#10;&amp;ldquo;start as root&amp;rdquo; and &amp;ldquo;run as root&amp;rdquo;, resulting in the uid change to be done prior to starting haproxy,&#10;and reducing the effective security restrictions.&lt;/p&gt;</description></item></channel></rss>