fabio – fast, modern, zero-conf load balancing HTTP(S) and TCP router

Fabio is a fast, modern, zero-conf load balancing HTTP(S) and TCP router for deploying applications managed by Consul.

Traditional load balancers and reverse proxies need to be configured with a config file. The configuration contains the hostnames and paths the proxy is forwarding to upstream services. This process can be automated with tools like consul-template that generate config files and trigger a reload.

Fabio works differently since it updates its routing table directly from the data stored in Consul as soon as there is a change and without restart or reloading.

The main use-case for fabio is to distribute incoming HTTP(S) and TCP requests from the internet to frontend (FE) services which can handle these requests. In this scenario the FE services then use the service discovery feature in Consul to find backend (BE) services they need in order to serve the request.

Features include:

  • Access Logging – customizable access logs.
  • Access Control – route specific access control.
  • Certificate Stores – dynamic certificate stores like file system, HTTP server, Consul and Vault.
  • Compression – GZIP compression for HTTP responses.
  • Docker Support – Official Docker image, Registrator and Docker Compose example.
  • Dynamic Reloading – hot reloading of the routing table without downtime. fabio builds the routing table from the Consul service registrations, health check status and the user provided route commands stored in the Consul KV store.
  • Graceful Shutdown – wait until requests have completed before shutting down.
  • HTTP Header Support – inject some HTTP headers into upstream requests.
  • HTTPS Upstreams – forward requests to HTTPS upstream servers. The current implementation requires that upstream certificates need to be in the system root CA list.
  • Metrics Support – support for Graphite, StatsD/DataDog and Circonus.
  • PROXY Protocol Support – support for HA Proxy PROXY protocol for inbound requests (use for Amazon ELB).
  • Path Stripping – strip prefix paths from incoming requests.
  • Server-Sent Events/SSE – support for Server-Sent Events/SSE. fabio detects SSE connections if the Accept header is set to text/event-stream and enables automatic flushing of the response buffer to forward data to the client.
  • TCP Proxy Support – raw TCP proxy support. fabio can run a transparent TCP proxy which dynamically forwards an incoming connection on a given port to services which advertise that port.
  • TCP-SNI Proxy Support – forward TLS connections based on hostname without re-encryption. fabio can run a transparent TCP proxy with SNI support which can forward any TLS connection without re-encrypting the traffic.
  • HTTPS TCP-SNI Proxy Support – forward TLS connections based on hostname without re-encryption, or fallback to fabio terminating TLS and path routing as a fallback.
  • Traffic Shaping – forward N% of traffic upstream without knowing the number of instances.
  • Web UI – web ui to examine the current routing table. By default it listens on
  • Websocket Support – fabio transparently supports Websocket connections by detecting the Upgrade: websocket header in the incoming HTTP(S) request.

Website: fabiolb.net
Support: github.com/fabiolb/fabio
Developer: Education Networks of America
License: MIT License

fabio is written in Go. Learn Go with our recommended free books and free tutorials.

Return to Load Balancers Home Page

Want to find more awesome open source software? Check out our award winning open source software directory featuring more than 20,000 open source apps.
Share this article