Jenkins 发表于 2022-6-4 15:17:19

nginx 静态资源优化配置方法

静态资源优化常用配置策略
下面提供几个常用的静态资源优化的配置指令,以供实战参考
    sendfile on;
    tcp_nopush on;
    tcp_nodeplay on;
    gzip on;

sendfile on;
tcp_nopush on;
tcp_nodelay on;

一、sendfile 指令
用来开启高效的文件传输模式


一个正常的请求静态资源的过程大概是这样的:
    客户端通过网络接口向服务端发送请求;
    操作系统将客户端请求传递给服务器端应用程序;
    服务器端应用程序处理这些请求,请求处理完成后,操作系统还要将处理得到的结果通过网络适配器传递回去;

二、tcp_nopush 指令
该指令必须在sendfile打开状态下才生效,用来提升网络包的传输’效率;


以上三个指令的配置,其背后的优化主要由nginx服务内核本身帮我们完成,从效果上来看,需要在大规模的实际业务场景中才能体现,所以通常只需要开启即可,下面来重点聊聊第四个指令,gzip 的使用,这个指令的使用,可以直接看到效果;

四、gzip 指令
在nginx配置文件中,可通过配置gzip来对静态资源进行压缩,相关指令可配置在http块、server块和location块中,nginx可以通过如下模块进行指令的解析和处理
    ngx_http_gzip_module模块
    ngx_http_gzip_static_module模块
    ngx_http_gunzip_module模块

Gzip模块配置指令
    通常配置的gzip相关指令都在ngx_http_gzip_module模块中,该模块会在nginx安装的时候内置到nginx安装环境中,也就是说我们可以直接使用这些指令

1、gzip指令
    该指令用于开启或者关闭gzip功能


注意:只有该指令为打开状态,下面的指令才有效果
http {
        gzip on;
}

接下来看一个实际案例,在nginx默认的html目录下,我们提前放置一个比较大的html文件,接近3MB;


启动nginx服务,在浏览器中正常访问下,打开F12可以发现,在对nginx不做任何配置的情况下,从请求发出到响应,传输的文件大小为正常的文件大小;

2、gzip_types指令
    该指令可根据响应页的MIME类型选择性地开启Gzip压缩功能


所选择的值可以从mime.types文件中进行查找,也可以使用"*"代表所有,但在实际生产中,不建议直接配置成这样,否则将会耗费大量的CPU资源用于压缩所有类型的静态文件,比如像图片类文件,压缩反而更耗费资源,可以选择一些常规的静态资源配置即可

3、gzip_comp_level 指令
    该指令用于设置Gzip压缩程度,级别从1-9,1表示要是程度最低,要是效率最高,9刚好相反,压缩程度最高,但是效率最低最费时间;


http{
        gzipon;
    gzip_types application/javascript text/html text/css application/json;
    gzip_comp_level 6;
}
上述案例中,我们并未做该配置的设置,一个2.8MB左右的文件最终压缩到1.8MB,如果将gzip_comp_level 设置为6,再次观察效果如何

这时,文件压缩到1.7MB,在上面的基础上提升了0.1MB,如果继续增大到9如何,效果并不明显,这也再次印证了上面的说法,压缩到一定程度后,效果提升不再显著


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


默认情况下,response headers中是没有这个参数的

如果开启之后,再次访问,这时候就出现在response headers中

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


其中number:指定Nginx服务器向系统申请缓存空间个数,size指的是每个缓存空间的大小。主要实现的是申请number个每个大小为size的内存空间。这个值的设定一般会和服务器的操作系统有关,所以建议此项不设置,使用默认值即可。
在开启了gzip指令之后,通过浏览器实际展示效果,可以看到nginx服务对传输的原始文件进行了压缩,事实上,背后是有一套复杂的压缩算法在里面的,具体来说,其中比较关键的一点就是,压缩的时候需要一个缓存空间用于存放文件,那么就是在gzip_buffers 这个指令的配置上;

6、gzip_disable 指令
    针对不同种类客户端发起的请求,可以选择性开启和关闭Gzip功能


regex:
    根据客户端的浏览器标志(user-agent)来设置,支持使用正则表达式。指定的浏览器标志不使用Gzip.该指令一般是用来排除一些明显不支持Gzip的浏览器
如:
gzip_disable "MSIE \.";

7、gzip_http_version 指令
    针对不同的HTTP协议版本,可以选择性地开启和关闭Gzip功能


该指令是指定使用Gzip的HTTP最低版本,该指令一般采用默认值即可

8、gzip_min_length 指令
    该指令针对传输数据的大小,可以选择性地开启和关闭Gzip功能


说明
    nignx计量大小的单位:bytes[字节] / kb[千字节] / M[兆]
    例如: 1024 / 10k|K / 10m|M
gzip压缩功能对大数据压缩效果明显,但如果要压缩的数据比较小,可能出现越压缩数据越大的情况,因此需要根据响应内容的大小来决定是否使用Gzip功能,响应页面的大小可以通过头信息中的Content-Length来获取。但是如果使用了Chunk编码动态压缩,该指令将被忽略。建议设置为1K或以上。

9、gzip_proxied指令
    该指令设置是否对服务端返回的结果进行Gzip压缩


关于上述指令的一个完整的配置
gzip on; #开启gzip功能
gzip_types *; #压缩源文件类型,根据具体的访问资源类型 设定
gzip_comp_level 6; #gzip压缩级别
gzip_min_length 1024; #进行压缩响应页面的最小长度,content- length
gzip_buffers 4 16K; #缓存空间大小
gzip_http_version 1.1; #指定压缩响应所需要的最低HTTP请求版本
gzip_vary on; #往头信息中添加压缩标识
gzip_disable "MSIE \."; #对IE6以下的版本都不进行压缩
gzip_proxied off; #nginx作为反向代理压缩服务端返回数据的条 件
以上的配置可以结合自身的实际业务情况进行配置,比较推荐的做法是,单独加一个配置文件,比如叫做 gzip.conf的文件,然后通过include的方式引入到nginx.conf的主配置文件下即可;

页: [1]
查看完整版本: nginx 静态资源优化配置方法