开启 Nginx gzip 压缩后,HTML、CSS、JS 和 JSON 文本的大小可压缩 70% 以上,显著减少负载均衡后端的传输带宽消耗。
原因分析
Nginx 的 gzip 功能依赖 ngx_http_gzip_module 模块,该模块属于内置模块。当客户端发起 HTTP 请求时,服务器根据客户端请求的 Accept-Encoding 头信息判断是否支持 Gzip 压缩。若客户端支持,Nginx 将响应内容进行 Gzip 压缩,并在响应头中标注 Content-Encoding: gzip。浏览器接收到压缩数据后自动解压并渲染内容。对于文本类型的资源(如 HTML、CSS、JS 文件),压缩率通常在 70%-90%,这直接导致了数据传输时间的缩短。在负载均衡场景下,Nginx 作为反向代理服务器,开启 gzip 压缩可以减少后端服务器到 Nginx 之间的传输数据量,从而优化整体带宽使用。
检查 gzip 模块是否启用
首先使用 nginx -V 命令查看 nginx 服务器是否开启了对 gzip 的支持模块。如果输出中包含--with-http_gzip_module,说明 gzip 模块已编译。如果没有,则需要重新编译 Nginx 并添加该模块。重新编译时在./configure 时添加--with-http_gzip_module 参数。Nginx 提供了三个支持资源压缩的模块:ngx_http_gzip_module、ngx_http_gzip_static_module、ngx_http_gunzip_module,其中 ngx_http_gzip_module 属于内置模块。
配置 gzip 压缩参数
编辑 Nginx 配置文件,通常位于/etc/nginx/nginx.conf 或/etc/nginx/conf.d/gzip.conf。在 http 块中添加以下配置:gzip on;(启用 Gzip 压缩功能);gzip_min_length 1024;(最小压缩大小,单位字节,小于该值的数据将不进行压缩);gzip_comp_level 6;(压缩级别 1-9,值越大压缩率越高,性能开销越大,建议设置为 4~6);gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss;(指定需要压缩的 MIME 类型);gzip_vary on;(启用 Vary 响应头,告知缓存代理服务器对不同编码方式进行缓存分离处理);gzip_buffers 16 8k;(设置处理压缩请求的缓冲区数量和大小);gzip_http_version 1.1;(指定压缩响应所需要的最低 http 请求版本);gzip_proxied any;(对代理请求也启用压缩)。
负载均衡场景下的特殊配置
在负载均衡配置中,需要在 http 模块下同时配置 tcp_nopush 和 tcp_nodelay 选项,这两个选项可以优化 TCP 传输的效率,使数据以最小的延迟发送。对于视频流等实时性要求高的场景,gzip_min_length 可设置为 10240 字节。注意默认情况下 text/html 类型总是会被压缩,无需显式指定。有争议的配置点在于 gzip_comp_level 的设置:部分资料建议设置为 6(2026 年 1 月 2 日资料),而另一些资料建议设置为 9 以获得最高压缩率(2026 年 1 月 30 日资料)。实际应用中,级别 9 虽然压缩率最高但占用 CPU 较多,建议根据服务器 CPU 负载情况选择 4-6 之间的值。
测试 gzip 压缩是否生效
使用 curl 命令测试 Gzip 压缩:curl -H "Accept-Encoding: gzip" -I http://your-domain.com。预期输出中响应头应包含 Content-Encoding: gzip 字段。模拟测试场景:对 nginx 进行限速操作,限制每个连接的访问速度为 128K 来建立比较慢的访问场景。有测试案例显示,未开启压缩时一个大 JS 文件需要加载 12s,开启 gzip 压缩后可显著减少加载时间。
注意事项
第一,太小的文件压缩反而亏本(CPU 消耗),因此 gzip_min_length 建议设置为 1k 或 1024 字节以上。第二,千万别漏了 application/json 类型,这是 API 响应常用的格式。第三,禁用 IE6 的 gzip 可使用 gzip_disable "MSIE [1-6]\."配置(虽然现在也没人用了)。第四,gzip 压缩的副作用是会增加 CPU 的占用率,但多数情况下 CPU 还是相当"闲散"的。第五,配置文件修改后需要测试配置文件语法(nginx -t)并重启 Nginx 服务(systemctl restart nginx)才能生效。第六,采用非源码编译安装的方式默认会添加入许多模块,建议一般常用的服务器软件使用源码编译安装管理以保持轻装上阵。
参考来源
来源:Nginx 性能调优指南 - 开启 Gzip、KeepAlive 与负载均衡配置(2026 年 1 月 2 日)
来源:Nginx 开启 gzip 压缩让网站飞一会(2026 年 1 月 30 日)
来源:学习笔记 Nginx 中的 Gzip 压缩配置指南(2026 年 2 月 2 日)
来源:后端面试必备如何在 Nginx 中启用 gzip 压缩配置参数详解(2025 年 4 月 20 日)