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

 更新时间:2024年09月04日 10:44:22   作者:老猫喜欢今日爬山  
在Web应用开发中,优化网站速度是一个非常重要的工作,本文主要介绍了Nginx 压缩(gzip、gunzip、gzip_static、send_file)的实现,感兴趣的可以了解一下

本文主要讲解通过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 压缩内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Nginx服务器中处理AJAX跨域请求的配置方法讲解

    Nginx服务器中处理AJAX跨域请求的配置方法讲解

    这篇文章主要介绍了Nginx服务器中处理AJAX跨域请求的配置方法讲解,包括Nginx作Apache的反向代理时的配置方法,需要的朋友可以参考下
    2016-01-01
  • nginx实现多geoserver服务的负载均衡的示例代码

    nginx实现多geoserver服务的负载均衡的示例代码

    本文主要介绍了nginx实现多geoserver服务的负载均衡的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • linux查找当前系统nginx路径的两种方法

    linux查找当前系统nginx路径的两种方法

    工作中有很多服务器, 它们上面装的 nginx 的路径也太不相当, 当我们拿到一个不熟悉的服务器时, 我们怎么知道, 当前运行的nginx的目录是哪一个呢,本文小编给大家介绍了两种linux查找当前系统nginx的路径的方法,需要的朋友可以参考下
    2023-11-11
  • 通过nginx实现访问服务器指定目录下图片资源

    通过nginx实现访问服务器指定目录下图片资源

    这篇文章为大家详细主要介绍了如何通过nginx实现访问服务器指定目录下图片资源,文中通过图文进行了详细的讲解,有需要的小伙伴可以了解下
    2023-10-10
  • nginx location中多个if里面proxy_pass的方法

    nginx location中多个if里面proxy_pass的方法

    这篇文章主要介绍了nginx location中多个if里面proxy_pass的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • nginx通过location配置代理的原理和实现方式

    nginx通过location配置代理的原理和实现方式

    这篇文章主要介绍了nginx通过location配置代理的原理和实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • 使用nginx+lua进行token鉴权的方法

    使用nginx+lua进行token鉴权的方法

    使用nginx和lua脚本实现对Minio服务器图片链接的token鉴权,通过反向代理隐藏真实IP,增强安全性,介绍了整个鉴权流程,包括nginx配置和lua脚本的具体实现,适用于需要保护图片不被未授权访问的场景
    2022-05-05
  • Nginx轻松搞定跨域问题完整过程

    Nginx轻松搞定跨域问题完整过程

    这篇文章主要给大家介绍了关于Nginx轻松搞定跨域问题的相关资料,大家在使用nginx进行服务器管理,经常会遇到跨域问题,文中将解决方法介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • 解读Nginx和Apache的特点与区别

    解读Nginx和Apache的特点与区别

    这篇文章主要介绍了解读Nginx和Apache的特点与区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Nginx服务启动和停止实现

    Nginx服务启动和停止实现

    使用Nginx的过程中,我们可能总是需要修改nginx配置文件,然后不停地启动或者停止nginx服务,本文就来介绍一下,感兴趣的可以了解一下
    2023-11-11

最新评论