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连接中才会生效。