千家信息网

Nginx开启Gzip详解

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,最近生产上发生了一些问题,原先所有的静态资源文件都是经过gzip压缩的,然而这几天突然都没有压缩了,经过一顿排查,发现是Nginx的配置有问题,借此机会详细了解了Nginx的Gzip配置。1. Ngi
千家信息网最后更新 2026年11月02日Nginx开启Gzip详解

最近生产上发生了一些问题,原先所有的静态资源文件都是经过gzip压缩的,然而这几天突然都没有压缩了,经过一顿排查,发现是Nginx的配置有问题,借此机会详细了解了Nginx的Gzip配置。


  • 1. Nginx开启Gzip
    • 1.1 配置说明
    • 1.2 参数详解
      • gzip on
      • gzip_buffers
      • gzip_comp_level
      • gzip_disable
      • gzip_min_length
      • gzip_http_version
      • gzip_proxied
      • gzip_types
      • gzip_vary


1. Nginx开启Gzip

Nginx实现资源压缩的原理是通过ngx_http_gzip_module模块拦截请求,并对需要做gzip的类型做gzip,ngx_http_gzip_module是Nginx默认集成的,不需要重新编译,直接开启即可。

1.1 配置说明

Nginx开启Gzip的配置如下:

# $gzip_ratio计算请求的压缩率,$body_bytes_sent请求体大小 log_format  main  '$remote_addr - $remote_user [$time_local] "$host" - "$request" '                    '$gzip_ratio - $body_bytes_sent - $request_time';    access_log  logs/access.log main; # 开启gzip gzip off; # 启用gzip压缩的最小文件,小于设置值的文件将不会压缩 gzip_min_length 1k; # gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明 gzip_comp_level 1; # 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml; # 是否在http header中添加Vary: Accept-Encoding,建议开启 gzip_vary on; # 禁用IE 6 gzip gzip_disable "MSIE [1-6]\."; # 设置压缩所需要的缓冲区大小  gzip_buffers 32 4k; # 设置gzip压缩针对的HTTP协议版本 gzip_http_version 1.0;                
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

下面将逐条介绍下gzip的指令和参数配置。

1.2 参数详解

gzip on

这个没的说,打开或关闭gzip

Syntax: gzip on | off; Default:    gzip off;Context:    http, server, location, if in location                 
  • 1
  • 2
  • 3
  • 4
  • 5

gzip_buffers

设置用于处理请求压缩的缓冲区数量和大小。比如32 4K表示按照内存页(one memory page)大小以4K为单位(即一个系统中内存页为4K),申请32倍的内存空间。建议此项不设置,使用默认值。

Syntax: gzip_buffers number size; Default:    gzip_buffers 32 4k|16 8k; Context:    http, server, location                
  • 1
  • 2
  • 3
  • 4

gzip_comp_level

设置gzip压缩级别,级别越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大

Syntax: gzip_comp_level level; Default:    gzip_comp_level 1; Context:    http, server, location                 
  • 1
  • 2
  • 3
  • 4
  • 5

我们以一个大小为92.6K的脚本文件为例,如下所示。其中最后三个数值分别表示压缩比、包大小、平均处理时间(使用ab压测,100用户并发下,//10.27.180.75/jquery.js gzip_comp_level 0: 0,94840, 63 [ms], 29% gzip_comp_level 1: 2.43,39005, 248 [ms], 100% gzip_comp_level 2: 2.51,37743, 273 [ms], 100% gzip_comp_level 3; 2.57,36849, 327 [ms], 100% gzip_comp_level 4; 2.73,34807, 370 [ms], 100% gzip_comp_level 5; 2.80,33898, 491 [ms], 100% gzip_comp_level 6; 2.82,33686, 604 [ms], 100% gzip_comp_level 7; 2.82,33626, 659 [ms], 100% gzip_comp_level 8; 2.82,33626, 698 [ms], 100% gzip_comp_level 9; 2.82,33626, 698 [ms], 100%

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

gzip_disable

通过表达式,表明哪些UA头不使用gzip压缩

Syntax: gzip_disable regex ...;Default:    -Context:    http, server, locationThis directive appeared in version 0.6.23.                
  • 1
  • 2
  • 3
  • 4

gzip_min_length

当返回内容大于此值时才会使用gzip进行压缩,以K为单位,当值为0时,所有页面都进行压缩。

Syntax: gzip_min_length length; Default:    gzip_min_length 20; Context:    http, server, location                
  • 1
  • 2
  • 3
  • 4

gzip_http_version

用于识别http协议的版本,早期的浏览器不支持gzip压缩,用户会看到乱码,所以为了支持前期版本加了此选项。默认在http/1.0的协议下不开启gzip压缩。

Syntax: gzip_http_version 1.0 | 1.1; Default:    gzip_http_version 1.1; Context:    http, server, location                
  • 1
  • 2
  • 3
  • 4

我看网上的很多文章中,对这一点都觉得过时了,因为浏览器基本上都支持HTTP/1.1。然而这里面却存在着一个很容易掉入的坑,也是笔者从生产环境中一个诡异问题中发现的:
为什么这样呢?
我相信,以后还有人会入坑,比如你用Apache ab做压测,如果不是设置gzip_http_version为1.0,你也压不出gzip的效果(同样的道理)。希望写在这里对大家有帮助

gzip_proxied

Nginx做为反向代理的时候启用:

  • off - 关闭所有的代理结果数据压缩
  • expired - 如果header中包含"Expires"头信息,启用压缩
  • no-cache - 如果header中包含"Cache-Control:no-cache"头信息,启用压缩
  • no-store - 如果header中包含"Cache-Control:no-store"头信息,启用压缩
  • private - 如果header中包含"Cache-Control:private"头信息,启用压缩
  • no_last_modified - 启用压缩,如果header中包含"Last_Modified"头信息,启用压缩
  • no_etag - 启用压缩,如果header中包含"ETag"头信息,启用压缩
  • auth - 启用压缩,如果header中包含"Authorization"头信息,启用压缩
  • any - 无条件压缩所有结果数据
Syntax: gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;Default:    gzip_proxied off;Context:    http, server, location                
  • 1
  • 2
  • 3
  • 4

gzip_types

设置需要压缩的MIME类型,如果不在设置类型范围内的请求不进行压缩

Syntax: gzip_types mime-type ...;Default:    gzip_types text/html;Context:    http, server, location                
  • 1
  • 2
  • 3
  • 4

这里需要说明一些特殊的类型,比如笔者公司会使用"字体类型"的资源,而这些资源类型往往会被忽略,且这些资源又比较大,没有被压缩很不合算。(可以参考:http://www.darrenfang.com/2015/01/setting-up-http-cache-and-gzip-with-nginx/):

字体类型扩展名Content-type.eotapplication/vnd.ms-fontobject.ttffont/ttf.otffont/opentype.wofffont/x-woff.svgimage/svg+xml

gzip_vary

增加响应头"Vary: Accept-Encoding"

Syntax: gzip_vary on | off; Default:    gzip_vary off;Context:    http, server, location                 
  • 1
  • 2
  • 3
  • 4
  • 5
文件 类型 信息 中包 大小 配置 资源 内存 参数 版本 级别 问题 支持 单位 字体 建议 数据 时间 浏览器 用户 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网高科技 互联网科技活动banner 腾讯阿里互联网科技 远信互联网科技 壹账通互联网科技 广州善班互联网科技 中国互联网金融科技基金 联恩商钥互联网科技有限公司 山东吉时兔互联网科技有限公司 互联网科技寓意 晓花互联网科技有限公司网址 健康食品互联网创新科技园项目 浙南科技城互联网大厦建设工程 为客找房互联网科技公司怎么样 科技互联网海报 厦门江牛科技互联网 西安有哪些互联网高科技企业 悟空问答互联网科技 好易买互联网科技 恒生科技互联网指数十大成分股 互联网科技开发公司 互联网金融 科技金融 中国互联网十大科技股排名 华夏恒生互联网科技013171 佛山市翊博互联网络科技有限公司 为客找房互联网科技公司怎么样 小米互联网科技园入驻 城市宝互联网科技有限公司 互联网科技平台产品运营 互联网科技创新方面的资料
0