学习Nginx(九):提升网站速度之gzip压缩

​​​​​​​介绍

Nginx的gzip压缩功能可以显著提升网站的速度,主要原理是通过默认集成的 ngx_http_gzip_module 模块拦截请求,并在服务器端对传输的内容(如CSS、JS、XML、HTML等静态资源)进行gzip压缩。当用户请求这些资源时,Nginx服务器会发送压缩后的数据,浏览器在接收到数据后进行解压并解析,从而减小了传输文件的大小,减少了传输时间,提高了网站的响应速度。

需要注意的是,gzip压缩响应内容可以减少传输的数据量,由于压缩和解压缩都需要计算资源,会增加服务器的CPU使用率。因此需要在权衡传输速度和服务器负载之间做出选择。

指令配置

官方说明

http://nginx.org/en/docs/http/ngx_http_gzip_module.html

  • gzip
    • 描述:开启或关闭gzip压缩功能。
# 语法
gzip on | off;
# 示例
gzip off;
  • gzip_buffers
    • 描述:设置 gzip 缓存空间大小。其中 number 指定Nginx服务器需要向系统申请缓存空间的个数,size 指定每个缓存空间的大小。默认为 number*size=128。
# 语法
gzip_buffers [number] [size];
# 示例
gzip_buffers 32 4k | 16 8k;
  • gzip_comp_level
    • 描述:设置gzip压缩程度。级别为1到9,1表示压缩程度最低,效率最高;9表示压缩程度最高,效率最低。
# 语法
gzip_comp_level [level];
# 示例
gzip_comp_level 1;
  • gzip_disable
    • 描述:可以通过正则匹配UA来禁止某些浏览器或者某些特定请求不进行gzip压缩。
# 语法
gzip_disable [regex] ...;
  • gzip_http_version
    • 描述:设置识别HTTP协议版本,目前大部分浏览器已经支持GZIP解压。
# 语法
gzip_http_version 1.0 | 1.1;
# 示例
gzip_http_version 1.1;
  • gzip_min_length
    • 描述:设置启用gzip压缩的最小响应长度(以字节为单位)。当响应长度小于这个值时,不会对其进行gzip压缩。
# 语法
gzip_min_length [length];
# 示例
gzip_min_length 20;
  • gzip_proxied
    • 描述:设置是否对从代理服务器接收到的响应进行gzip压缩。可以取一个或多个参数值(以空格分隔),以匹配HTTP响应头中的字段或特定条件,支持的参数值及其含义:
      • off:不对任何代理请求进行 Gzip 压缩。
      • expired:如果响应头中包含 "Expires" 字段,并且其值表明响应已经过期,则进行压缩。
      • no-cache:如果响应头中包含 "Cache-Control: no-cache" 字段,则进行压缩。
      • no-store:如果响应头中包含 "Cache-Control: no-store" 字段,则进行压缩。
      • private:如果响应头中包含 "Cache-Control: private" 字段,则进行压缩。
      • no_last_modified:如果响应头中没有 "Last-Modified" 字段,则进行压缩。
      • no_etag:如果响应头中没有 "ETag" 字段,则进行压缩。
      • auth:如果响应头中包含 "Authorization" 字段,则进行压缩。这通常用于需要身份验证的响应。
      • any:对任何代理请求都进行 Gzip 压缩。
# 语法
gzip_proxied off | expired | no-cache | no-store | private | no-last-modified | no_etag | auth | any ...;
# 示例
gzip_proxied off;
  • gzip_types
    • 描述:指定需要压缩的MIME类型,前提是gzip处于启用状态。常见支持的MIME类型:
      • text/html:HTML 文档
      • text/css:CSS 样式表
      • text/plain:纯文本文件
      • text/xml:XML 文档
      • application/javascript:JavaScript 文件
      • application/x-javascript:早期使用的 JavaScript MIME 类型
      • application/json:JSON 数据
      • application/rss+xml:RSS 订阅源
      • application/atom+xml:Atom 订阅源
      • application/xml:通用的 XML 文件
      • application/xhtml+xml:XHTML 文档
      • text/javascript:JavaScript 文件的另一种 MIME 类型
      • font/woff:WOFF 字体文件
      • font/woff2:WOFF2 字体文件
      • image/svg+xml:SVG 图像文件(尽管 SVG 本身可能已压缩,但 gzip 可以进一步减少文件大小)
# 语法
gzip_types [mime-type] ...;
# 示例
gzip_types text/html;
  • gzip_vary
    • 描述:开启或关闭前端缓存服务器缓存经过gzip压缩的页面,例如用Squid缓存经过Nginx压缩的数据。
# 语法
gzip_vary on | off;
# 示例
gzip_vary off;

配置

http {  
    # 启用gzip压缩
    gzip on;
    # 设置缓存区数量和大小:32个4k
    gzip_buffers 32 4k;
    # 设置压缩级别为6
    gzip_comp_level 6;
    # 指定HTTP/1.1版本
    gzip_http_version 1.1;
    # 指定对纯文本文件、CSS样式表和JSON数据类型的响应进行压缩
    gzip_types text/plain text/css application/json;
    # 启用vary:Accept-Enconding响应头
    gzip_vary on;  
    ...  
}

补充gzip_static

官方说明:

http://nginx.org/en/docs/http/ngx_http_gzip_static_module.html

在 Nginx 中,ngx_http_gzip_static_module 是一个可选的模块,用于服务预先压缩的静态文件(如 .gz 结尾的文件)。当客户端请求一个文件时,如果服务器上有该文件的 gzip 压缩版本(即 .gz 结尾的文件),Nginx 会优先发送这个压缩版本,而不是实时压缩原始文件并发送。

这个模块的主要优点是提高了性能,因为实时压缩可能会消耗大量的 CPU 资源,而预先压缩的文件可以直接从磁盘读取并发送给客户端,无需额外的 CPU 开销。

要使用 ngx_http_gzip_static_module,需要确保在编译 Nginx 时包含了该模块。这通常可以通过在配置编译参数时添加 --with-http_gzip_static_module 来实现。

一旦模块被包含并启用,可以在 Nginx 配置中使用相关的指令来配置它。然而,ngx_http_gzip_static_module 本身并没有提供专门的配置指令,它更多地是一个底层的机制,用于支持静态 gzip 文件的直接服务。

通常,需要配置 Nginx 以检查原始文件和相应的 gzip 文件都存在,并优先发送 gzip 文件。可以通过在 location 块中使用 try_files 指令来实现,如下所示:

  • gzip相关配置参数可以在 http、server、location 上下文中使用
  • 编写Nginx的配置文件(nginx.conf):
location / {
    try_files $uri $uri.gz;
    gzip_static on;
    ...
}

在上面的配置中,try_files 指令会首先尝试服务 $uri(即请求的原始文件),如果找不到,则尝试服务 $uri.gz(即 gzip 压缩的文件)。gzip_static on; 指令告诉 Nginx 如果找到了 gzip 文件,就使用它,而不是尝试实时压缩原始文件。

来自: 学习Nginx(九):提升网站速度之gzip压缩icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=Mzk0NTQ3OTk3MQ==&mid=2247488264&idx=1&sn=c38a7ccba8cadb2b453947042a263973&chksm=c3159b44f462125216e2da9db913b0c8d8eef7c770fbfd11bc0d8ec2f870e29d67735f80b5d2&token=355315523&lang=zh_CN#rd

  • 39
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux技术宅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值