微信扫一扫 分享朋友圈

已有 1303 人浏览分享

开启左侧

nginx 静态资源优化配置方法

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

sendfile on;
tcp_nopush on;
tcp_nodelay on;

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

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

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

image.png
以上三个指令的配置,其背后的优化主要由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功能

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

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

image.png
启动nginx服务,在浏览器中正常访问下,打开F12可以发现,在对nginx不做任何配置的情况下,从请求发出到响应,传输的文件大小为正常的文件大小;
image.png
2、gzip_types指令
    该指令可根据响应页的MIME类型选择性地开启Gzip压缩功能

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

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

  1. http{
  2.         gzip  on;
  3.     gzip_types application/javascript text/html text/css application/json;
  4.     gzip_comp_level 6;
  5. }
复制代码
上述案例中,我们并未做该配置的设置,一个2.8MB左右的文件最终压缩到1.8MB,如果将gzip_comp_level 设置为6,再次观察效果如何
image.png
这时,文件压缩到1.7MB,在上面的基础上提升了0.1MB,如果继续增大到9如何,效果并不明显,这也再次印证了上面的说法,压缩到一定程度后,效果提升不再显著
image.png

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

image.png
默认情况下,response headers中是没有这个参数的
image.png
如果开启之后,再次访问,这时候就出现在response headers中
image.png
5、gzip_buffers 指令
    该指令用于处理请求压缩的缓冲区数量和大小

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

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

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

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

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

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

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

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

image.png
关于上述指令的一个完整的配置
  1. gzip on; #开启gzip功能
  2. gzip_types *; #压缩源文件类型,根据具体的访问资源类型 设定
  3. gzip_comp_level 6; #gzip压缩级别
  4. gzip_min_length 1024; #进行压缩响应页面的最小长度,content- length
  5. gzip_buffers 4 16K; #缓存空间大小
  6. gzip_http_version 1.1; #指定压缩响应所需要的最低HTTP请求版本
  7. gzip_vary on; #往头信息中添加压缩标识
  8. gzip_disable "MSIE [1-6]\."; #对IE6以下的版本都不进行压缩
  9. gzip_proxied off; #nginx作为反向代理压缩服务端返回数据的条 件
复制代码
以上的配置可以结合自身的实际业务情况进行配置,比较推荐的做法是,单独加一个配置文件,比如叫做 gzip.conf的文件,然后通过include的方式引入到nginx.conf的主配置文件下即可;
image.png
免责声明:
1,海欣资源网所发布的资源由网友上传和分享,不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
2,海欣资源网的资源来源于网友分享,仅限用于学习交流和测试研究目的,不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
3,海欣资源网所发布的资源由网友上传和分享,版权争议与本站无关,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。
4,如果您喜欢,请支持正版,购买正版,得到更好的正版服务,如有侵权,请联系我们删除并予以真诚的道歉,联系方式邮箱 haixinst@qq.com
海欣资源-企业信息化分享平台。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

0

粉丝

26

主题
热度排行
回复排行
最新贴子

Archiver|手机版|海欣资源 ( 湘ICP备2021008090号-1 )|网站地图

GMT+8, 2024-7-25 23:11 , Gzip On, MemCached On.

免责声明:本站所发布的资源和文章均来自网络,仅限用于学习交流和测试研究目的,不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 本站信息来自网络,版权争议与本站无关,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 如果您喜欢,请支持正版,购买正版,得到更好的正版服务,如有侵权,请联系我们删除并予以真诚的道歉。