Nginx 开启 Gzip 压缩

nginx 是一款高性能的 Web 服务器,而 gzip 压缩功能可以将传输的数据进行压缩,节省带宽加快页面访问速度。相对的根据压缩等级不同,对服务器 CPU 的压力也会有所不同。

nginx 的 gzip 压缩默认是关闭的,只会对 text/html 进行压缩,下面就来看看怎么为 nginx 开启 Gzip 压缩。

至于 nginx 配置文件位置以及修改在这里就不再赘述,重点是看 gzip 的参数配置。

Gzip 参数的详细说明:

VariableParameterExampleDetails
gzipon/offgzip on;是否开启 Gzip 模块
gzip_buffersint int(k)gzip_buffer 4 8k;设置 Gzip 申请内存的大小,其作用是按照块大小的倍数来申请内存空间。
gzip_comp_level1-9gzip_com_level 6;设置 Gzip 压缩等级,等级越低,压缩速度越快,文件压缩比越小;反之速度越慢,文件压缩比越大。
gzip_desableregex …“MSIE [1-6].“;根据 “User-Agent” 头来关闭 Gzip,可用正则表达式。
gzip_min_lengthintgzip_min_length 1k;当返回内容大于此值是才开启 Gzip 进行压缩,以 k 为单位,当值设置为 0 时,所有页面都进行压缩。
gzip_http_version1.0/1.1gzip_http+version 1.0;用于识别 http 协议的版本,早期的浏览器不支持 Gzip 压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项,如果你用了 Nginx 的反向代理并期望也启用 Gzip 压缩的话,由于末端通信是 http/1.0,故请设置为 1.0。
gzip_proxiedoff/expired / no-cache / no-store / private / no_last_modified / no_etag / auth / anygzip_proxied no-cache;详细说明见下表:gzip_proxied。
gzip_typesmime-typegzip_type text/html;设置需要压缩的 MIME 类型,不设置则不进行压缩。
gzip_varyon / offgzip_vary on;加上 http 头信息Vary: Accept-Encoding给后端代理服务器识别是否启用 Gzip 压缩。

注:以上所有变量都可以在 http {}, server {}, location {} 中使用,是否全局开启起决于你的生产环境。

gzip_proxied 参数详细说明:

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

可以用以下命令判断服务器 Nginx 是否开启 Gzip 压缩:

curl -IL -H "Accept-Encoding: gzip, deflate" "域名"

如果包含下列字符串(第7行)则表示 Gzip 压缩开启成功:

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 25 Apr 2014 16:23:54 GMT
Content-Type: text/html
Last-Modified: Wed, 25 Apr 2014 10:16:21 GMT
Connection: keep-alive
Content-Encoding: gzip # 表示内容已压缩

参考:http://nginx.org/en/docs/http/ngx_http_gzip_module.html

有关其他模块的详细说明:http://wiki.nginx.org/Modules