22<html lang="en">
33 <head>
44 <meta charset="utf-8" />
5- <title>HAProxy version 3.4-dev11-40 - Configuration Manual</title>
5+ <title>HAProxy version 3.4-dev12 - Configuration Manual</title>
66 <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
77 <link href="https://raw.githubusercontent.com/thomaspark/bootswatch/v3.3.7/cerulean/bootstrap.min.css" rel="stylesheet" />
88 <link href="../css/page.css?0.4.2-15" rel="stylesheet" />
33213321
33223322 <a class="list-group-item" href="#reuse-key">reuse-key</a>
33233323
3324+ <a class="list-group-item" href="#reverse">reverse</a>
3325+
3326+ <a class="list-group-item" href="#reverse_dom">reverse_dom</a>
3327+
33243328 <a class="list-group-item" href="#rfc7239_field">rfc7239_field</a>
33253329
33263330 <a class="list-group-item" href="#rfc7239_is_valid">rfc7239_is_valid</a>
49224926 You can use <strong>left</strong> and <strong>right</strong> arrow keys to navigate between chapters.<br>
49234927 </p>
49244928 <p class="text-right">
4925- <small>Converted with <a href="https://github.com/cbonte/haproxy-dconv">haproxy-dconv</a> v<b>0.4.2-15</b> on <b>2026/05/10 </b></small>
4929+ <small>Converted with <a href="https://github.com/cbonte/haproxy-dconv">haproxy-dconv</a> v<b>0.4.2-15</b> on <b>2026/05/13 </b></small>
49264930 </p>
49274931 </div>
49284932 <!-- /.sidebar -->
49334937 <div class="text-center">
49344938 <h1><a href="http://www.haproxy.org/" title="HAProxy"><img src="../img/HAProxyCommunityEdition_60px.png?0.4.2-15" /></a></h1>
49354939 <h2>Configuration Manual</h2>
4936- <p><strong>version 3.4-dev11-40 </strong></p>
4940+ <p><strong>version 3.4-dev12 </strong></p>
49374941 <p>
4938- 2026/05/08 <br>
4942+ 2026/05/13 <br>
49394943
49404944 </p>
49414945 </div>
@@ -25371,16 +25375,18 @@ <h3 id="chapter-7.3.1" data-target="7.3.1"><small><a class="small" href="#7.3.1"
2537125375<tr><td ><a href="#7-port_only">port_only</a></td><td >string</td><td >integer</td></tr>
2537225376<tr><td ><a href="#7-protobuf">protobuf(field_number[,field_type])</a></td><td >binary</td><td >binary</td></tr>
2537325377<tr><td ><a href="#7-regsub">regsub(regex,subst[,flags])</a></td><td >string</td><td >string</td></tr>
25378+ <tr><td ><a href="#7-reverse">reverse</a></td><td >string</td><td >string</td></tr>
25379+ <tr><td ><a href="#7-reverse_dom">reverse_dom</a></td><td >string</td><td >string</td></tr>
2537425380<tr><td ><a href="#7-rfc7239_field">rfc7239_field(field)</a></td><td >string</td><td >string</td></tr>
2537525381<tr><td ><a href="#7-rfc7239_is_valid">rfc7239_is_valid</a></td><td >string</td><td >boolean</td></tr>
2537625382<tr><td ><a href="#7-rfc7239_n2nn">rfc7239_n2nn</a></td><td >string</td><td >address / str</td></tr>
2537725383<tr><td ><a href="#7-rfc7239_n2np">rfc7239_n2np</a></td><td >string</td><td >integer / str</td></tr>
2537825384<tr><td ><a href="#7-rfc7239_nn">rfc7239_nn</a></td><td >address/str</td><td >string</td></tr>
2537925385<tr><td ><a href="#7-rfc7239_np">rfc7239_np</a></td><td >integer/str</td><td >string</td></tr>
2538025386<tr><td ><a href="#7-rtrim">rtrim(chars)</a></td><td >string</td><td >string</td></tr>
25387+ <thead><tr><th>keyword</th><th>input type</th><th>output type</th></tr></thead>
2538125388<tr><td ><a href="#7-sdbm">sdbm([avalanche])</a></td><td >binary</td><td >integer</td></tr>
2538225389<tr><td ><a href="#7-secure_memcmp">secure_memcmp(var)</a></td><td >string</td><td >boolean</td></tr>
25383- <thead><tr><th>keyword</th><th>input type</th><th>output type</th></tr></thead>
2538425390<tr><td ><a href="#7-set-var">set-var(var[,cond...])</a></td><td >any</td><td >same</td></tr>
2538525391<tr><td ><a href="#7-sha1">sha1</a></td><td >binary</td><td >binary</td></tr>
2538625392<tr><td ><a href="#7-sha2">sha2([bits])</a></td><td >binary</td><td >binary</td></tr>
@@ -25399,9 +25405,9 @@ <h3 id="chapter-7.3.1" data-target="7.3.1"><small><a class="small" href="#7.3.1"
2539925405<tr><td ><a href="#7-table_expire">table_expire([table[,default_value]])</a></td><td >any</td><td >integer</td></tr>
2540025406<tr><td ><a href="#7-table_glitch_cnt">table_glitch_cnt([table])</a></td><td >any</td><td >integer</td></tr>
2540125407<tr><td ><a href="#7-table_glitch_rate">table_glitch_rate([table])</a></td><td >any</td><td >integer</td></tr>
25408+ <thead><tr><th>keyword</th><th>input type</th><th>output type</th></tr></thead>
2540225409<tr><td ><a href="#7-table_gpc">table_gpc(idx[,table])</a></td><td >any</td><td >integer</td></tr>
2540325410<tr><td ><a href="#7-table_gpc0">table_gpc0([table])</a></td><td >any</td><td >integer</td></tr>
25404- <thead><tr><th>keyword</th><th>input type</th><th>output type</th></tr></thead>
2540525411<tr><td ><a href="#7-table_gpc0_rate">table_gpc0_rate([table])</a></td><td >any</td><td >integer</td></tr>
2540625412<tr><td ><a href="#7-table_gpc1">table_gpc1([table])</a></td><td >any</td><td >integer</td></tr>
2540725413<tr><td ><a href="#7-table_gpc1_rate">table_gpc1_rate([table])</a></td><td >any</td><td >integer</td></tr>
@@ -25420,9 +25426,9 @@ <h3 id="chapter-7.3.1" data-target="7.3.1"><small><a class="small" href="#7.3.1"
2542025426<tr><td ><a href="#7-table_inc_gpc1">table_inc_gpc1([table])</a></td><td >any</td><td >integer</td></tr>
2542125427<tr><td ><a href="#7-table_kbytes_in">table_kbytes_in([table])</a></td><td >any</td><td >integer</td></tr>
2542225428<tr><td ><a href="#7-table_kbytes_out">table_kbytes_out([table])</a></td><td >any</td><td >integer</td></tr>
25429+ <thead><tr><th>keyword</th><th>input type</th><th>output type</th></tr></thead>
2542325430<tr><td ><a href="#7-table_server_id">table_server_id([table])</a></td><td >any</td><td >integer</td></tr>
2542425431<tr><td ><a href="#7-table_sess_cnt">table_sess_cnt([table])</a></td><td >any</td><td >integer</td></tr>
25425- <thead><tr><th>keyword</th><th>input type</th><th>output type</th></tr></thead>
2542625432<tr><td ><a href="#7-table_sess_rate">table_sess_rate([table])</a></td><td >any</td><td >integer</td></tr>
2542725433<tr><td ><a href="#7-table_trackers">table_trackers([table])</a></td><td >any</td><td >integer</td></tr>
2542825434<tr><td ><a href="#7-tcp.dst">tcp.dst</a></td><td >binary</td><td >integer</td></tr>
@@ -25441,9 +25447,9 @@ <h3 id="chapter-7.3.1" data-target="7.3.1"><small><a class="small" href="#7.3.1"
2544125447<tr><td ><a href="#7-ub64enc">ub64enc</a></td><td >string</td><td >string</td></tr>
2544225448<tr><td ><a href="#7-ungrpc">ungrpc(field_number[,field_type])</a></td><td >binary</td><td >binary / int</td></tr>
2544325449<tr><td ><a href="#7-unset-var">unset-var(var)</a></td><td >any</td><td >same</td></tr>
25450+ <thead><tr><th>keyword</th><th>input type</th><th>output type</th></tr></thead>
2544425451<tr><td ><a href="#7-upper">upper</a></td><td >string</td><td >string</td></tr>
2544525452<tr><td ><a href="#7-url_dec">url_dec([in_form])</a></td><td >string</td><td >string</td></tr>
25446- <thead><tr><th>keyword</th><th>input type</th><th>output type</th></tr></thead>
2544725453<tr><td ><a href="#7-url_enc">url_enc([enc_type])</a></td><td >string</td><td >string</td></tr>
2544825454<tr><td ><a href="#7-us_ltime">us_ltime(format[,offset])</a></td><td >integer</td><td >string</td></tr>
2544925455<tr><td ><a href="#7-us_utime">us_utime(format[,offset])</a></td><td >integer</td><td >string</td></tr>
@@ -26726,6 +26732,58 @@ <h3 id="chapter-7.3.1" data-target="7.3.1"><small><a class="small" href="#7.3.1"
2672626732http-request redirect location %[url,'regsub("(foo|bar)([0-9]+)?","\2\1",i)']
2672726733http-request redirect location %[url,regsub(\"(foo|bar)([0-9]+)?\",\"\2\1\",i)]
2672826734</code></pre>
26735+ </div><a class="anchor" name="reverse"></a><a class="anchor" name="7-reverse"></a><a class="anchor" name="7.3.1-reverse"></a><a class="anchor" name="reverse (Using ACLs and fetching samples)"></a><a class="anchor" name="reverse (Converters)"></a><div class="keyword"><b><a class="anchor" name="reverse"></a><a href="#7.3.1-reverse">reverse</a></b></div><pre class="text">Reverses the input string byte by byte.
26736+
26737+ This converter is encoding-agnostic and reverses bytes, not characters; it is
26738+ not suitable for reversing human text encoded as UTF-8.
26739+
26740+ This can turn suffix lookups on the original string into prefix lookups on
26741+ the reversed string, allowing the use of indexed prefix matchers such as
26742+ "map_beg" on large maps.
26743+ </pre><div class="separator">
26744+ <span class="label label-success">Examples:</span>
26745+ <pre class="prettyprint">
26746+ <code>"example.com" -> "moc.elpmaxe"
26747+ "ab cd" -> "dc ba"
26748+
26749+ <span class="comment"># Given a map file where each key contains a reversed hostname:</span>
26750+ <span class="comment"># moc.elpmaxe.ppa app1</span>
26751+ <span class="comment"># moc.elpmaxe.bd dbcluster</span>
26752+ <span class="comment"># Pick a backend based on the domain suffix of the Host header:</span>
26753+ use_backend %[req.hdr(host),lower,reverse,map_beg(/etc/haproxy/hosts.map,default)]
26754+ </code></pre>
26755+ </div><a class="anchor" name="reverse_dom"></a><a class="anchor" name="7-reverse_dom"></a><a class="anchor" name="7.3.1-reverse_dom"></a><a class="anchor" name="reverse_dom (Using ACLs and fetching samples)"></a><a class="anchor" name="reverse_dom (Converters)"></a><div class="keyword"><b><a class="anchor" name="reverse_dom"></a><a href="#7.3.1-reverse_dom">reverse_dom</a></b></div><pre class="text">Converts a string containing an FQDN-like hostname into its reversed-label
26756+ form. A single trailing dot on the input is ignored. Empty labels cause the
26757+ converter to fail.
26758+
26759+ This converter does not lowercase its input and does not strip any port.
26760+ It is meant to be combined with existing converters such as "<a href="#lower">lower</a>" or
26761+ "<a href="#host_only">host_only</a>" when needed.
26762+
26763+ The trailing-dot policy is intentionally left to the caller. This allows
26764+ callers to decide whether they want to match the apex too or only
26765+ subdomains.
26766+
26767+ The reversed-label form is useful for large domain maps because it turns
26768+ domain suffix lookups into prefix lookups, allowing the use of indexed prefix
26769+ matchers such as "map_beg".
26770+ </pre><div class="separator">
26771+ <span class="label label-success">Examples:</span>
26772+ <pre class="prettyprint">
26773+ <code>"example.com" -> "com.example"
26774+ "mail.example.com" -> "com.example.mail"
26775+ "example.com." -> "com.example"
26776+
26777+ <span class="comment"># match only subdomains of example.net, not the apex</span>
26778+ acl example_net_sub req.hdr(Host),host_only,reverse_dom -m beg net.example.
26779+
26780+ <span class="comment"># match only the apex</span>
26781+ acl example_net_apex req.hdr(Host),host_only,reverse_dom -i net.example
26782+
26783+ <span class="comment"># exact-or-subdomain prefix lookup using an explicit dotted form</span>
26784+ http-request set-var(txn.rev_host) req.hdr(Host),host_only,reverse_dom,concat(.)
26785+ use_backend %[var(txn.rev_host),map_beg(/etc/haproxy/domains.map)]
26786+ </code></pre>
2672926787</div><a class="anchor" name="rfc7239_field"></a><a class="anchor" name="7-rfc7239_field"></a><a class="anchor" name="7.3.1-rfc7239_field"></a><a class="anchor" name="rfc7239_field (Using ACLs and fetching samples)"></a><a class="anchor" name="rfc7239_field (Converters)"></a><div class="keyword"><b><a class="anchor" name="rfc7239_field"></a><a href="#7.3.1-rfc7239_field">rfc7239_field</a></b>(<span style="color: #080"><field></span>)</div><pre class="text">Extracts a single field/parameter from RFC 7239 compliant header value input.
2673026788
2673126789Supported fields are:
@@ -35553,8 +35611,8 @@ <h2 id="chapter-12.9" data-target="12.9"><small><a class="small" href="#12.9">12
3555335611 <br>
3555435612 <hr>
3555535613 <div class="text-right">
35556- HAProxy 3.4-dev11-40 – Configuration Manual<br>
35557- <small>, 2026/05/08 </small>
35614+ HAProxy 3.4-dev12 – Configuration Manual<br>
35615+ <small>, 2026/05/13 </small>
3555835616 </div>
3555935617 </div>
3556035618 <!-- /.col-lg-12 -->
0 commit comments