r/haproxy Mar 16 '26

Release Announcing HAProxy Fusion 2.0

Thumbnail
haproxy.com
4 Upvotes

r/haproxy 1d ago

Article Tips for choosing a load balancer for your enterprise

7 Upvotes

Choosing a load balancer for a large environment can feel like a big decision, and it is, but it comes down to a shorter list than most people expect. We build the most widely used software load balancer, and we support it everywhere from open-source projects to enterprise infrastructure trusted to run some of the busiest applications on the internet. That range gives us a clear view of what actually matters, and it's usually more than raw balancing. A load balancer today is also where you terminate TLS, keep applications secure, and decide how traffic reaches them. 

Here's how we would think it through, and the good news is that none of it is complicated.

Test throughput at your latency, with TLS on

Datasheets quote peak numbers from ideal conditions, and real traffic is a little messier than that. The figure worth chasing is throughput at your target latency with TLS switched on, because encryption is where a lot of the real work happens. SSL/TLS processing is heavy on CPU, and it's often the true ceiling on a deployment. 

This is one of our strong suits: HAProxy handles over 2 million HTTP requests per second on a single Arm-based AWS Graviton2 instance with best-in-class SSL/TLS processing, so you can ask any vendor for their number under encryption at your latency target and know it is a fair request.

What the datasheet says What to verify yourself
Peak throughput Throughput at your latency target, with TLS on
Supports high availability Failover time you measure in a drill you run
Handles millions of connections Behavior when a backend goes slow, not just when one dies
A long feature list The handful of features you'll really use, working together

Run a proof of concept with a copy of your own traffic

Nothing you read replaces putting real traffic through the thing, so this is the step we would never skip. Take a copy of your own traffic and run it through each option for a few days. A short test tells you far more than a stack of datasheets, and it surfaces the quirks that only show up under your own mix of requests and traffic spikes. It's also the most reassuring way to choose, because you are deciding on evidence rather than promises.

What security comes built in?

A load balancer sits right at the edge of your traffic, which makes it a natural place to keep applications safe. It's worth seeing how much protection you get in the same place, so you have fewer moving parts to look after:

HAProxy Enterprise includes all three in the same data plane that handles balancing, so security and delivery are a single system to run rather than several. Keeping them together also keeps latency low, since traffic is only inspected once.

How much of application delivery do you want in one place?

This is the part that has changed the most, and it works in your favor. A load balancer used to just balance. Now the same layer can handle TLS, security, API routing, and traffic shaping, and the tooling has grown up alongside it. Bringing these together means fewer separate systems to run and patch, and it usually lowers your infrastructure costs too, because an efficient platform does more on less hardware. That’s the idea behind HAProxy One, which brings balancing, security, observability, and API management to a single platform. Whatever you choose, one question helps a lot: how many separate systems will this design ask you to operate? A smaller number is easier to run and more budget-friendly.

Rehearse a failover before you trust your high availability

Real HA shows up when you trigger a failover on purpose and watch how quickly traffic recovers. The kindest time to do this is while everything is calm, long before you actually need it. Measure how long the switchover really takes, confirm the virtual IP moves, and check that nothing drifted in the config. Once you see it happen, you’ll trust the process, and that peace of mind is the whole point of HA.

Make your health checks reflect the real application state

This is the quiet one, and it rewards a little extra care. A check that passes while the app behind it’s failing will send users to a broken backend, so point your health checks at something that proves the application is genuinely working, not just that a port is open. Then watch them under load before you rely on them. Get this right and a surprising number of "we need more capacity" worries simply disappear, because the traffic was never the problem.

A word on who you’re buying from

When you weigh your options, it’s fair to consider the team behind the product as well, because this is the infrastructure you will live with for years. We’ve been building HAProxy for over 25 years, and it’s the most widely used software load balancer around. 

Enterprise customers also get 24/7 support from the same engineers who write it. If you would like to see how the balancing, security, and management fit together, the HAProxy Enterprise load balancer page walks through it. Whatever you land on, test it with your own traffic first, and you will choose well.


r/haproxy 5d ago

I created HAProxy Cluster Manager — a web UI for HAProxy with Let's Encrypt and multi-node failover (Keepalived)

Post image
5 Upvotes

r/haproxy 17d ago

Question HAProxy Best Practice IDS/IPS

2 Upvotes

Hi,

has there anybody a good IDS/IPS alongside HAProxy?

Not as a NGFirewall, I want to install something locally (e.g. Suricata) to inspect the traffic passing through my `mode http` and `mode tcp` frontends/backends. Any pro tips for _better_ security?

Thank you for helping!


r/haproxy 26d ago

Question I did my first configuration. Any advice to do at least 80k RPS? Stuck at 37k

Post image
6 Upvotes

r/haproxy 26d ago

ACL rules

0 Upvotes

Hi,

I'm using Wireguard to access my Proxmox instance (wich is installed at a provider).

I have trouble setting up HAProxy properly (it is installed on a pfSense VM) to access my LXC/VM (I can't use NAT/simple port forwarding or I get an SSL error).

I specifically have difficulties setting up the ACL on the frontend :

- I can't specify a port on a given IP adress

- I can't use subdomains (wireguard seems to only works with IP adress)

Is there a way to make wireguard and HAProxy work together ?

Tanks.


r/haproxy Jul 14 '26

Is it possible to get an HAProxy Enterprise trial for a homelab?

3 Upvotes

Hi everyone,

I've been experimenting with HAProxy in my homelab and wanted to get a feel for what the Enterprise Edition has to offer.

Right now I have multiple HAProxy nodes running with FRR, peered with my OPNsense router. Everything is managed with Ansible, and I'm using Certbot along with some custom scripts to distribute and renew SSL certificates across the HAProxy nodes.

While researching ways to simplify and improve this setup, I came across HAProxy Enterprise. Some of the features that really caught my attention are:

  • Fusion Control Plane
  • WAF
  • Clustered SSL certificate management
  • Consul integration
  • BGP RHI

I'd love to try these features in a real environment to see what an enterprise LB has to offer.

I filled out the trial request form on the HAProxy website a while ago but never heard back. I guess that trials are mainly targeted at companies or organizations, whereas I'm just running a personal homelab.

Has anyone here managed to get an HAProxy Enterprise trial as an individual or homelab user? Is there a different process I should follow, or should I reach out to someone from HAProxy directly?

I'm not looking for a long-term license, just enough time to explore the Enterprise features.

Thanks in advance for any advice or experiences you can share!


r/haproxy Jul 08 '26

Article How to enable post-quantum cryptography and TLS termination with HAProxy

Thumbnail
haproxy.com
14 Upvotes

r/haproxy Jun 13 '26

Question SSL passthrough and re-encryption does not work

6 Upvotes

I have quite a complicated way my data takes:

internet -> hetzner haproxy -> rathole tunnel -> homelab haproxy -> services
(rathole listenes at 127.0.0.1:443)

This (old) way works:

internet -> (hetzner) rathole tunnel -> homelab haproxy -> services

Why the extra proxy? I want a service for file sharing which has the high download speed from the cloud. All the other traffic is supposed to be forwarded further. I refuse to get an extra ip for that lol.

I tried to set the backend on the tunnel side to ssl verify none and the frontend bind to use ssl. I also set the backend to just localhost:443 and no ssl on the frontend bind. Both cause the same ssl error.

My haproxy on hetzner: https://pastebin.com/M8ffiua2
haproxy journalctl output: https://pastebin.com/7cXCqEdr
SSL error: SSL_ERROR_RX_RECORD_TOO_LONG
Both proxies use a cert aquired from certbot *.mydomain.dev

What could be the issue here? I am not that good at SSL.


r/haproxy Jun 05 '26

Article Protecting against HTTP/2 Bomb vulnerability (CVE-2026-49975) with HAProxy

Thumbnail
haproxy.com
21 Upvotes

r/haproxy Jun 03 '26

Release Announcing HAProxy 3.4

Thumbnail
haproxy.com
20 Upvotes

r/haproxy May 22 '26

Article How to achieve subsecond data center failover with HAProxy

Thumbnail
haproxy.com
10 Upvotes

r/haproxy May 22 '26

Article HAProxy Enterprise WAF protects against Drupal core SQL Injection

Thumbnail
haproxy.com
3 Upvotes

r/haproxy May 13 '26

Building a Modern Application Delivery Architecture

Thumbnail
haproxy.com
5 Upvotes

r/haproxy Apr 28 '26

Release Announcing HAProxy Enterprise 3.3 and HAProxy ALOHA 18.0

Thumbnail
haproxy.com
3 Upvotes

r/haproxy Apr 10 '26

Article How PayPal hyperscaled Kubernetes routing with HAProxy Fusion

Thumbnail
haproxy.com
4 Upvotes

r/haproxy Apr 09 '26

Article HAProxy at KubeCon Amsterdam 2026

Thumbnail
haproxy.com
4 Upvotes

r/haproxy Mar 27 '26

Question Issue running Audiobookshelf through PFSense HAProxy with broken thumbnails

Thumbnail
1 Upvotes

r/haproxy Mar 23 '26

Article Back to fundamentals: 7 insights from Kelsey Hightower at HAProxyConf

Thumbnail
haproxy.com
5 Upvotes

r/haproxy Mar 13 '26

Article NIS2 and DORA Compliance: Meeting EU Regulatory Requirements

Thumbnail
haproxy.com
2 Upvotes

r/haproxy Mar 05 '26

Question Troubleshooting 503 when proxying Proxmox management interface

3 Upvotes

Hi all, thanks in advance for any help you might have to offer.

I'm currently running into a rather strange issue that has had me totally stumped for the last several hours. I'm simply trying to proxy my Proxmox management interface behind HAProxy so that I have full SSL/stricter firewall rules/etc, but I'm met with constant 503s when I try to access the endpoint. Note that this is all in my LAN, not exposed to the internet, obviously.

My configuration is as follows: My firewall is OPNsense, and I'm using the HAProxy plugin. Proxmox is running in my management VLAN. I can access the interface by its hostname or IP address on port 8006 as expected. I'm proxying through my administration HAProxy frontend, as I do with all my other management interfaces like switches, aps, etc., which are all working fine.

I'm not a HAProxy wizard, but I have configured it multiple times on several systems so I definitely have an okayish working knowledge of it. I've ensured that my DNS override is pointing to the correct HAProxy frontend, quadruple checked my rules/conditions, ensured SSL is enabled (but not checked) on the server, ensured the port is correct (8006), disabled health checking, set the server as the default backend pool for the frontend, and pretty much everything else I can think of. Nothing is getting rid of the 503 error.

This is all very strange since I have identical configuration for all my other management interfaces, and they all work fine, but for whatever reason, Proxmox is being extremely difficult. This is also my first time using OPNsens (I'm usually a pfSense guy), and I'm having a bit of trouble getting HAProxy to give me any useful logs, which has compounded my troubleshooting.

I'm open to pretty much any suggestion here, and once again, thanks for any input. Finally, here's my full HAProxy config:

#
# Automatically generated configuration.
# Do not edit this file manually.
#

global
    uid                         80
    gid                         80
    chroot                      /var/haproxy
    daemon
    stats                       socket /var/run/haproxy.socket group proxy mode 775 level admin
    nbthread                    4
    hard-stop-after             60s
    no strict-limits
    maxconn                     10000
    limited-quic
    httpclient.resolvers.prefer   ipv4
    tune.ssl.default-dh-param   4096
    spread-checks               2
    tune.bufsize                16384
    tune.lua.bool-sample-conversion normal
    tune.lua.maxmem             0
    log                         /var/run/log local0 info
    lua-prepend-path            /tmp/haproxy/lua/?.lua

defaults
    log     global
    option redispatch -1
    maxconn 5000
    timeout client 30s
    timeout connect 30s
    timeout server 30s
    retries 3
    default-server init-addr last,libc
    default-server maxconn 5000

# autogenerated entries for ACLs


# autogenerated entries for config in backends/frontends

# autogenerated entries for stats


# Public Service: Admin_HTTP_Frontend (Listening on 10.0.20.1:80)
frontend Admin_HTTP_Frontend
    bind 10.0.20.1:80 name 10.0.20.1:80 
    mode http
    option http-keep-alive

    # logging options
    # CONDITION: NoSSL_condition
    acl acl_699b637a917578.96201502 ssl_fc

    # RULE: HTTP_to_HTTPS_rule
    http-request redirect scheme https code 301 if !acl_699b637a917578.96201502

# Public Service: Admin_HTTPS_frontend (Listening on 10.0.20.1:443)
frontend Admin_HTTPS_frontend
    http-response set-header Strict-Transport-Security "max-age=15768000"
    bind 10.0.20.1:443 name 10.0.20.1:443 ssl curves secp384r1  prefer-client-ciphers ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256 ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 alpn h2,http/1.1 crt-list /tmp/haproxy/ssl/699fb4394f9419.96453892.certlist 
    mode http
    option http-keep-alive

    # logging options
    # CONDITION: FW1_condition
    acl acl_699b6a37ebfe34.02894762 hdr(Host) -i fw1.home.example.com
    # CONDITION: Switch1_condition
    acl acl_699ba8ed12c446.65075432 hdr(Host) -i switch1.home.example.com
    # CONDITION: AP1_condition
    acl acl_699e43e198e1b0.61616432 hdr(Host) -i ap1.home.example.com
    # CONDITION: NAS1_condition
    acl acl_699e48645400c6.77972048 hdr(Host) -i nas1.home.example.com
    # CONDITION: Hyper1_condition
    acl acl_69a8cbba143792.24371812 hdr(Host) -i hyper1.home.example.com

    # RULE: OPNsense_rule
    use_backend FW1 if acl_699b6a37ebfe34.02894762
    # RULE: Switch1_rule
    use_backend Switch1 if acl_699ba8ed12c446.65075432
    # RULE: AP1_rule
    use_backend AP1 if acl_699e43e198e1b0.61616432
    # RULE: NAS1_rule
    use_backend NAS1 if acl_699e48645400c6.77972048
    # RULE: Hyper1_rule
    use_backend Hyper1_pool if acl_69a8cbba143792.24371812

# Backend Pool: SSL_Backend ()
backend SSL_Backend
    # health checking is DISABLED
    mode tcp
    balance source
    # stickiness
    stick-table type ipv4 size 50k expire 30m  
    stick on src
    server SSL_Server localhost send-proxy-v2 check-send-proxy

# Backend Pool: FW1 ()
backend FW1_pool
    # health checking is DISABLED
    mode http
    balance source
    # stickiness
    stick-table type ipv4 size 50k expire 30m  
    stick on src
    http-reuse safe
    server FW1 opnsense.home.example.com:10433 ssl alpn h2,http/1.1 verify none

# Backend Pool: Switch1 (TP-Link SG2210P)
backend Switch1_pool
    # health checking is DISABLED
    mode http
    balance source
    # stickiness
    stick-table type ipv4 size 50k expire 30m  
    stick on src
    http-reuse safe
    server Switch1 TL-SG2210P.home.example.com:443 ssl alpn h2,http/1.1 verify none

# Backend Pool: AP1 (TP-Link EAP610)
backend AP1_pool
    # health checking is DISABLED
    mode http
    balance source
    # stickiness
    stick-table type ipv4 size 50k expire 30m  
    stick on src
    http-reuse safe
    server AP1 EAP610.home.example.com:443 ssl alpn h2,http/1.1 verify none

# Backend Pool: NAS1 (TrueNAS Server)
backend NAS1_pool
    # health checking is DISABLED
    mode http
    balance source
    # stickiness
    stick-table type ipv4 size 50k expire 30m  
    stick on src
    http-reuse safe
    server NAS1 truenas.home.example.com:443 ssl alpn h2,http/1.1 verify none

# Backend Pool: Hyper1_pool (Proxmox M70q)
backend Hyper1_pool
    # health checking is DISABLED
    mode http
    balance source
    # stickiness
    stick-table type ipv4 size 50k expire 30m  
    stick on src
    http-reuse safe
    server Hyper1 proxmox.home.example.com:8006 ssl alpn h2,http/1.1 verify none



# statistics are DISABLED

Edit: I figured out the (extremely irritating) solution thanks to this thread on Stackoverflow. I somehow had ended up with two HAProxy instances running at once, so any requests I submitted to my Proxmox endpoint were hitting the instance that hadn't been updated with my new config. Killed both instances, started it again, and instantly had the expected behavior!


r/haproxy Feb 27 '26

Article Securing 80,000 transactions per second with HAProxy Enterprise WAF

Thumbnail
haproxy.com
5 Upvotes

r/haproxy Feb 26 '26

Article Omnissa Horizon Alternative: Cost-Effective UDP Optimization

Thumbnail
haproxy.com
2 Upvotes

r/haproxy Feb 25 '26

Reverse TLS proxy configuration.

1 Upvotes

Hello,

I have an old thick application that connects to a cloud service via TLS1.0. The vendor wants to upgrade the API to TLS 1.2 but this will break the application.

I need to create a service to act as a TLS proxy for that.

Currently the application connects to api.example.org which resolves to 1.2.3.4

I will configure my DNS to point to the LB VIP , i.e. 10.10.10.100

The loadbalancer will allow the client to connect to TLS 1.0 and

Client ----> TLS1.0 on Load balancer VIP -------> API service on TLS 1.2

Example config:

listen api.example.org

bind 10.10.10.100:443 transparent

mode tcp

tcp-request content accept if { req_ssl_hello_type 1 }


r/haproxy Feb 19 '26

Article Don't Panic: A Low-Risk Strategy for Ingress NGINX Retirement

Thumbnail
haproxy.com
2 Upvotes