1. Nginx gzip功能

 Nginx实现资源压缩的原理是通过ngx_http_gzip_module模块拦截请求, 并对需要做gzip的类型做gzip, ngx_http_gzip_module是Nginx默认集成的.


 2. 参数配置

1. 开启压缩.

参数写法 Syntax: gzip on | off;
Default :↓
gzip off;
应用作用域 Context: http, server, location, if in location

 

2. 配置需要压缩的MIME-TYPE.

Syntax: gzip_types mime-type ...;
Default:↓
gzip_types text/html;
Context: http, server, location

 

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

Syntax: gzip_http_version 1.0 | 1.1;
Default:↓
gzip_http_version 1.1;
Context: http, server, location

 

4. 配置返回内容大于此值时才会使用gzip进行压缩, 以K为单位,当值为0时, 所有文件都进行压缩.

Syntax: gzip_min_length length;
Default:↓
gzip_min_length 20;
Context: http, server, location

假如使用了proxy_pass进行反向代理, 那么nginx和后端的upstream server之间默认是用HTTP/1.0协议通信

假如Cache Server也是nginx, 而前端的nginx没有开启gzip, 同时后端的nginx上没有设置gzip_http_version为1.0, 那么gzip将不生效

 

5. Nginx做为反向代理时, 启用以下配置.

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

参数明细如下:

  • 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 – 无条件压缩所有结果数据

 

6. 配置不使用gzip压缩的User Agent头.

Syntax: gzip_disable regex ...;
Default: ————————
Context: http, server, location

This directive appeared in version 0.6.23.

 

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

Syntax: gzip_comp_level level;
Default:↓
gzip_comp_level 1;
Context: http, server, location
  • 随着压缩级别的升高, 压缩比有所提高, 但到了级别6后, 很难再提高;
  • 随着压缩级别的升高, 处理时间明显变慢;
  • gzip很消耗cpu的性能, 高并发情况下cpu达到100%;

因此:

  • 不是压缩级别越高越好, 其实gzip_comp_level 1的压缩能力已经够用了, 后面级别越高, 压缩的比例其实增长不大, 反而很吃处理性能;
  • 压缩一定要和静态资源缓存相结合, 缓存压缩后的版本, 否则每次都压缩高负载下服务器肯定吃不住;

 

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

Syntax: gzip_buffers number size;
Default:↓
gzip_buffers 32 4k|16 8k;
Context: http, server, location

 

未完待续......