Nginx性能优化(4)

作者: 大鱼炖海棠 | 来源:发表于2019-06-05 22:16 被阅读47次

一、gzip压缩

1. gzip简介

gzip是nginx服务器的ngx_http_gzip_module模块提供的在线实时数据压缩功能。通过开启gzip功能,可对服务器响应的数据进行压缩处理,变成体积更小的二进制文件。在高PV的网站应用中,可以节省海量的带宽。

如下图所示,客户端浏览器发出的请求头中声明了支持gzip类型的压缩文件,若服务器端开启了gzip压缩功能,那么响应数据会经过压缩后再返回客户端,由客户端负责解压缩再渲染:


http请求头声明支持的压缩类型

2. gzip配置

gzip配置常用参数:

gzip on | off;    # 是否开启gzip
gzip_buffers 32 4K | 16 8K    # 缓冲(压缩数据缓冲在内存中,当达到N块内存,每块MK时,输出缓存)
gzip_comp_level [1-9]    # 压缩级别,级别越高,压缩比越大,越消耗CPU资源,推荐6
gzip_disable    # 指定不进行gzip压缩的uri
gzip_min_length 200    # 压缩文件长度超过200的文件
gzip_http_version 1.0 | 1.1    # 指定进行压缩的最小http协议版本
gzip_proxied    # 如果请求者是代理服务器,该如何缓存
gzip_types text/plain application/xml    # 指定要压缩的文件的类型
gzip_vary on | off    # 是否传输gzip压缩标志

在开启gzip压缩前,先观察下我们访问的页面响应的数据长度:


gzip开启前传输的数据长度

接下来开启gzip:

[root@localhost conf]# vim nginx.conf
# 在http上下文中添加gzip配置
gzip  on;
gzip_buffers 32 4K;
gzip_comp_level 6;
gzip_min_length 200;
gzip_types text/xml text/css application/javascript image/jpeg;
# 保存配置退出,重启nginx服务
[root@localhost conf]# ../sbin/nginx -s reload

开启gzip后,传输的数据长度只有原先的1/10大小。


gzip开启后传输的数据长度

3. 注意事项

  • 一般情况下,不建议对图片、mp3等二进制文件配置压缩,因为二进制文件的压缩率比较小,但耗费的cpu资源却很高
  • 不对太小的文件进行压缩

二、expires缓存

对于服务器上的一些资源,特别是静态资源,一旦发布再被改动的可能性很小,与其每次访问都从服务器端拉取,不如第一次访问后将这些资源保存在客户端本地,在资源有效期内再次访问时,可以直接从本地获取资源。大流量的网站应用中,该策略可以有效的节省巨大的带宽资源。nginx的expires缓存配置即可达到上述目的:

# expires配置位置:在location或if段里添加配置。
# 格式:
expires 30s       # 过期时间30秒
expires 30m      # 过期时间30分钟
expires 2h         # 过期时间2小时
expires 30d       # 过期时间30天

expires需要在服务端配置,expires添加的是该资源过期的日期,浏览器会根据该过期日期与客户端时间对比,如果过期时间还没到,则会去缓存中读取该资源,如果已经到期了,则浏览器判断为该资源已经不新鲜要重新从服务端获取。通过这种方式,可以实现直接从浏览器缓存中读取,而不需要去服务端判断是否已经缓存,避免了这次http请求。值得注意的是expires时间可能存在客户端时间跟服务端时间不一致的问题。所以,建议expires结合Cache-Control一起使用,大型网站中一起使用的情况比较多见。

expires配置效果验证:在/usr/local/nginx/html/static/image/目录下存放测试资源,在nginx.conf文件中添加location配置,设置资源的过期时间在15天后:

location ~ \.(gif|jpg|jpeg)$ {
    root   /usr/local/nginx/html/static/image/;
    index  index.html;
    expires 15d;
}

从前台发起请求:http://192.168.18.129:2345/langlangmarry.jpg

Expires & Last-Modified

上图可见http响应头中携带了资源过期时间和最后一次修改时间:

Expires: Wed, 26 Jun 2019 13:58:48 GMT
Last-Modified: Sun, 02 Jun 2019 10:53:26 GMT

该请求的响应码是:Status Code: 304 Not Modified。
304响应原理:服务器响应文件内容的同时,响应etag标签,即内容的签名和last-modified 两个标签值,浏览器下次去请求时,头信息携带这两个标签,服务器检测文件有无发生变化,如无,直接头信息返回etag和last-modified,告诉客户端资源未变更,直接调用本地缓存即可。
该过程也发出了请求,但是传输的内容极少,适用于变化周期很长的,如静态html,js ,css等资源。

关于expires和last-modified的详细解说,参考这篇文章:https://www.jb51.net/article/33214.htm

相关文章

  • NGINX优化

    Nginx性能优化实践 1.性能优化概述 2.系统性能优化 3.代理服务优化 4.静态资源优化 4.1 静态资源缓...

  • Nginx性能优化(4)

    一、gzip压缩 1. gzip简介 gzip是nginx服务器的ngx_http_gzip_module模块提供...

  • Nginx-性能优化-ab压力测试工具

    章节目录 nginx 性能优化的点 当前系统性能的评估 ab 压力测试工具使用 1.nginx 性能优化的点 当前...

  • 后端技术栈

    Nginx 工作原理和优化、漏洞(下) Nginx 工作原理和优化、漏洞(下)Mysql查询性能优化的心得 前言:...

  • Nginx性能优化

    性能优化概述 基于Nginx性能优化,那么在性能优化这一章,我们将分为如下几方面做介绍 再做性能优化工作前,需要重...

  • Nginx性能优化

    1.性能优化概述 基于Nginx性能优化,我们将分为如下⼏个⽅⾯来做介绍1.⾸先我们需要了解性能优化要考虑哪些⽅⾯...

  • Nginx 性能优化实践

    Nginx 性能优化实践 Nginx 的系统结构 Nginx 包含一个单一的 master 进程和多个 worke...

  • Nginx的编译安装

    一、Nginx的特点 1、Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 。它支持内核 ...

  • nginx性能优化

    Nginx 的系统结构 1、Nginx运行工作进程数量 2、Nginx运行CPU亲和力 3、Nginx最大打开文件...

  • nginx性能优化

    1.性能优化方面如下: 1.当前系统结构瓶颈 观察指标、压力测试 2.了解业务模式 接口业务类型、系统层次化结构 ...

网友评论

    本文标题:Nginx性能优化(4)

    本文链接:https://www.haomeiwen.com/subject/ivfexctx.html