# Nginx教程 - 6 gzip压缩配置

什么是gzip压缩?

在Nginx中,gzip 压缩是一种优化网站性能的技术。配置 gzip 压缩后,Nginx服务器在将内容发送给客户端之前,先将内容进行压缩。客户端(如浏览器)在接收到压缩后的内容后,会对其进行解压缩并显示。

gzip压缩有什么好处?

通过配置 gzip 压缩,可以减少带宽的使用,减少服务器到客户端传输的数据量,客户端可以提高页面加载的速度,提升用户体验。二服务器可以更快的处理请求,从而减轻服务器的负载,提高服务的响应速度和吞吐量。

但是也需要注意,虽然 gzip 压缩可以提高性能,但也会增加服务器的CPU负担(因为需要进行压缩操作)。因此,在配置gzip压缩时,需要权衡性能和资源使用之间的平衡。

# 6.1 开启gzip压缩

哪个站点需要开启 gzip 压缩,将如下内容配置到其对应的 server 模块下面即可:

server {
    # ...其他配置
  
    # 开启gzip压缩
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_min_length 1k;  # 文件大于1k才压缩
    gzip_comp_level 6;  # 压缩级别,1-9,数字越大压缩率越高但消耗的CPU资源越多
    gzip_vary on;  # 在响应头中添加Vary: Accept-Encoding,允许客户端缓存不同版本的内容
    gzip_disable "MSIE [1-7]\.";  # 禁用对IE 1到7版本的gzip压缩,存在兼容性问题
  
    # ...其他配置
}
1
2
3
4
5
6
7
8
9
10
11
12
13
  • gzip on:启用gzip压缩。

  • gzip_types:指定哪些MIME类型的响应使用gzip压缩,可以根据需要进行添加或删除。图片、音频、视频不建议开启压缩,因为它们本身就已经压缩过,再次使用gzip压缩,不会明显减少文件大小,反而浪费CPU资源,文本格式压缩效果显著。

  • gzip_min_length:指定只有大于该大小的响应体才进行压缩,以字节为单位。

  • gzip_comp_level:指定gzip压缩级别,范围是1到9,数字越大压缩率越高,但同时会消耗更多的CPU资源。一般设置为5或6是一个折衷选择。

  • gzip_vary:在响应头中添加Vary: Accept-Encoding,通知缓存代理服务器根据请求的Accept-Encoding头进行缓存,确保缓存的内容是正确的。

  • gzip_disable:这个指令用于禁用gzip压缩,MSIE是Microsoft Internet Explorer的缩写,[1-6]表示版本范围,\.表示小数点,主要目的是为了避免旧版本Internet Explorer在处理gzip压缩内容时出现兼容性问题。

# 6.2 浏览器查看压缩

我在站点下面放了一个 js 文件,然后通过 Nginx 请求这个文件,在浏览器中使用开发者工具可以查看到请求的情况。

可以看到开启了 gzip 压缩后,文件压缩前和压缩后的大小。如下图: