Synopsis
Compression is a Technic to reduce object size to reduce delivery delay for objects over HTTP protocol.
Until now, HAProxy did not include such feature. But the guys at HAProxy Technologies worked hard on it (mainly David Du Colombier and @wlallemand).
HAProxy can now be considered an new option to compress HTTP streams, as well as nginx, apache or IIS which already does it.
Note that this is in early beta, so use it with care.
Compilation
Get the latest HAProxy git version, by running a „git pull“ in your HAProxy git directory.
If you don’t already have such directory, then run the a:
git clone http://git.1wt.eu/git/haproxy.git
Once your HAProxy sources are updated, then you can compile HAProxy:
make TARGET=linux26 USE_ZLIB=yes
Configuration
this is a very simple configuration test:
listen ft_web option http-server-close mode http bind 127.0.0.1:8090 name http default_backend bk_web backend bk_web option http-server-close mode http compression algo gzip compression type text/html text/plain text/css server localhost 127.0.0.1:80
Compression test
On my localost, I have an apache with compression disabled and a style.css object whose size is 16302 bytes.
Download without compression requested
curl -o/dev/null -D - "http://127.0.0.1:8090/style.css" HTTP/1.1 200 OK Date: Fri, 26 Oct 2012 08:55:42 GMT Server: Apache/2.2.16 (Debian) Last-Modified: Sun, 11 Mar 2012 17:01:39 GMT ETag: "a35d6-3fae-4bafa944542c0" Accept-Ranges: bytes Content-Length: 16302 Content-Type: text/css 100 16302 100 16302 0 0 5722k 0 --:--:-- --:--:-- --:--:-- 7959k
Download with compression requested
curl -o/dev/null -D - "http://127.0.0.1:8090/style.css" -H "Accept-Encoding: gzip" HTTP/1.1 200 OK Date: Fri, 26 Oct 2012 08:56:28 GMT Server: Apache/2.2.16 (Debian) Last-Modified: Sun, 11 Mar 2012 17:01:39 GMT ETag: "a35d6-3fae-4bafa944542c0" Accept-Ranges: bytes Content-Type: text/css Transfer-Encoding: chunked Content-Encoding: gzip 100 4036 0 4036 0 0 1169k 0 --:--:-- --:--:-- --:--:-- 1970k
In this example, object size passed from 16302 bytes to 4036 bytes.
Have fun !!!!