Nginx從nginx 1.9.11開始就支持動態模塊,所以我們嘗試一下把gx_brotli編譯成動態nginx模塊,安裝前的系統需求是:
sudo apt-get install autoconf libtool nginx-extras.
本文的測試環境是ubuntu 14.04, ppa:nginx/stable, nginx/1.10.1.
首先安裝libbrotli:
git clone https://github.com/bagder/libbrotli
./autogen.sh
./configure
make
sudo make install.
為了讓libbrotli的程序能夠加載so文件,所以我們創建一個軟鏈:
sudo ln -s /usr/local/lib/libbrotlienc.so.1 /lib/libbrotlienc.so.1.
然后下載好nginx和ngx_brotli的源代碼:
wget http://nginx.org/download/nginx-1.10.1.tar.gz
git clone https://github.com/google/ngx_brotli
編輯ngx_brotli/config文件,在頂部添加如下一行:
have=NGX_HTTP_HEADERS . auto/have
然后就在nginx源碼目錄執行configure:
./configure /
--add-dynamic-module=../ngx_brotli/ /
--with-http_dav_module /
--with-http_realip_module /
--with-http_v2_module /
--with-threads /
--with-http_ssl_module /
--with-ipv6
并make,則到兩個so文件:
$ find -name ngx_http_brotli*.so
./objs/ngx_http_brotli_static_module.so
./objs/ngx_http_brotli_filter_module.so
最后加載模塊:
在/etc/nginx/nginx.conf文件中把下面兩行加入,使nginx加載模塊:
load_module '/path/to/ngx_http_brotli_static_module.so';
load_module '/path/to/ngx_http_brotli_filter_module.so';
最后在http段中加入下面兩個配置:
brotli on;
brotli_static on;
最后執行sudo nginx -t 看看有沒有錯誤,如果沒有錯誤的話那就成功了。不過,brotli壓縮算法只有在https連接中才會生效。