当前位置: 代码网 > it编程>数据库>Mysql > Nginx 压缩(gzip、gunzip、gzip_static、send_file)的实现

Nginx 压缩(gzip、gunzip、gzip_static、send_file)的实现

2024年09月04日 Mysql 我要评论
本文主要讲解通过nginx请求压缩,来提高性能:gzip:nginx中常用的压缩方式;gzip_static:静态压缩,由于启用gzip压缩,sendfile就无法生效(也就是用户态、内核态切换)降低

本文主要讲解通过nginx请求压缩,来提高性能:

  • gzip:nginx中常用的压缩方式;
  • gzip_static:静态压缩,由于启用gzip压缩,sendfile就无法生效(也就是用户态、内核态切换)降低了性能,顾产生了gzip_static,需要我们提前把压缩好的资源文件上传至服务器。
  • gunzip:配合gzip_static使用,由于有些浏览器不支持gzip压缩,此时,如果我们使用了gzip_static,客户端就无法将压缩包解压,gunzip能动态识别客户端是否需要nginx解压缩,配合静态gzip,兼容性更高
  • send_file:避免了nginx中资源文件从用户态 - 内核态的切换,直接网络传输给客户端。

要想启用响应数据 gzip 压缩(ngx_http_gzip_module 模块)功能,需要用户浏览器也支持 gzip 解压功能,目前大多数浏览器都支持 gzip 压缩数据的显示。nginx 服务器接收客户端浏览器发送的请求后,通过请求头中的属性字段 accept-encoding 判断浏览器是否支持 gzip 压缩,对支持 gzip 压缩的浏览器将发送 gzip 压缩的响应数据。

ngx_http_gzip_module 模块的内置配置参数如下表所示。

指令作用域默认值指令值可选项指令说明
gziphttp、server、location、if in locationoffon 或 off启用 gzip 功能
gzip_buffershttp、server、location32 4k 或 16 8k--设置 gzip 压缩缓冲区
gzip_comp_levelhttp、server、location1--设置 gzip 压缩级别,取值范围为 1~9,该指令值越大,压缩程度越高
gzip_disablehttp、server、location----当请求头中的属性字段 user-agent 的内容与指令值正则匹配时关闭 gzip 压缩功能
gzip_http_versionhttp、server、location1.11.0 或 1.1设置压缩请求的最早 http 协议版本
gzip_min_lengthhttp、server、location20--设置启用 gzip 压缩的响应数据的最小长度,判断依据为响应头中 content-length 的值。如果 content-length 不存在,则该指令无效;如果指令值为 0,则表示全部压缩
gzip_proxiedhttp、server、locationoffoff 或 expired 或 no-cache 或 no-store 或 private 或 no_last_modified 或 no_etag 或 auth 或 any根据被代理服务器返回响应数据的响应头属性字段判断是否启用 gzip 压缩
gzip_typeshttp、server、locationtext/html--设置可进行 gzip 压缩的响应数据的 mime 类型,指令值为 * 时表示所有 mime 类型
gzip_varyhttp、server、locationoffon 或 off在响应头中添加 vary:accept-encoding,返回给前端代理或 cdn 服务器,用于判岗是否向客户端发送 gzip 的缓存副本,避免代理或 cdn 服务器将 gzip 压缩后的缓存副本响应给不具备 gzip 解压能力的浏览器

其中 gzip_proxied 指令的指令值可选项说明如下:

  • off:关闭该指令功能;
  • expired:若 http 响应头中包含属性字段 expires,则启用压缩;
  • no-cache:若 http 响应头中包含属性字段 cache-control:no-cache,则启用压缩;
  • no-store:若 http 响应头中包含属性字段 cache-control:no-store,则启用压缩;
  • private:若 http 响应头中包含属性字段 cache-control:private,则启用压缩;
  • no_last_modified:若 http 响应头中不包含属性字段 last-modified,则启用压缩;
  • no_etag:若 http 响应头中不包含属性字段 etag,则启用压缩;
  • auth:若 http 响应头中包含属性字段 authorization,则启用压缩;
  • any:对所有响应数据启用压缩。
  gzip on;
  gzip_buffers 16 8k;
  gzip_comp_level 6;
  gzip_http_version 1.1;
  gzip_min_length 256;
  gzip_proxied any;
  gzip_vary on;
  gzip_types text/plain application/x-javascript text/css application/xml;
  gzip_types
    text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
    text/javascript application/javascript application/x-javascript
    text/x-json application/json application/x-web-app-manifest+json
    text/css text/plain text/x-component
    font/opentype application/x-font-ttf application/vnd.ms-fontobject
    image/x-icon;
  gzip_disable "msie [1-6]\.(?!.*sv1)"; # 建议不要配置,正则影像性能,因为每个请求都会过压缩

当客户端浏览器不支持 gzip 压缩时,可以使用 ngx_http_gunzip_module 模块将压缩的数据解压后发送给客户端。对支持 gzip 压缩的浏览器不做处理。

ngx_http_gunzip_module 模块的内置配置指令如下表所示。

指令作用域默认值指令值可选项指令说明
gunziphttp、server、locationoff on 或  off 设置是否启用动态解压支持
gunzip_buffershttp、server、location32 4k--设置用于解压的缓冲区大小

通常 gzip 压缩指令都是读取未压缩的文本,在进行动态压缩后把响应数据发送给客户端,ngx_http_gzip_static_module 模块可以使 nginx 把 gzip 压缩过的以 .gz 为后缀的文件或已压缩的响应数据直接发送给客户端。

ngx_http_gzip_static_module 模块的内置配置指令如下表所示。

名称静态压缩指令
指令gzip_static
作用域http、server、location
默认值off
指令值可选项on 或 off 或 always
指令说明启用压缩数据读取功能

gzip_static 指令的指令值可选项说明如下:

  • on:不检查客户端是否支持 gzip 压缩数据,始终发送 gzip 压缩数据;
  • always:不检查客户端是否支持 gzip 压缩数据,始终发送 gzip 压缩数据;
  • 该指令的执行优先级高于 gzip 指令;
  • 开启该指令后,默认优先查找以 .gz 为后缀的文件;
  • gzip_types 指令对 gzip_static 的设置无效。

配置样例如下:

gzip_static always;                  # 始终发送静态的gzip压缩数据
gunzip on;                           # 若客户端浏览器不支持gzip压缩数据,则解压后发送
gunzip_buffers 16 8k;                                         # 解压缓冲区大小为128kb
gzip_proxied expired no-cache no-store private auth;    # 当被代理的服务器符合条件时,
                                                        # 对响应数据启用gzip压缩

gzip on;                             # 启用动态gzip压缩功能
gzip_min_length  1k;                 # 响应数据超过1kb时启用gzip压缩
gzip_buffers     4 16k;              # 动态压缩的缓冲区大小是64kb
gzip_comp_level 3;                   # 压缩级别为3
gzip_types       text/plain application/x-javascript
                text/css application/xml text/javascript
                application/x-httpd-php image/jpeg
                image/gif image/png; # 对指定的mime类型数据启用动态压缩
gzip_vary on;                        # 向前端代理或缓存服务器发送添加"vary: accept-
                                     # encoding"的响应数据

到此这篇关于nginx 压缩(gzip、gunzip、gzip_static、send_file)的实现的文章就介绍到这了,更多相关nginx 压缩内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

  • Mysql连接数的基本知识讲解

    基本知识连接总数(total connections)自mysql服务器启动以来,所有客户端建立的连接总次数,包括成功和失败的连接尝试活跃连接数(active connection…

    2024年09月04日 数据库
  • MySQL Prepared语句的具体使用

    在数据库应用中,很多sql语句都会重复执行很多次,每次执行可能只是where条件中的变量值不同,但mysql依然会解析sql语法并生成执行计划。对于这类情况,可以利用prepare…

    2024年09月04日 数据库
  • MySQL加减间隔时间函数DATE_ADD和DATE_SUB的实现

    MySQL加减间隔时间函数DATE_ADD和DATE_SUB的实现

    前言mysql中内置函数date_add 和 date_sub能对指定的时间进行增加或减少一个指定的时间间隔,返回的是一个日期。语法添加时间间隔date_add... [阅读全文]
  • MySQL虚拟列的具体使用

    MySQL虚拟列的具体使用

    在mysql中,虚拟列(也称为生成列)是一种特殊类型的表列,它不像普通列直接存储数据,而是根据其他列中的数据动态生成。虚拟列可以基于一个或多个其他列的值进行计算... [阅读全文]
  • mysql查询锁表的实现方法

    mysql查询锁表的实现方法

    今天在做数据更新的时候,发现表中数据量不大,但是更新语句执行很久都没成功,经过查询后发现是表锁死导致的,本文记录一下锁表解决步骤:1.查看表是否被锁(1)直接在... [阅读全文]
  • MySQL自连接与子查询方式

    MySQL自连接与子查询方式

    1. 自连接自连接是表自身与自身做笛卡尔积,在sql中进行条件查询,都是指定某一列或多个列之间进行关系运算,无法进行行与行之间的运算,在某些情况下需要对行与行之... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com