什么是Brotli
Brotli最初发布于2015年,用于网络字体的离线压缩。Google软件工程师在2015年9月发布了包含通用无损数据压缩的Brotli增强版本,特别侧重于HTTP压缩。其中的编码器被部分改写以提高压缩比,编码器和解码器都提高了速度,流式API已被改进,增加更多压缩质量级别。新版本还展现了跨平台的性能改进,以及减少解码所需的内存。
与常见的通用压缩算法不同,Brotli使用一个预定义的120千字节字典。该字典包含超过13000个常用单词、短语和其他子字符串,这些来自一个文本和HTML文档的大型语料库。预定义的算法可以提升较小文件的压缩密度。
使用brotli取代deflate来对文本文件压缩通常可以增加20%的压缩密度,而压缩与解压缩速度则大致不变。
项目地址:https://github.com/google/ngx_brotli
浏览器支持情况
- Mozilla Firefox在Firefox 44中实现Brotli。
- Google Chrome从Chrome 49开始支持Brotli。
- Opera从Opera 36开始支持Brotli。
- Safari从iOS11开始支持Brotli压缩算法。
安装配置
我用的环境是CentOS + LNMP1.6
一键脚本,只需要重新编译一遍nginx
就好
下载Brotli源码
最新版无需额外安装依赖 bagder/libbrotli
,如果LNMP环境已经搭建完成,可以参考下列步骤进行:
cd ~/lnmp1.6-full/src/
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
git submodule update --init
修改编译配置
修改include
目录中的upgrade_nginx.sh
文件
vi ~/lnmp1.6-full/include/upgrade_nginx.sh
修改下面这段代码:
if [[ "${Nginx_Ver_Com}" == "0" || "${Nginx_Ver_Com}" == "1" ]]; then
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_spdy_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module ${Nginx_With_Openssl} ${Nginx_Module_Lua} ${NginxMAOpt} ${Nginx_Modules_Options}
else
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module ${Nginx_With_Openssl} ${Nginx_Module_Lua} ${NginxMAOpt} ${Nginx_Modules_Options}
fi
简单的说,就是将 else
之后的 ./configure
配置中增加 --add-module=../ngx_brotli
来启用模块。
修改后的代码为:
if [[ "${Nginx_Ver_Com}" == "0" || "${Nginx_Ver_Com}" == "1" ]]; then
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_spdy_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module ${Nginx_With_Openssl} ${Nginx_Module_Lua} ${NginxMAOpt} ${Nginx_Modules_Options}
else
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module ${Nginx_With_Openssl} ${Nginx_Module_Lua} ${NginxMAOpt} ${Nginx_Modules_Options} --add-module=../ngx_brotli
fi
修改完成后,按ESC键输入:wq
保存并退出。
编译升级
接下来给予upgrade_nginx.sh
文件执行权限。
chmod +x upgrade_nginx.sh
升级Nginx
cd ~/lnmp1.6-full
./upgrade.sh nginx
这时候会弹出一个提示,要求输入升级的Nginx版本号。当前我的Nginx
版本为1.6.0
,觉得没有必要升级版本,直接输入当前的版本号 1.6.0
按回车键确定,接下来就是等待其自动编译安装完成。
编译完成后,检查一下 openssl
版本号对不对
nginx -V
修改Nginx配置文件
找到Nginx
的全局配置文件,我的在/usr/local/nginx/conf/nginx.conf
在 http
段加入一下代码
brotli on;
brotli_comp_level 6;
brotli_min_length 512;
brotli_types text/plain text/javascript text/css text/xml text/x-component application/javascript application/x-javascript application/xml application/json application/xhtml+xml application/rss+xml application/atom+xml application/x-font-ttf application/vnd.ms-fontobject image/svg+xml image/x-icon font/opentype;
brotli_static always;
最后重启/重载nginx使配置生效即可。
/etc/init.d/nginx restart
Brotli全部参数详解:
brotli on; #启用
brotli_comp_level 6; #压缩等级,默认6,最高11,太高的压缩水平可能需要更多的CPU
brotli_buffers 16 8k; #请求缓冲区的数量和大小
brotli_min_length 20; #指定压缩数据的最小长度,只有大于或等于最小长度才会对其压缩。这里指定20字节
brotli_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml text/html application/json image/svg application/font-woff application/vnd.ms-fontobject application/vnd.apple.mpegurl image/x-icon image/jpeg image/gif image/png image/bmp; #指定允许进行压缩类型
brotli_static always; #是否允许查找预处理好的、以.br结尾的压缩文件,可选值为on、off、always
brotli_window 512k; #窗口值,默认值为512k
打开Chrome开发者模式 Network,刷新网页,看到Content-Encoding: br
响应头表示成功
相关推荐
- ngx_waf:一款高大全的 Nginx 网站防火墙模块
- LNMP 编译安装 ngx_pagespeed 模块给网站提速!
- 如何彻底禁止百度等搜索引擎收录
- Nginx 查看并发连接数的两种方法
- 解决Nginx出现“Too many open files”的问题
- Nginx常用屏蔽规则,让网站更安全
文章作者:喵斯基部落
原文地址:https://www.moewah.com/archives/1863.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。非商业转载及引用请注明出处(作者、原文链接),商业转载请联系作者获得授权。