在优化网站性能时,选择合适的资源压缩技术至关重要。Gzip 和 Brotli 是两种领先的压缩算法,能够显著减小网站资源的大小,从而提升加载速度、优化用户体验,并提高 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
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压缩算法需要浏览器支持
(二)如何启用?
将以下配置代码添加到 /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/
表示未使用预压缩(可能使用的是实时压缩);

评论0