1. 前言
在 Nginx 中与网页压缩相关的模块有两个: 一个是 HttpGzipModule, 另一个是 HttpGzipStaticModule. 前者用于启用在文件传输过程中使用 gzip 压缩, 而后者的作用是将一个文件以压缩的方式传递到一个支持压缩功能的客户端之前, 首先检查是否已经存在相应的以 '.gz' 结尾的文件名格式, 这样可以避免重复压缩而造成资源浪费.
因此, 对于 Nginx 的网页压缩传输在 Nginx 中的配置将其分为两种模式: 一种是动态的, 实时压缩输出 (边压缩, 边输出), 而另一种则是静态的, 找到同名文件的 .gz 格式文件就输出.
2. HttpGzipModule
HttpGzipModule 用于在文件传输过程中启用 gzip 压缩, 压缩率通过变量 $gzip 来设定.
2.1 示例
2.2 指令
指令名称: gzip
语法: gzip on | off
默认值: gzip off
使用环境: http,server,location
功能: 启动或禁止 gzip 压缩功能.
指令名称: gzip_buffers
语法: gzip_buffer number size
默认值: gzip_buffers 4 4k/8k
使用环境: http,server,location
功能: 该指令用于指定存放被压缩响应的缓冲的数量和大小. 如果没有设置大小, 那么一个缓冲的大小等于一个页码的大小, 具体页码的大小依赖于所在的系统平台, 不是 4KB 就是 8KB.
获取系统内存页码大小的方法很简单:
- [root@10.0.10.158 ~]#getconf PAGE_SIZE
- 4096
指令名称: gzip_comp_level
语法: gzip_comp_level 1...9
默认值: gzip_comp_level 1
使用环境: http,server,location
功能: 该指令用于设定压缩级别, 可以设定的级别从 1 - 9,1 是最小的压缩率, 也是最快的, 占用 CPU 资源最少; 而 9 是压缩率最高的, 也是最慢的, 占用 CPU 资源最大.
指令名称: gzip_disable
语法: gzip_disable regex
使用环境: http,server,location
功能: 可以通过该指令对一些特定的用户代理不使用压缩功能, 就可以使用正则表达式, 但这需要 PCRE 的支持. 该指令从 0.6.23 以后才开始提供. 从 Nginx 0.7.63 版本后, 可以使用 "msie6" 来禁止对 IE5.5 和 IE 6 的压缩.
指令名称: gzip_http_version
语法: gzip_http_version 1.0 | 1.1
默认值: gzip_http_version 1.1
使用环境: http,server,location
功能: 该指令用于决定对指定的 HTTP 请求协议版本进行压缩或者不压缩, 其依赖于客户端的 HTTP 请求版本.
指令名称: gzip_min_length
语法: gzip_min_length length
默认值: gzip_min_length 0
使用环境: http,server,location
功能: 该指令用于设置响应体的最小长度, 单位为字节. 如果响应体的长度低于指定的值, 那么就不使用压缩. 长度的决定从'Content-Length' 头获取.
指令名称: gzip_proxied
语法: gzip_proxied [ off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ]
默认值: gzip_proxied off
使用环境: http,server,location
功能: 该指令用于设置启用或禁止从代理服务器上收到的响应体 Gzip 压缩功能.
指令名称: gzip_types
语法: gzip_types mime-type [ mime-type... ]
默认值: gzip_types text/html;
使用环境: http, server, location
功能: 该指令用于设定除了默认的 text/HTML MIME 类型外, 对其他的那些 MIME 类型也启用压缩功能.
指令名称: gzip_vary
语法: gzip_vary on | off
默认值: gzip_vary off
使用环境: http,server,location
功能: 该指令用于设定是否向响应数据包添加 Vary: Accept-Encoding HTTP 头 (header).
gzip 指令部分
gzip 指令是挺多的, 一般常用的如下:
- gzip on; # ¿ªÆôѹËõ
- gzip_disable "msie6"; # IE ½ûֹѹËõ
- gzip_proxied any; # ÈκÎÎļþ¶¼Ñ¹Ëõ
- gzip_comp_level 4; # ѹËõµÈ¼¶
- gzip_vary on; # ͨ¹ý¿Í»§¶ËÅжÏѹËõ
- gzip_min_length 1k; # ѹËõµÄ*îСÈÝÁ¿
- # ѹËõ¸ñʽ£¬¸ù¾ÝÐèÇóµ÷Õû
- gzip_types text/plain text/CSS application/JSON application/x-JavaScript text/xml application/xml application/xml+rss text/JavaScript;
gzip 常用指令
2.3 测试
生成一个较大的页面
浏览器直接访问
查看有没有开启 gzip 压缩功能
curl -I -H "Accept-Encoding: gzip,deflate" http://10.0.10.158/hello.html
3. HttpGzipStaticModule
gzip_static 生效的前提是 nginx 开启了 gzip_static 压缩并且请求目录下存在名称相同且以 .gz 结尾的文件.
使用 gzip_static 压缩的话要先准备好压缩后的 gz 文件, 并且服务器会消耗更多的空间来存储压缩文件和原文件, 这个有利有弊要自己衡量.
3.1 指令
gzip_static
语法: gzip_static on | off
默认值: gzip_static off
使用环境: http,server,location
功能: 用于启用 HttpGzipStaticModule
3.2 测试
通过访问, 系统会去读页面文件, 文件的最新访问时间会被修改. 所以通过文件的访问时间可以确定是哪个文件被访问了.
接下来, 通过浏览器访问:
再次查看 hello.HTML* 最新访问时间:
来源: http://www.bubuko.com/infodetail-2981664.html