本文于2017年2月中旬完成,发布在个人博客网站上。

考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。


Google开源Brotli压缩算法

Brotli是一种全新的数据格式,可以提供比Zopfli高20-26%的压缩比。

caniuse网站查询当前主流浏览器对brotli算法的支持程度,结果页面Brotli Accept-Encoding/Content-Encoding。很不幸,IE11并不支持该算法,与之相反,Chrome从49开始支持brotli算法。

安装

下载源码

ngx_brotli下载ngx_brotli的代码。ngx_brotli编译时依赖brotli,但注意不能直接从brotli下载代码,否则编译时可能会出错。如果是手工下载代码,建议从ngx_brotli代码路径deps目录下,点击brotli的代码标签,然后取该标签的代码。

编译

./configure --prefix=/home/jackie/software/nginx \
--with-openssl=/home/jackie/Downloads/nginx/openssl-1.0.2k \
--with-pcre=/home/jackie/Downloads/nginx/pcre-8.38 \
--with-zlib=/home/jackie/Downloads/nginx/zlib-1.2.8 \
--with-http_ssl_module \
--with-http_v2_module \
--with-threads \
--with-debug \
--add-module=/home/jackie/Downloads/nginx/ngx_brotli-master
make install

配置说明

指令介绍

ngx_brotli定义了如下指令:

  • brotli,是否允许动态压缩响应数据,可选值为onoff,默认值为off。样例如下:

      brotli on;
  • brotli_types,动态压缩启用时,允许压缩的MIME types,默认值为text/html。样例如下:

      brotli_types text/plain text/css text/xml application/xml application/json text/javascript application/javascript application/x-javascript;
  • brotli_static,是否允许查找预处理好的、以.br结尾的压缩文件,可选值为onoffalways,默认值为off。样例如下:

      brotli_static off;
  • brotli_comp_level,压缩级别,可选值范围为0~11,默认值为6。样例如下:

      brotli_comp_level 11;
  • brotli_buffers,压缩响应数据时使用的缓冲区的数量和大小。样例如下:

      brotli_buffers 16 8k;
  • brotli_window,brotli使用的窗口值,默认值为512k。样例如下:

      brotli_window 512k;
  • brotli_min_length,响应数据的最小长度,低于该值将不使用brotli算法执行压缩操作。brotli算法使用Content-Length来确定响应数据的长度。样例如下:

      brotli_min_length 20;

完整样例

http {
...
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_buffers 128 32k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml application/xml application/json text/javascript application/javascript application/x-javascript; brotli on;
brotli_types text/plain text/css text/xml application/xml application/json text/javascript application/javascript application/x-javascript;
brotli_static off;
brotli_comp_level 11;
brotli_buffers 16 8k;
brotli_window 512k;
brotli_min_length 20;
...
}

经过实地验证,brotli和gzip可以共存。这是一个好消息,意味着Jackie可以在项目中使用启用brotli算法支持的nginx。

对于支持brotli算法的浏览器,比如Chrome 49之后的版本,使用开发者工具检查网络通信时,可以看到如下的HTTP响应头。

Content-Encoding: br

参考资料

性能测试

nginx集成brotli压缩算法的更多相关文章

  1. 烂泥:php5.6源码安装及php-fpm配置与nginx集成

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. LNMP环境的搭建中,现在只有php没有源码安装过.这篇文章就把这个介绍下. 注意本篇文章使用的centos 6.5 64bit. 登陆centos下载 ...

  2. 启用 Brotli 压缩算法,对比 Gzip 压缩 CDN 流量再减少 20%

    Google 认为互联网用户的时间是宝贵的,他们的时间不应该消耗在漫长的网页加载中,因此在 2015 年 9 月 Google 推出了无损压缩算法 Brotli.Brotli 通过变种的 LZ77 算 ...

  3. Nginx 开启支持谷歌Brotli压缩算法

    参考链接:https://cloud.tencent.com/developer/article/1501009

  4. 烂泥:KVM、kickstart与nginx集成

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 前几篇文章介绍了FTP.NFS与KVM.kickstart集成的案例,从这篇文章开始,我们来介绍HTTP方式与KVM.kickstart集成. HTTP ...

  5. windows下Nacos集群搭建与nginx集成

    前言: nacos集群至少需要三个(一般为奇数个)nacos实 例,其前面顶nginx,外界入口从nginx入 一.windows下Nacos集群搭建 将Nacos的解压包复制分成3份,分别是: na ...

  6. Identity Server 4 从入门到落地(十二)—— 使用Nginx集成认证服务

    前面的部分: Identity Server 4 从入门到落地(一)-- 从IdentityServer4.Admin开始 Identity Server 4 从入门到落地(二)-- 理解授权码模式 ...

  7. 使用docker+consul+nginx集成分布式的服务发现与注册架构

    一.环境说明: 1.一台虚拟机,该系统已经装好了docker: ip 192.168.10.224 虚拟网卡,与主机互通 操作系统rhel6 内核 2.6.32  64位 docker版本 1.7.1 ...

  8. JBOSS EAP实战(2)-集群、NGINX集成、队列与安全

    JBOSS HTTP的Thread Group概念 JBOSS是一个企业级的J2EE APP Container,因此它和任何一种成熟的企业级中间件一样具有Thread Group的概念.所谓Thre ...

  9. linux 安装nginx 集成emq

    1:下载nginx-1.12.2.tar.gz http://nginx.org/en/download.html 2:解压 tar -zxvf  nginx-1.12.2.tar.gz 3:进行co ...

  10. Nginx集成Naxsi防火墙

    前言 因工作原因,接触到了WAF,今天部署了一下Naxsi,记录一下 GitHub 正文 环境 Centos 7 下载 更新yum yum update -y 安装必要依赖 yum install g ...

随机推荐

  1. 06、etcd 写请求执行流程

    本篇内容主要来源于自己学习的视频,如有侵权,请联系删除,谢谢. 上一节我们学习了 etcd 读请求执行流程,这一节,我们来学习 etcd 写请求执行流程. 1.etcd写请求概览 etcd 一个写请求 ...

  2. JAVA 考试管理系统 大作业(一):需求分析

    好家伙,有需要的拿去借鉴吧(虽然我也百度了很多) 题目如下: 题目四:考试管理系统 (选做要求:使用图形用户界面) 分3种用户角色:教务员(具有管理权限).教师.学生 l  教务员:可以进行用户管理( ...

  3. CentOS系统下,配制nginx代理

    1.安装: yum install nginx 2.证书文件位置: a. 创建https证书文件夹:/etc/nginx/ssl b. 上传两个证书文件到/etc/nginx/ssl 3.在/etc/ ...

  4. 【Azure App Service】误删除App Service资源,怎么办?

    问题描述 操作不当,误删除了App Service的资源,怎么办? 问题解答 根据Azure 官方文档,可以使用 Powershell 命令恢复到原始 App Service 应用名称. 操作步骤 第 ...

  5. 【Azure 事件中心】Spring Cloud Stream Event Hubs Binder 发送Event Hub消息遇见 Spec. Rule 1.3 - onSubscribe, onNext, onError and onComplete signaled to a Subscriber MUST be signaled serially 异常

    问题描述 开发Java Spring Cloud应用,需要发送消息到Azure Event Hub中.使用 Spring Cloud Stream Event Hubs Binder 依赖,应用执行一 ...

  6. 【Azure Redis 缓存 Azure Cache For Redis】Redis支持的版本及不同版本迁移风险

    问题描述 1. Azure Redis缓存支持的版本包括4.0以及6.0(预览) 这种情形下,可以使用PaaS服务提供的 Azure Redis 缓存(4.0版本).Azure Redis对6.0的支 ...

  7. 答对这 9 题你就超越了 83.3% 的图数据库 NebulaGraph 用户

    熟悉 NebulaGraph 社区的小伙伴可能都知道一个技能认证叫做:NGCP,全称 NebulaGraph Certified Professional.用户在考试认证期间在 1 个小时内回答 10 ...

  8. Java 异常处理(1) : try-catch- finally中finally的使用

    1 package com.bytezero.throwable; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 impor ...

  9. nginx 代理 sftp转发流量

    首先需要nginx安装有 stream模块,使用 nginx -V 查看下是否有 --with-stream,没有使用命令: yum -y install nginx-all-modules.noar ...

  10. 排查 dotNET Core 程序内存暴涨的问题

    0. 问题 新版本上线之后,发现内存猛涨,入站流量猛增,不清楚具体原因,部分接口提示 OOM 异常,随后 Pod 直接崩溃无限重启. 1. 准备 Pod 已经接入了 NewRelic 和 Graylo ...