站点在上线前,代码会做压缩,图片也会做压缩。而对于文本文档,在服务端发送数据之前进行压缩也很重要。GZip 压缩就是其中的一种压缩方式。
GZip 压缩
以下字段的写入配置段可以为:http
server
location
gzip on; gzip_vary on; gzip_min_length 1000; gzip_buffers 16 10k; gzip_comp_level 3; gzip_proxied any; gzip_types text/html; gzip_http_version 1.0; gzip_disable "msie6";
其中:
gzip
值为 on/off,表示开启或关闭 GZip 压缩。
gzip_vary
输出 Vary 响应头,在 response header 中添加 Vary:Accept-Encoding
这一项,用于解决某些缓存服务的可能的毛病。
gzip_min_length
指定压缩数据的最小长度,只有大于或等于最小长度才会对其压缩。默认值是 20 字节。
gzip_buffers
指定 GZip 压缩的 buffer 区的数量和大小。
gzip_comp_level
压缩等级,可选值为 1~9。太高的压缩水平也会需要更多的 CPU 时间,建议指定 1~3 中的一级即可。
gzip_types
指定允许压缩的文件类型。本文中以 html 格式为例。更多文件格式,请参考 Nginx 的默认配置文件 mime.types
。
gzip_http_version
默认 Nginx 只对 HTTP/1.1 及以上的请求才会启用 GZip,因为早期的 HTTP/1.0 客户端的 GZip 有缺陷。现在已不用担心此问题,设置这项的值为 1.0 来启用对 HTTP/1.0 的 GZip 压缩。
gzip_disable
写入一个正则字符串,当 request header 中的 UserAgent 字段匹配这条正则时,response 不会启用 GZip 压缩。可用于解决在启用 GZip 压缩后某些浏览器的不兼容问题。指定值为 msie6
表示对 MicroSoft IE 4~6 浏览器不启用压缩。
GZip 压缩的增强插件
Nginx 默认就能提供上述功能,下面介绍两个 GZip 压缩的增强插件:
- http_gzip_static_module
- http_gunzip_module
若要启用上述插件,需要在编译 Nginx 时,加入相应模块:
./configure ... --with-http_gzip_static_module --with-http_gunzip_module
http_gzip_static_module
# 配置段: http, server, location # 值: on, off, always gzip_static ${value};
这个模块可以让 Nginx 发送一个已经压缩好的 .gz 文件,而不是发送普通文件。
在 gzip_static 的值设为 on 后,Nginx 会先判断客户端是否支持 .gz 文件,如果支持就发送 .gz 文件,不支持就发送普通文件。通过发送压缩过的文件来节省传输时间。
也可以将 gzip_static 的值设为 always,这时 Nginx 总是发送 .gz 文件(如果 .gz 文件存在的话),而不会检查客户端是否支持 .gz 文件。
http_gunzip_module
# 配置段: http, server, location # 值: on, off gunzip ${value};
这个模块让 Nginx 发送一个经解压的文件给那些不支持 gzip 的客户端,并且经常与 ngx_http_gzip_static_module 搭配使用(令 gzip_static = always)。
http_gzip_static_module 发送一个已经压缩好的文件,而 http_gunzip_module 可以解压文件以让 Nginx 发送给不支持压缩的客户端。
转载请注明:逗比根据地 » Nginx 启用 GZip 压缩