提升网站速度:如何有效启用 Gzip 与 Brotli 压缩

在优化网站性能时,选择合适的资源压缩技术至关重要。GzipBrotli 是两种领先的压缩算法,能够显著减小网站资源的大小,从而提升加载速度、优化用户体验,并提高 SEO 排名

Gzip 以其广泛的兼容性而著称,适用于大多数浏览器和服务器。其快速的压缩和解压缩速度使得它在网站优化中广受欢迎。而 Brotli 在压缩率和效率上表现更为出色,特别是在处理文本资源时,能够进一步减少文件大小,提升加载速度。

结合使用这两种技术,可以有效改善网页的传输效率,为用户提供更流畅的浏览体验。启用 Gzip 和 Brotli 压缩,不仅能够加快页面加载速度,还能提升搜索引擎排名,最终实现更高的用户满意度和转化率。

通过合理配置这两种压缩技术,网站将具备更好的性能表现,吸引更多用户访问,并在激烈的竞争中脱颖而出。

(一)参数说明

1、Gzip

实时压缩 http_gzip_module
静态压缩文件传输 http_gzip_static_module

gzip_static always;
/*  启用 Gzip 静态压缩文件传输
  - 当请求到达服务器时,优先寻找与资源文件相同路径的 .gz 预压缩文件。
  - "always" 表示在所有情况下都使用预先压缩的 .gz 文件,即使客户端不支持 gzip 压缩。
  - 作用:减少服务器资源开销,避免实时压缩,提高传输效率。通常和 `ngx_http_gunzip_module` 配合使用,以应对没有未压缩原文件的情况。*/

gzip on;
/*  启用 Gzip 实时压缩
  - 当没有预压缩的 .gz 文件时,启用实时压缩。
  - 作用:减小响应体积,缩短客户端的下载时间,加快页面加载速度。 */

gzip_buffers 4 16k;
/*  配置 Gzip 缓冲区
  - "4 16k" 表示使用 4 个 16KB 大小的缓冲区来存储压缩的数据。
  - 作用:为数据压缩提供足够的内存缓冲区,尤其在处理大文件时,避免服务器性能问题。具体大小依赖于服务器的内存配置。*/

gzip_min_length 0k;
/*  设置最小压缩数据大小
  - "0k" 表示不论响应体积大小,所有响应内容都将进行压缩。
  - 作用:允许对任何长度的响应进行压缩,适合需要传输大量小文件的站点(例如API)。通常建议将此值设为20以上,以避免对非常小的文件进行压缩带来的额外开销。*/

gzip_comp_level 4;
/*  设置压缩级别
  - "4" 为压缩级别,范围从 1(最低压缩)到 9(最高压缩)。
  - 作用:提供较高的压缩比,兼顾服务器性能。级别越高,CPU 消耗越多,响应速度可能降低;级别越低,压缩效果变差,但性能开销小。
  - 推荐值 "4" 适合大多数网站。*/

gzip_types text/plain text/css text/xml text/javascript application/javascript application/x-javascript application/xml application/xml+rss application/ecmascript application/json image/svg+xml;
/*  指定需要压缩的 MIME 类型
  - 这些类型包括纯文本、CSS、JavaScript、XML 等类型文件。
  - 作用:针对指定的 MIME 类型启用 Gzip 压缩,优化静态资源的传输效率。默认 text/html 类型总是会被压缩,无需在此指定。*/
/*  可通过HTTP头字段Content-Type,获取该资源的媒体类型,也可以参考HTTP Content-type对照表。 */

gzip_disable "MSIE [1-6].(?!.*SV1)";
/* 禁用 Gzip 压缩对于特定浏览器
  - 该正则表达式匹配 Internet Explorer 6 及以下版本,并禁用它们的 Gzip 压缩支持。
  - 作用:解决老旧浏览器(如 IE6)对 Gzip 压缩支持不佳,可能导致无法正确显示内容的问题。*/

gzip_vary on;
/*  添加 Vary: Accept-Encoding 响应头
  - 作用:通过添加 `Vary: Accept-Encoding` 头信息,告知代理服务器基于客户端的 Accept-Encoding 请求头选择适当的缓存内容。
  - 这个配置允许代理服务器缓存压缩和非压缩的内容,从而避免不支持 gzip 的客户端获取错误的缓存版本。*/

gzip_http_version 1.0;
/*  设置最小支持的 HTTP 版本
  - "1.0" 表示允许对 HTTP/1.0 及以上版本的请求进行 Gzip 压缩。
  - 作用:确保对旧版 HTTP/1.0 协议的客户端或代理服务器也能使用 Gzip 压缩功能。某些老旧的代理和 CDN 只支持 HTTP/1.0,因此此配置可提高兼容性。*/
/* 设置1.0可解决CDN或代理只支持HTTP/1.0的问题。 */

gzip_proxied expired no-cache no-store private auth;
/* 控制代理服务器是否启用 Gzip 压缩
  - 参数解释:
(1)off:对所有代理请求头,禁用压缩;
(2)expired:当响应头中包含过期时间时,启用压缩;
(3)no-cache:当响应头的Cache-Control字段包含no-cache时,启用压缩;
(4)no-store:当响应头的Cache-Control字段包含no-store时,启用压缩;
(5)private:当响应头的Cache-Control字段包含private时,启用压缩;
(6)no_last_modified:当响应头不包含Last-Modified字段时,启用压缩;
(7)no_etag:当响应头不包含ETag字段时,启用压缩;
(8)auth:当请求头包含Authorization字段时,启用压缩;
(9)any:对所有代理请求头,启用压缩。
  - 作用:根据请求头和响应头的不同条件,对代理服务器的响应进行 gzip 压缩优化,以提高代理缓存的效率。可以灵活控制压缩策略,确保压缩适用于需要的情境。*/




2、Brotli

ngx_brotli

brotli_static always;
/* 启用 Brotli 静态压缩文件传输
   - 在所有情况下都使用预压缩文件 (.br 扩展名),无需检查客户端是否支持 Brotli。
   - 作用:优先使用预压缩文件,提高响应效率,减少服务器实时压缩开销。 */

brotli on;
/* 启用 Brotli 实时压缩
   - 默认: off
   - 作用:在没有预压缩文件的情况下,服务器对响应内容进行实时压缩,减小响应体积。
   - 实时压缩可能会增加服务器的 CPU 负担。 */

brotli_comp_level 5;
/* 设置 Brotli 压缩级别
   - 默认: 6,范围: 0 ~ 11
   - 级别越高,压缩率越大,但也会增加压缩时间和 CPU 消耗。
   - 作用:在压缩效率和性能之间平衡,5 是一个常用的中等压缩级别。 */

brotli_min_length 1000;
/* 设置 Brotli 压缩的最小文件长度
   - 默认: 20
   - 只有当响应体长度大于这个值时,才会启用 Brotli 压缩。
   - 作用:避免对小文件进行压缩,减少不必要的 CPU 消耗。 */

brotli_types text/plain text/css text/xml application/javascript application/x-javascript application/xml application/xml+rss application/ecmascript application/json image/svg+xml;
/* 指定需要进行 Brotli 压缩的 MIME 类型
   - 默认情况下,text/html 类型总是被压缩。
   - 作用:通过 MIME 类型过滤指定文件进行 Brotli 压缩,提高页面加载速度。 */

brotli_window 512k;
/* 设置 Brotli 的窗口大小
   - 默认: 16k
   - 可接受的值范围:1k 到 16m,窗口大小越大,压缩率越高,但会占用更多内存。
   - 作用:影响 Brotli 的压缩效率和内存占用,512k 是一个较大的窗口设置,可以提高压缩效果。 */

重要说明:

  • brotli模块需要Nginx编译安装
  • brotli只支持https协议
  • brotli压缩算法需要浏览器支持
安装brotli模块安装brotli模块
2024-09-24

(二)如何启用?

将以下配置代码添加到 /www/server/nginx/conf/nginx.conf 文件中。确保将配置粘贴到合适的位置,通常是在 http 块内部或 server 块内部。

# GZIP 配置
        gzip_static always;
        gzip on;
        gzip_buffers 4 16k;
        gzip_min_length  0k;
        gzip_comp_level 4;
        gzip_types text/plain text/css text/xml text/javascript application/javascript application/x-javascript application/xml application/xml+rss application/ecmascript application/json image/svg+xml;
        gzip_disable "MSIE [1-6].(?!.*SV1)";
        gzip_vary on;
        gzip_http_version 1.0;
        gzip_proxied expired no-cache no-store private auth;

# Brotli 配置
        brotli_static always;
        brotli on;
        brotli_comp_level 5;
        brotli_min_length 1000;
        brotli_types text/plain text/css text/javascript application/javascript application/x-javascript application/xml application/xml+rss application/ecmascript application/json image/svg+xml application/octet-stream;
        brotli_window 512k;

# gzip & brotli同时开启后的优先级:brotli_static > gzip_static > brotli > gzip

(三)Gzip & Brotli 批量压缩资源脚本

使用.br.gz静态压缩文件传输,可以显著减少服务器在实时压缩时的计算负担。预压缩文件如HTML、CSS、JS等资源,并将其存储在服务器上,当用户请求这些文件时,直接提供已压缩的版本。这种方法不仅减少了服务器的实时处理需求,还能进一步加快资源传输速度,提升网站的整体响应时间。

此内容仅限注册用户查看,请先

(四)如何验证 Gzip & Brotli 是否生效?

1.打开浏览器开发者工具(F12);
2.检查 Response Header (响应头);
3.查看 Content-Encoding 头部;

不带 W/ 表示预先压缩已生效;
W/ 表示未使用预压缩(可能使用的是实时压缩);

Gzip & Brotli
本文最后更新于:2024-9-24 at 17:56:28
原文链接:https://junkai.cc/96.html,转载请注明出处~~~
0

评论0

请先
显示验证码
没有账号?注册  忘记密码?