gzip
gzip是一种广泛使用的数据压缩算法。当客户端向 nginx 服务器请求资源时,若客户端支持gzip压缩(通过accept-encoding请求头表明),nginx 会对响应内容进行gzip压缩,然后将压缩后的数据发送给客户端。客户端接收到数据后,再进行解压缩。
优点:
兼容性好,几乎所有现代浏览器都支持gzip压缩。
配置简单,nginx 默认支持gzip模块,无需额外编译。
缺点:
压缩比相对 brotli 较低,在某些情况下,数据压缩后的大小不如 brotli。
http {
# 开启gzip压缩
gzip on;
# 最小压缩文件大小,小于该值的文件不进行压缩
gzip_min_length 1k;
# 压缩级别,取值1 - 9,值越大压缩比越高,但cpu消耗也越大,一般设置为6
gzip_comp_level 6;
# 允许压缩的文件类型
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml rss text/javascript;
# 为老的代理服务器添加vary头
gzip_vary on;
# 禁用对ie 6以下版本的压缩
gzip_disable "msie6";
server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
}
}
}
brotli
brotli 是 google 开发的一种新的压缩算法,它基于 lz77 算法的现代变体、霍夫曼编码和二阶上下文建模。与gzip相比,brotli 通常能提供更高的压缩比,从而进一步减少数据传输大小。
优点:
压缩比高,能显著减少数据传输大小,加快页面加载速度。
对于文本类文件(如 html、css、javascript)的压缩效果尤其明显。
缺点:
兼容性不如gzip,虽然大多数现代浏览器都支持 brotli,但仍有一小部分旧浏览器不支持。
需要额外安装ngx_brotli模块,配置相对复杂。
要在 nginx 中使用 brotli 压缩,需要安装ngx_brotli模块
http {
# 开启brotli压缩
brotli on;
# 压缩级别,取值0 - 11,值越大压缩比越高,但cpu消耗也越大,一般设置为6
brotli_comp_level 6;
# 允许压缩的文件类型
brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml rss text/javascript;
server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
}
}
}