Previously, we talked about various new methods for speed-up Nginx. Nginx Brotli Compression is a Modern Loseless Compression Algorithm Like gzip. ngx_brotli is a Set of 2 Nginx Modules. Nginx Brotli was not discussed so far as it was not exactly stable. Replacing gzip deflate with Nginx Brotli Compression typically gives an increase of 20% in compression density for text files, while compression and decompression speeds are roughly unchanged. Streams compressed with Brotli have the proposed content encoding type “br”.
Nginx Brotli Compression : Basic Details of Module
Brotli library and Nginx Brotli module are under active development. Brotli is a combination of a modern variant of the LZ77 algorithm, Huffman coding and 2nd order context modeling. It offers more dense compression than gzip.
ngx_brotli is a set of two nginx modules.
ngx_brotli filter module is used to compress responses on-the-fly,
ngx_brotli static module used to serve pre-compressed files. Brotli format was developed by Google as Open Source development and has been refined now. Brotli and gzip deflate are very closely related. Both uses a sliding window for backreferences. Gzip uses a fixed 32KB window. While Brotli can use window size from 1KB to 16MB.
Other differences include smaller minimal match length (2 bytes vs 3 bytes), larger maximal match length (16779333 bytes vs 258 bytes).
At time of first publication of this guide, Nginx Brotli Compression is not exactly what is exactly to jump right now for a production server. Testing on test server is suggested. Here is benchmarking –
https://blog.quickmediasolutions.com/2015/09/22/benchmarking-brotli.html. You can test
community.centminmod.com‘s server with cURL :
curl -vso /dev/null -H"Accept-Encoding: gzip, br" https://community.centminmod.com/
Deploying Nginx Brotli Compression
Official repository is here —
As with the newer Nginx versions we can add modules easily, but typically Nginx Brotli needs compilation, we are describing all the steps :
apt-get install python2.7 python-dev
git clone https://github.com/google/brotli.git && cd brotli
sudo python setup.py install
# we now have a ‘bro’ executable in the brotli/tools/ dir
cd /opt # we'll instal Libbrotli wrapper for the Brotli codebase
git clone https://github.com/bagder/libbrotli && cd libbrotli
sudo make install
cd /opt # we’ll set up Nginx module
git clone https://github.com/google/ngx_brotli
sudo apt-get build-dep nginx
mkdir nginx && cd nginx
sudo apt-get source nginx
# above will create a nginx-1.x.x dir with the source code
# add the line
# --add-module=/opt/ngx_brotli \
sudo dpkg-buildpackage -b
sudo dpkg -i nginx_*_all.deb nginx-full_*_amd64.deb
# In case of error, you may need to run apt-get remove nginx-core and then run the above command
Example configuration on nginx config file (
/etc/nginx/nginx.conf) is like gzip :
brotli_buffers 32 8k;
Run configtest and restart Nginx.