Nginx开启Gzip压缩教程:静态资源优化与加载速度提升

网站加载速度优化中,Gzip 压缩是投入低、收益明显的一项配置。HTML、CSS、JavaScript、JSON 等文本资源经过压缩后,传输体积通常能明显减少,用户打开页面更快,服务器带宽压力也更小。

Nginx 开启 Gzip 并不复杂,但要注意压缩类型、最小压缩大小、代理场景、缓存头和验证方式。本文整理 Nginx Gzip 常用配置、静态资源优化思路和常见问题排查。

Gzip 是什么

Gzip 是一种常见压缩算法。浏览器请求资源时,会通过请求头告诉服务器自己支持哪些压缩方式。服务器如果开启 Gzip,就可以返回压缩后的内容。

Accept-Encoding: gzip, deflate, br

浏览器收到压缩内容后会自动解压,用户不会感知解压过程,但页面加载体积会减少。

适合压缩的资源

Gzip 适合文本类资源,比如 HTML、CSS、JavaScript、JSON、XML、SVG。图片、视频、压缩包这类本身已经压缩过的资源,通常不需要再 Gzip。

text/html
text/css
application/javascript
application/json

对已经压缩过的图片继续压缩,收益很小,还会增加 CPU 消耗。

Nginx开启Gzip压缩教程配图:静态资源优化与加载速度提升
Nginx Gzip 的核心目标,是减少文本资源传输体积,提升页面首屏加载速度。

基础配置

常见 Gzip 配置可以放在 http 块中,对所有站点生效。

gzip on;
gzip_min_length 1024;
gzip_comp_level 5;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;

gzip_min_length 表示小于指定大小的响应不压缩,避免小文件压缩收益低。gzip_comp_level 表示压缩等级,通常 4 到 6 已经够用。

压缩等级

Gzip 压缩等级越高,压缩率越高,但 CPU 消耗也越大。不要盲目设置到 9。

gzip_comp_level 5;

对大多数网站来说,中等压缩等级已经能取得不错效果。更高等级带来的体积减少可能有限,却会增加服务器计算压力。

压缩类型

gzip_types 决定哪些 MIME 类型会被压缩。默认通常已经包含 HTML,其他资源需要显式配置。

gzip_types text/css application/javascript application/json image/svg+xml;

如果发现 CSS 或 JS 没有压缩,要检查响应的 Content-Type 是否在 gzip_types 中。

代理场景

如果 Nginx 作为反向代理,后端返回内容也可以由 Nginx 压缩。可以根据代理响应头控制压缩行为。

gzip_proxied any;

代理站点要注意缓存层和后端是否已经做了压缩,避免重复配置造成排查混乱。

Vary 响应头

建议开启 gzip_vary,让缓存系统知道同一个 URL 可能根据 Accept-Encoding 返回不同版本。

gzip_vary on;

这对 CDN 和代理缓存尤其重要,可以减少压缩版本和非压缩版本混淆的问题。

完整示例

一个比较通用的 Nginx Gzip 配置如下:

gzip on;
gzip_min_length 1024;
gzip_comp_level 5;
gzip_vary on;
gzip_proxied any;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;

修改配置后先执行语法检查,再重载 Nginx。

nginx -t
systemctl reload nginx

验证是否生效

可以使用浏览器开发者工具查看响应头,确认是否有 Content-Encoding: gzip

Content-Encoding: gzip

也可以使用 curl 测试:

curl -H "Accept-Encoding: gzip" -I https://example.com/style.css

如果响应头中出现 Content-Encoding: gzip,说明压缩已经生效。

为什么没生效

Gzip 没生效常见原因包括:资源太小低于 gzip_min_length;资源类型不在 gzip_types 中;请求没有带 Accept-Encoding;配置写错位置;前面有 CDN 或缓存返回了旧响应。

排查时先确认 Nginx 配置已 reload,再确认响应头和资源 MIME 类型。

与 Brotli 的关系

Brotli 是另一种压缩算法,对文本资源压缩率通常更好,但需要浏览器和服务器模块支持。Gzip 兼容性更广,配置也更常见。

如果服务器支持 Brotli,可以同时使用 Brotli 和 Gzip,让浏览器自动选择支持的压缩方式。

WordPress 优化

WordPress 网站常见静态资源包括主题 CSS、插件 JS、SVG、JSON 接口响应等。Nginx 层开启 Gzip 后,可以减少这些文本资源体积。

如果同时使用缓存插件或 CDN,也要检查它们是否已经启用压缩,避免重复判断造成误解。

不要压缩所有内容

不是所有文件都适合压缩。JPEG、PNG、WebP、MP4、ZIP 等文件本身已经压缩,继续 Gzip 通常收益不大。对大文件盲目压缩还可能增加 CPU 压力。

常见错误

第一种错误是只写 gzip on,却没配置 gzip_types。第二种错误是把压缩等级调到 9。第三种错误是拿小文件测试,误以为没生效。第四种错误是 CDN 缓存未刷新。第五种错误是把图片压缩问题和 Gzip 混为一谈。

实践建议

Nginx 开启 Gzip 建议使用中等压缩等级,覆盖常见文本资源,开启 gzip_vary,并通过响应头验证是否生效。对 WordPress 站点来说,Gzip 是基础优化项,但仍要配合缓存、图片优化和数据库优化一起做。

Gzip 的价值在于用较低成本减少传输体积。配置清楚、验证到位,就能稳定提升静态资源加载速度。

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容