Your Heart's A Bird Without The Wings To Fly
Nginx 3 :静态资源压缩实战
Nginx 3 :静态资源压缩实战

Nginx 3 :静态资源压缩实战

在Nginx的配置文件中可以通过配置gzip来对静态资源进行压缩,相关的指令可以配置在http块、server块和location块中

ngx_http_gzip_module
ngx_http_gzip_static_module
ngx_http_gunzip_module

Gzip模块配置指令

(1) gzip指令:用于开启或关闭gzip功能

语法gzip on|off;
默认值gzip off;
位置http、server、location

注意,只有该指令为打开状态,下面的指令才有效果

http {
gzip on;
}

(2) gzip_types指令:该指令可以根据相应页的MIME类型选择性的开启gzip压缩功能

语法gzip_types mime-type…;
默认值gzip_types text/html;
位置http、server、location

至于什么类型要进行压缩可以查看表头

http{
gzip_types application/javascript
}

(3) gzip_comp_level指令:用于设置压缩等级,级别从1-9

1表示程度最低;

要是效率最高,9刚好相反,压缩程度高,但效率最低最费时间

语法gzip_comp_level level;
默认值gzip_comp_level 1;
位置http、server、location
http{
gzip_comp_level 6;
}

(4) gzip_vary指令:用于设置使用进行压缩发送是是否携带“Vary:Accept-Ecoding”头域的响应头部。是否告诉接收方,所发送的数据经过了gzip压缩处理

语法gzip_vary on|off;
默认值gzip_vary off;
位置http、server、location

(5) gzip_buffers指令:用于处理请求压缩的缓冲区数量和大小

语法gzip_buffers number size;
默认值gzip_buffers 32 4k | 16 8k;
位置http、server、location

number:指Nginx服务器向系统申请缓存空间个数

size: 指每个缓存空间的大小

这个值的设定一般会和服务器的操作系统有关,所以建议不设置,使用默认值

(6) gzip_disable指令:针对不同种类客户端的请求,可以选择性的开启和关闭gzip功能

语法gzip_disbale regex…;
默认值
位置http、server、location

根据客户端的浏览器标志(user-agent)来设置,支持正则表达式。指定的浏览器标志不使用gzip,该指令一般用来排除一些明显不支持gzip的浏览器。

http{
gzip_disable "MSIE [1-6]\.";
}

(7) gzip_http-version指令:针对不同的HTTP协议版本,可以选择性的开启关闭gzip关闭

语法gzip_http_version 1.0 |1.1…;
默认值gzip_http_version 1.1;
位置http、server、location

该指令指定一般采用默认值即可

(8) gzip_min_length指令:该指令针对传输数据的大小,可以选择性的开启和关闭gzip功能

语法gzip_min_length length;
默认值gzip_min_length 20;
位置http、server、location

可以理解成:满20才会进行压缩

一般设置在1000

(9) gzip_proxied指令:用于设置是否对服务端饭返回的结果进行gzip压缩

Gzip压缩功能的实例配置

gzip on;                    #开启gzip
gzip_types *; #压缩文件类型,根据具体资源类型设定
gzip_comp_level 6; #gzip压缩级别
gzip_min_length 1025; #进行压缩的最小长度
gzip_buffers 4 16k; #缓存空间大小
gzip_http_version 1.1; #指定压缩响应所需的最低HTTP版本要求
gzip_vary on; #往头信息添加压缩标识
gzip_disable "MSIE [1-6]\.";#对IE6以下版本的不进行压缩
gzip_proxied off; #nginx作为反向代理压缩服务端返回数据的条件

这些配置在很多地方用的到,所以我们可以将这些内容放在一个配置文件中,然后通过include指令把配置文件再次加载到nginx.conf配置文件中。

vim /usr/local/nginx/conf/nginx_gzip.conf

Gzip压缩和sendfile共存的问题

开启sendfile后,可以减少copy的次数,可以不经过用户将静态文件发送出去。

但gzip要想压缩,就必须经过用户

如果解决两个设置的共存问题?

可以使用ngx_http_gzip_static_module模块的gzip_static指令来解决

gzip_static指令:检查与访问资源同名的.gz文件时,response中以gzip相关的header返回.gz文件的内容

可以识别.gz后缀的文件

http{
gzip_static on;
}

添加模块到Nginx的实现步骤

1.查询当Nginx配置参数

nginx -V

2.备份二进制文件

cd /usr/local/nginx/sbin
mv nginx nginxold

3.进入Nginx安装目录

cd /root/nginx/nginx-1.8.1

4.清空编译内容

make clean

5.使用configure配置参数

./configure --with-http_gzip_static_module

6.make进行编译

make

7.将objs目录下的nginx二进制文件移动到nginx安装目录下的sbin

mv objs/nginx    /usr/local/nginx/sbin

8.执行更新命令

make upgrade

Leave a Reply

Your email address will not be published. Required fields are marked *