linux,  nginx

Nginx开启Gzip压缩

Gzip是什么

GZip 是一种可以作用于任何字节流的通用压缩程序。它会在后台记忆一些之前看到的内容,并尝试以高效方式查找并替换重复的数据片段,从而达到较好的压效果

适合 GZip 压缩的资源类型

实际上,gzip 主要用于对文本类型的资源进行压缩,例如常用见的文本资源:

  • HTML 文件:text/html(nginx 服务器默认就会压缩)、application/xhtml+xml
  • CSS 文件:text/css
  • JS 文件:application/x-javascript、application/javascript、text/javascript
  • JSON 文件(或者API请求结果):application/json、application/geo+json、application/ld+json application/manifest+json、application/x-web-app-manifest+json
  • XML 文件:application/xml、application/atom+xml、application/rdf+xml、application/rss+xml
  • SVG 文件:image/svg+xml;

除了常用的文本文件,gzip 也支持压缩以下 MIME 类型的文件:

  • application/vnd.ms-fontobject
  • application/wasm
  • font/eot
  • font/otf
  • font/ttf
  • image/bmp
  • text/cache-manifest
  • text/calendar
  • text/markdown
  • text/plain
  • text/vcard
  • text/vnd.rim.location.xloc
  • text/vtt
  • text/x-component
  • text/x-cross-domain-policy

GZip 对基于文本的内容的资源压缩效果最好,在压缩较大文件时往往可实现高达 70-90% 的压缩率,而如果对已经通过替代算法压缩过的资源(例如,大多数图片格式)运行 gzip,则效果甚微,甚至毫无效果。

nginx开启gzip压缩

vim /etc/nginx/nginx.conf
#  gzip 可以在 http, server, location 中和配置,这里配置到 http 下是全局配置,
#  只要是使用当前 nginx 服务器的站点都会开启 gzip
http {
  gzip on;
  gzip_comp_level 5;
  gzip_min_length 1k;
  gzip_http_version 1.1;
  #gzip_buffers 4 16k;
  gzip_proxied any;
  gzip_vary on;
  gzip_types
    application/javascript 
    application/json 
    application/xml 
    application/x-javascript 
    application/x-font-opentype 
    application/x-font-truetype 
    application/x-font-ttf 
    application/x-web-app-manifest+json
    application/vnd.ms-fontobject 
    application/xhtml+xml
    application/atom+xml
    application/rdf+xml
    application/rss+xml
    application/geo+json
    application/ld+json
    application/manifest+json
    text/javascript 
    text/plain 
    text/xml 
    text/css 
    font/eot 
    font/opentype 
    font/otf 
    image/svg+xml 
    image/vnd.microsoft.icon 
    image/x-icon 
    image/png 
    image/jpeg 
    image/gif 
    image/webp;
  gzip_static on;  
  gzip_disable "MSIE [1-6]\.";  
}

不知到这些配置都代表什么意思?现在来逐一解释每项配置的意思:

  • gzip on;:开启 gzip,Default: off
  • gzip_comp_level 5;:压缩级别: 1-9。5 是推荐的压缩级别,Default: 1
  • gzip_min_length 1k;:gzip 压缩文件体积的最小值。如果文件已经足够小了,就不需要压缩了,因为即便压缩了,效果也不明显,而且会占用 CPU 资源。Default: 20
  • gzip_http_version 1.1;: 设置压缩响应所需的请求的最低 HTTP 版本。默认http 1.1。
  • gzip_buffers 4 16k;:设置用于压缩响应的 number 和 size 的缓冲区。默认情况下,缓冲区大小等于一个内存页。根据平台的不同,它也可以是4K或8K。建议不设置。
  • gzip_proxied any;:是否开启对代理资源的压缩。很多时候,nginx 会作为反向代理服务器,实际的静态资源在后端服务器上,只有开启了 gzip_proxied 才会对代理的资源进行压缩。Default: off
  • gzip_vary on;:每当客户端的 Accept-Encoding-capabilities 头发生变化时,告诉代理缓存 gzip 和常规版本的资源。避免了不支持 gzip 的客户端(这在今天极为罕见)在代理给它们 gzip 版本时显示乱码的问题。如果指令gzip, gzip_static 或 gunzip 处于活动状态, 则启用或禁用插入“ Vary:Accept-Encoding”响应标头字段。Default: off
  • gzip_types:压缩文件的 MIME 类型。`text/html` 默认就会开启 gzip 压缩,所以不用特别显示配置 `text/html` 的 MIME 类型。Default: text/html
  • gzip_static on;:服务器开启对静态文件( CSS, JS, HTML, SVG, ICS, and JSON)的压缩。但是,要使此部分与之相关,需要在 gzip_types 设置 MIME 类型,,仅仅设置 gzip_static 为 on 是不会自动压缩静态文件的。
  • gzip_disable “MSIE [1-6]\.”;:IE6 以下的浏览器禁用 gzip 压缩。

保存配置并退出编辑器,然后重启nginx

systemctl restart nginx

验证 GZip 压缩配置是否生效

  • nginx的response headers中的Content-Encoding是gzip
  • 返回文件大小明显被压缩

留言

您的电子邮箱地址不会被公开。 必填项已用 * 标注